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;
}
  • Thomas Vass

    Owner of The Private Capital Market Crowd Funding Website

    «I have used Universal Document Converter since the very first versions as my sole tool for making document conversions. It works flawlessly and is very user-friendly. I recommend the product for all business applications.»