• 4175阅读
  • 1回复

[提问]获取共享打印机的状态 [复制链接]

上一主题 下一主题
离线殷bing
 

只看楼主 倒序阅读 楼主  发表于: 2013-10-10
— 本帖被 XChinux 从 Qt 作品展 移动到本区(2013-10-11) —
关键词: 共享
rt,使用API接口的话,也是获取的本地的打印机状态,而且用QPrinter的printstate获取的也是本地的打印机状态,那么怎样获取共享打印机的状态呢?
离线殷bing

只看该作者 1楼 发表于: 2013-10-10
Q
  1. QPrinterInfo Info( q_printer );
  2.     QString printerName = Info.printerName();
  3.     //打印机句柄
  4.     HANDLE hPrinter;
  5.     LPSTR szPrinterName;
  6.     //作业信息
  7.     JOB_INFO_2 *pJobs;
  8.     //作业
  9.     int cJobs;
  10.     //打印机状态
  11.     DWORD dwPrinterStatus;
  12.     szPrinterName = (char*)printerName.toLocal8Bit().data();
  13.     OpenPrinterA( szPrinterName, &hPrinter, NULL);
  14.     //获取打印作业的状态
  15.     GetJobs( hPrinter, &pJobs, &cJobs, &dwPrinterStatus );
  16.     //判断打印机是否正常运行,如果为false,则输出为PDF文档
  17.     if( 0 != dwPrinterStatus )
  18.     {
  19.         QWidget w;
  20.         int i_button = QMessageBox::information( &w, "warning", " can not connect printer, whether save to PDF?",
  21.                                           QMessageBox::Yes | QMessageBox::No );
  22.         if( QMessageBox::Yes == i_button )
  23.         {
  24.             PrintToPDF( &q_printer );
  25.         }
  26.     }
  27.     //运行正常,则直接打印
  28.     else
  29.     {
  30.         if( dialog.exec() )
  31.         {
  32.             QPainter q_painter( &q_printer );
  33.             render( &q_painter);
  34.         }
  35.     }
  36. }
  37. /// 获取打印作业的状态
  38. BOOL CScene::GetJobs(HANDLE hPrinter, JOB_INFO_2 **ppJobInfo, int *pcJobs, DWORD *pStatus)
  39. {
  40. DWORD       cByteNeeded, nReturned, cByteUsed;
  41. JOB_INFO_2          *pJobStorage = NULL;
  42. PRINTER_INFO_2       *pPrinterInfo = NULL;
  43. if ( !GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded ) )
  44. {
  45.   DWORD dwErrorCode = ::GetLastError();
  46.   if ( dwErrorCode != ERROR_INSUFFICIENT_BUFFER )
  47.       return FALSE;
  48. }
  49. pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
  50. if (!(pPrinterInfo))
  51.     return FALSE;
  52. if (!GetPrinter(hPrinter, 2, (LPBYTE)pPrinterInfo, cByteNeeded, &cByteUsed))
  53. {
  54.       free(pPrinterInfo);
  55.       pPrinterInfo = NULL;
  56.       return FALSE;
  57. }
  58. if (!EnumJobs(hPrinter, 0, pPrinterInfo->cJobs, 2, NULL, 0, (LPDWORD)&cByteNeeded,
  59.   (LPDWORD)&nReturned))
  60. {
  61.       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
  62.       {
  63.            free(pPrinterInfo);
  64.            pPrinterInfo = NULL;
  65.            return FALSE;
  66.       }
  67. }
  68. pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);
  69. if (!pJobStorage)
  70. {
  71.       free(pPrinterInfo);
  72.       pPrinterInfo = NULL;
  73.       return FALSE;
  74. }
  75. ZeroMemory(pJobStorage, cByteNeeded);
  76. if (!EnumJobs(hPrinter, 0, pPrinterInfo->cJobs, 2, (LPBYTE)pJobStorage, cByteNeeded,
  77.   (LPDWORD)&cByteUsed, (LPDWORD)&nReturned))
  78. {
  79.       free(pPrinterInfo);
  80.       free(pJobStorage);
  81.       pJobStorage = NULL;
  82.       pPrinterInfo = NULL;
  83.       return FALSE;
  84. }
  85. *pcJobs = nReturned;
  86. *pStatus = pPrinterInfo->Status;
  87. *ppJobInfo = pJobStorage;
  88. free(pPrinterInfo);
  89. return TRUE;
  90. }
  91. //打印成PDF文档
  92. void CScene::PrintToPDF( QPrinter *printer)
  93. {
  94.     //打印为PDF文档输出
  95.     printer->setOutputFormat( QPrinter::PdfFormat );
  96.     QWidget w;
  97.     QString path = QFileDialog::getSaveFileName( &w, "save as", "", "*.pdf");
  98.     if( path.isEmpty() )
  99.     {
  100.         return ;
  101.     }
  102.     QFileInfo fileinfo( path );
  103.     printer->setOutputFileName( fileinfo.fileName() );
  104.     QPainter q_painter( printer );
  105.     render( &q_painter );
  106. }

快速回复
限100 字节
 
上一个 下一个