如何使用GetPrinter

本文介绍了如何在VC++ 6.0中使用GetPrinter函数查询网络打印机的状态,例如是否在线和缺纸。通过示例代码展示如何打开打印机句柄,获取PRINTER_INFO_2结构信息,判断打印机是否缺纸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 原讨论链接:http://community.youkuaiyun.com/expert/topicview1.asp?id=316297
  • 所属论坛:VCL组件开发及应用     审核组:Delphi
  • 提问者:szchengyu     解决者:
  • 感谢:acptvc
  • 关键字:函数 调用 Delphi VCL组件开发及应用 参考 打印机 联机 pprinterinfo dwneeded getprinter hprinter spooler
  • 答案:

    我想在任何时候查询打印的状态,包括是否联机、缺纸;怎么查询?
    我用GetPrinter,查到的状态总是差半拍

    --------------------------------------------------------------- 首先感谢使用微软产品。

    在VC++ 6.0中实现与打印机相关的功能可以通过调用Win32 Spooler库中的函数实现。这些函数的定义在Winspool.h中,这些函数的参考手册可以见MSDN中Platform SDK->Graphics and Multimedia Services->Windows GDI->Printing and Print Spooler。以下举例说明。假设现在有一台网络打印机,URL是"//MyServerName/SharedPrinterName"。如果需要查询这台打印机是否缺纸,可以通过以下函数实现:

    BOOL isOutOfPaper(){
      HANDLE hPrinter=0;
      DWORD dwNeeded=0;
      PRINTER_INFO_2* pPrinterInfo= (PRINTER_INFO_2 *)malloc( 0 );

      ::OpenPrinter("////MyServerName//SharedPrinterName",&hPrinter,NULL);
      if(!::GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,0,&dwNeeded)){
        pPrinterInfo= (PRINTER_INFO_2 *)malloc( dwNeeded );
        ::GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,dwNeeded,&dwNeeded);
      }
      ::ClosePrinter(hPrinter);

      if(pPrinterInfo->Status==PRINTER_STATUS_PAPER_OUT){
        free(pPrinterInfo);
        return TRUE;
      }else{
        free(pPrinterInfo);
        return FALSE;
      }
    }

    其中OpenPrinter()用于获得一个打印机句柄,GetPrinter()用于获得打印机相关信息。关于Win32 Spooler的更详细的功能和使用方法请参考前面提到的MSDN中的有关章节。关于Win32 Spooler中函数调用需要注意的地方请参考http://support.microsoft.com/support/kb/articles/Q158/8/28.asp。

    希望我的回答能够令您满意。

     

    - 微软全球技术中心 VC技术支持

    本贴子仅供优快云的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值