harryzhao
驱动牛犊
驱动牛犊
  • 注册日期2004-05-18
  • 最后登录2009-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2987回复:7

高分求助-如何通过windows API得知打印机状态

楼主#
更多 发布于:2004-05-20 15:27
win spool一系列的api好像都是和驱动打交道,取不到实际打印机硬件的状态(如是否开机在线等),那位大侠有办法...

Hellboy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-22
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-20 15:44
GetPrinter()可以得到PRINTER_INFO_2的内容,里面有个nStatus参数来标志打印机状态。
如果要知道打印机是否正在打印,缓冲数据,等消息,需要用到EmnumJob的api,通过获取Job_info_1的信息得到打印机里面当前任务的状态。
hzken
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2004-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-20 15:48
土办法是调用一个spool或port函数测试。

调用特定的spool或port函数测试,在打印机某状态为TRUE应该返回true, 否则返回false.
Hellboy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-22
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-20 15:54
这个办法好啊!
harryzhao
驱动牛犊
驱动牛犊
  • 注册日期2004-05-18
  • 最后登录2009-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-20 16:01
我试过getprinter,但那个status总是为0,不管打印机连没连。

to hzken, port函数指的是那些呢
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-20 18:58
Spool系列函数都是控制主机端打印作业的,
如果要得知打印机状态,我想应该读取连接打印机的端口的状态值,
该值应该由打印机返回
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
hzken
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2004-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-21 01:17
unix上有现成的函数可用,Windows上我也不知道,Windows做了太多的工作然后并且不公开文当。

另外,有些答应机关机了也能处理打印作业(就是不出纸)。

试试这个吧:PRINTER_INFO_2.status
Status
Specifies the printer status. This member can be any reasonable combination of the following values. Value Meaning
PRINTER_STATUS_BUSY The printer is busy.  
PRINTER_STATUS_DOOR_OPEN The printer door is open.
PRINTER_STATUS_ERROR The printer is in an error state.
PRINTER_STATUS_INITIALIZING The printer is initializing.  
PRINTER_STATUS_IO_ACTIVE The printer is in an active input/output state
PRINTER_STATUS_MANUAL_FEED The printer is in a manual feed state.
PRINTER_STATUS_NO_TONER The printer is out of toner.
PRINTER_STATUS_NOT_AVAILABLE The printer is not available for printing.  
PRINTER_STATUS_OFFLINE The printer is offline.  
PRINTER_STATUS_OUT_OF_MEMORY The printer has run out of memory.  
PRINTER_STATUS_OUTPUT_BIN_FULL The printer\'s output bin is full.  
PRINTER_STATUS_PAGE_PUNT The printer cannot print the current page.
Windows 95/98/Me: Indicates the page is being \"punted\" (that is, not printed) because it is too complex for the printer to print.
 
PRINTER_STATUS_PAPER_JAM Paper is jammed in the printer  
PRINTER_STATUS_PAPER_OUT The printer is out of paper.
PRINTER_STATUS_PAPER_PROBLEM The printer has a paper problem.  
PRINTER_STATUS_PAUSED The printer is paused.
PRINTER_STATUS_PENDING_DELETION The printer is being deleted.  
PRINTER_STATUS_POWER_SAVE The printer is in power save mode.  
PRINTER_STATUS_PRINTING The printer is printing.
PRINTER_STATUS_PROCESSING The printer is processing a print job.  
PRINTER_STATUS_SERVER_UNKNOWN The printer status is unknown.  
PRINTER_STATUS_TONER_LOW The printer is low on toner.
PRINTER_STATUS_USER_INTERVENTION The printer has an error that requires the user to do something.
PRINTER_STATUS_WAITING The printer is waiting.  
PRINTER_STATUS_WARMING_UP The printer is warming up.



harryzhao
驱动牛犊
驱动牛犊
  • 注册日期2004-05-18
  • 最后登录2009-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-21 13:25
I download a driver which can get parallel port status, I guess this is the only way under win2k.

when the printer is offline, the value is 0x7f, when the printer is online, the value is 0xdf, so there are some differences.

thanks for all your help.
游客

返回顶部