简单的问题:如何终止打印机打印(100分)

  • 主题发起人 主题发起人 wwwwww
  • 开始时间 开始时间
W

wwwwww

Unregistered / Unconfirmed
GUEST, unregistred user!
1.当打印机机打印时,能否通过一个过程或函数终止打印作业呢?
而不是通过单击右下角任务栏上的图标—清空打印文档来进行。
以下的方法: PRINTER.ABORT;
PRINTER.ENDDOC;

ABOERDOC(PRINER.HANDLE)似乎都试过,不行。
有无其它方法,请不吝赐教。
2.如不是终止打印作业,而是暂停打印,又想继续打印
PRINERT.PAUSE;
PRINERT.CONTINUE;
可否?
 
英雄所问略同,请不吝赐教
 
Windows下打印机是按页接收数据的,
你不可能在某页打印到一半时暂停。
只能用Ptinter.NewPage结束当前页
的打印,但不结束整个打印任务
 
你对Windows的工作特性还理解的不够。
Windows是一个单用户多任务操作系统,当一个任务正在进行过程中,如打印
机正在工作,它仅获得打印机资源,而要结束该任务只能由其它的任务向Windows
发送中止打印机任务的消息等待Windows来相应,这就是为什么用Windows右
下角的打印机来结束任务的原因。
基于上述原因,要中止打印机的任务,只能在打印过程中不断检索某个特定消息,
(这需要你自己来编程,而不能用Delphi或其它语言提供的现成的打印语句来实现,
恐怕编程的难度相当大)给Windows,当Windows检测到该消息后就中止打印任务,
这也就是为什么Printer语句不灵的原因之所在。
举例来说:倘若有一循环,在循环体内要不断检测特定的消息,如
...
For I:=1 To ndo

begin

print(i);
Abort(CancelInfoMessage);
if CancelInfoMessage then
Goto 结束任务;
end;

而你是无法将消息插入到Printer.Abort等语句当中的.
 
那么结束其它人的任务呢?自己做打印管理器?
 
能不能向打印进程发消息,或干脆结束打印进程?
 
to Xiaowind:
从windows的原理上讲,不能向打印进程发消息;但打印进程可以相应消息。
换句话说,Windows在执行打印任务时并不完全占用打印机资源,以便相应外部
的消息。

to Cj:
若要结束指定的任务,首先需得到该任务的句柄,然后才能对该任务进行
操作,如释放该任务占用的各种资源,... ...。这些在有关的书籍上都有较
详细的解释。
 
看来是没有办法了,连人家OFFICE 97都未能做到的问题,我等之辈更
有心无力了。
再想想办法,能不能模拟“打印管理器删除作业”的操作,
FOR I:=1 TO 作业数量
DO DELETE_JOB;
INIT PRINTER;
//最后初始化打印机,向驱动程序发送初始化命令,或直接向打印口发送
//初始化字符串。如果真是很难办到,就算了。
//另外,由于论坛速度太快,比蜗牛还快2%~3%,我的忍耐是有限度的,
//所以未ONLINE,又在另外四个问题中包括了这个问题,不好意思

//请诸位大虾米继续关心我另外的三个问题,请见“狂甩400整,吐血大送分”
//您大吝赐教,我也不吝金银

//OK,再等等,如果没有讨论,该分赃了
 
wwwwww不要太自卑
Windows在打印时是将文件暂存于一缓冲区内,若你能将待打印的内容分批放入
缓冲区中就可有时间检测外部来的消息了!
 
如果是自己编程,能不能把打印任务按页传给打印机,循环检测某一控制变量,
这样不就可以随心所欲了!黑吧。
 
That's Easy .
Just Use Windows API
 
呵呵, 用setprinter就可以:-)
 
现在彻底解决该问题!!

SetAbortProc(HDC hdc, // handle of device context
ABORTPROC lpAbortProc // address of abort function
);
该函数设置一个回调函数,在hdc打印过程中,会不停的调用这个回调函数AbortProc,
其中回调函数AbortProc声明如下:

AbortProc( HDC hdc, int iError);

参数iError是出错码,0表示没有错误,常数SP_OUTOFDISK表示磁盘空间不够用了.

函数返回值: True 表示继续打印, false表示终止打印

嘿嘿,这个问题终于可以结束了!!!
 
cAKK:
你能写一个例子么
 
若有了其他方法或答案例子,请E-Mail给我,谢谢大家!
 
接受答案了.
 

Similar threads

D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
D
回复
0
查看
945
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部