how to check the printer status.

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
<div style="border-right:#7f9db9 1px solid;border-top:#7f9db9 1px solid;font-size:11px;overflow:auto;border-left:#7f9db9 1px solid;line-height:100%! important;border-bottom:#7f9db9 1px solid;font-family:Courier New;background-color:white
<table style="border-top-width:0px;border-left-width:0px;margin:2px 0px;width:99%;border-bottom:#eee 0px solid;border-collapse:collapse;background-color:#fff;border-right-width:0px" cellspacing=0 cellpadding=0>
<colgroup>
<col style="padding-left:10px;font-size:11px;border-bottom:#f7f7f7 1px solid;font-family:Courier New;white-space:nowrap
<tbody>
<tr>
<td><font style="font-size:11px CString PrinterName;  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7     DWORD </font><font style="color:red BufferSize</font><font style="font-size:11px  = </font><font style="color:blue 1000</font><font style="font-size:11px ;  </font></td></tr>
<tr>
<td>    if (!GetDefaultPrinter(PrinterName.GetBuffer(),&BufferSize)) AfxMessageBox("error in get printer name.");  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>    if(0!=GetPrinterStatus(PrinterName.GetBuffer()))   </td></tr>
<tr>
<td style="background-color:#f7f7f7         AfxMessageBox("Printer is normal");  </td></tr>
<tr>
<td>    else AfxMessageBox("Printer is out of order");  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="background-color:#f7f7f7 DWORD CprntDlg::GetPrinterStatus( char* szPrnName )  </td></tr>
<tr>
<td>{  </td></tr>
<tr>
<td style="background-color:#f7f7f7   HANDLE          </font><font style="color:red hHandle</font><font style="font-size:11px  = </font><font style="color:blue 0</font><font style="font-size:11px ;   // Handle of the printer  </font></td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="background-color:#f7f7f7   DWORD           </font><font style="color:red dwStatus</font><font style="font-size:11px  = </font><font style="color:blue 0</font><font style="font-size:11px ;  // Printer status we should receive  </font></td></tr>
<tr>
<td>                                 // Few values for example:  </td></tr>
<tr>
<td style="background-color:#f7f7f7                                  // 0x00000000 - ready  </td></tr>
<tr>
<td>                                 // 0x00000001 - paused  </td></tr>
<tr>
<td style="background-color:#f7f7f7                                  // 0x00000002 - error  </td></tr>
<tr>
<td>                                 // 0x00000200 - busy  </td></tr>
<tr>
<td style="background-color:#f7f7f7                                  // 0x00000400 - printing  </td></tr>
<tr>
<td>                                 // for more info please see MSDN  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  DWORD           </font><font style="color:red dwSize</font><font style="font-size:11px  = </font><font style="color:blue 0</font><font style="font-size:11px ;    // Size of memory we should  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7                                  // allocate for PRINTER_INFO_2  </td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="background-color:#f7f7f7   PRINTER_INFO_2* </font><font style="color:red pPrnInfo2</font><font style="font-size:11px  = </font><font style="color:blue 0</font><font style="font-size:11px ; // Structure specifies detailed  </font></td></tr>
<tr>
<td>                                 // printer information  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  DEVMODE         </font><font style="color:red DevMode</font><font style="font-size:11px  = {0}; // Structure contains information  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7                                  // about the device initialization  </td></tr>
<tr>
<td>                                 // and environment of a printer  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  PRINTER_DEFAULTS </font><font style="color:red PrnDef</font><font style="font-size:11px  = { 0, &DevMode, PRINTER_ACCESS_USE };  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  // Open printer with name szPrnName  </td></tr>
<tr>
<td style="background-color:#f7f7f7   if( !OpenPrinter( szPrnName, &hHandle, &PrnDef ) )  </td></tr>
<tr>
<td>    return 0; // Error  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  // How many memory should be allocated for printer data?  </td></tr>
<tr>
<td style="background-color:#f7f7f7   GetPrinter( hHandle, 2, 0, 0, &dwSize );  </td></tr>
<tr>
<td>  if( !dwSize )  </td></tr>
<tr>
<td style="background-color:#f7f7f7     return 0; // Error  </td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="background-color:#f7f7f7   // Allocate memory  </td></tr>
<tr>
<td>  </font><font style="color:red pPrnInfo2</font><font style="font-size:11px  = (PRINTER_INFO_2*)malloc( dwSize );  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  // Receive printer details  </td></tr>
<tr>
<td style="background-color:#f7f7f7   if(!GetPrinter( hHandle, 2, (LPBYTE)pPrnInfo2, dwSize, &dwSize ))  </td></tr>
<tr>
<td>    return 0; // Error  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  </font><font style="color:red dwStatus</font><font style="font-size:11px  = </font><font style="color:blue pPrnInfo2</font><font style="font-size:11px -</font><font style="color:blue ></font><font style="font-size:11px Status;  </font></td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  // Free allocated memory  </td></tr>
<tr>
<td style="background-color:#f7f7f7   //free( pPrnInfo2 );  //?  </td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="background-color:#f7f7f7   // Close printer  </td></tr>
<tr>
<td>  ClosePrinter( hHandle );  </td></tr>
<tr>
<td style="background-color:#f7f7f7  </td></tr>
<tr>
<td>  return dwStatus;  </td></tr>
<tr>
<td style="background-color:#f7f7f7 } </td></tr></tbody></table>  
how to check the printer status.
my application need to check the printer status before i send any text or image to printer, e.g. printer outof line, out of paper
etc.
i just dont know why the following code come out status 0 every time? even if i did not connect the printer there.
i paste the code here. it always comes out "printer is normal", even if i did not connect any printer.
what should i do? thank you to point the problems out for me.

<hr size="1" align="left" width="25% gusto

View the full article
 
Back
Top