如何使用GetPrinter

页面导航:首页 > 软件编程 > Delphi > 如何使用GetPrinter

如何使用GetPrinter

来源: 作者: 时间:2016-01-21 09:33 【

我想在任何时候查询打印的状态,包括是否联机、缺纸;怎么查询? 我用GetPrinter,查到的状态总是差半拍 --------------------------------------------------------------- 在VC++6.0中实现与打印机相关的
我想在任何时候查询打印的状态,包括是否联机、缺纸;怎么查询?
我用GetPrinter,查到的状态总是差半拍

---------------------------------------------------------------

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

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.。
Tags:

相关文章

    文章评论

    最 近 更 新
    热 点 排 行
    Js与CSS工具
    代码转换工具
    
    <