- 原讨论链接: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))。