GetPrinterStatus

#include <Winspool.h>

DWORD GetPrinterStatus( char* szPrnName )
{
  HANDLE          hHandle = 0;   // Handle of the printer

  DWORD           dwStatus = 0;  // Printer status we should receive
                                 // Few values for example:
                                 // 0x00000000 - ready
                                 // 0x00000001 - paused
                                 // 0x00000002 - error
                                 // 0x00000200 - busy
                                 // 0x00000400 - printing
                                 // for more info please see MSDN

  DWORD           dwSize = 0;    // Size of memory we should
                                 // allocate for PRINTER_INFO_2

  PRINTER_INFO_2* pPrnInfo2 = 0; // Structure specifies detailed
                                 // printer information

  DEVMODE         DevMode = {0}; // Structure contains information
                                 // about the device initialization
                                 // and environment of a printer

  PRINTER_DEFAULTS PrnDef = { 0, &DevMode, PRINTER_ACCESS_USE };

// Open printer with name szPrnName
  if( !OpenPrinter( szPrnName, &hHandle, &PrnDef ) )
    return 0; // Error

// How many memory should be allocated for printer data?
  GetPrinter( hHandle, 2, 0, 0, &dwSize );
  if( !dwSize )
    return 0; // Error

// Allocate memory
  pPrnInfo2 = (PRINTER_INFO_2*)malloc( dwSize );

// Receive printer details
  if(!GetPrinter( hHandle, 2, (LPBYTE)pPrnInfo2, dwSize, &dwSize ))
    return 0; // Error

  dwStatus = pPrnInfo2->Status;

// Free allocated memory
  free( pPrnInfo2 );

// Close printer
  ClosePrinter( hHandle );

  return dwStatus;
}
  • Dr. Ciro Bianco

    Pharmacist from Naples, Italy

    «Universal Document Converter excellently fulfilled my professional needs. It is easy to install, understand, and use. With Universal Document Converter I solved a number of organizational problems and sped up a myriad of tasks.»