How to get the status of a USB printer.
-
hi, I needed a small help regarding the code which i have written in VC++ to get the status of a printer like ''PRINTER_STATUS_NO_TONER", "PRINTER_STATUS_PAPER_JAM" etc.. I have written the following code: char szPrinter[255]; memset(szPrinter,'\0',255); strcpy(szPrinter,m_szPrinterName.operator LPCTSTR()); BOOL bSuccess = FALSE; HANDLE hPrinter = NULL; PRINTER_DEFAULTS *lpDefaults = NULL; BOOL bOpen = ::OpenPrinter(szPrinter, &hPrinter, lpDefaults); DWORD dwBytesReturned; DWORD dwBytesNeeded; GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded); PRINTER_INFO_2 *pPrinterInfo = (PRINTER_INFO_2*)GlobalAlloc(GPTR,dwBytesNeeded); bSuccess = ::GetPrinter(hPrinter, 2, (LPBYTE)pPrinterInfo,dwBytesNeeded, &dwBytesReturned); uint32 dwStatusID = 0; switch(pPrinterInfo->Status) { case PRINTER_STATUS_BUSY: dwStatusID = ID_STAT_PRN_BUSY; bSuccess = TRUE; break; case PRINTER_STATUS_DOOR_OPEN: dwStatusID = ID_STAT_PRN_DOOR_OPEN; bSuccess = TRUE; break; case PRINTER_STATUS_ERROR: dwStatusID = ID_STAT_PRN_ERROR; bSuccess = FALSE; break; case PRINTER_STATUS_INITIALIZING: dwStatusID = ID_STAT_PRN_INITIALIZING; bSuccess = TRUE; break; case PRINTER_STATUS_IO_ACTIVE: dwStatusID = ID_STAT_PRN_IO_ACTIVE; bSuccess = TRUE; break; case PRINTER_STATUS_MANUAL_FEED: dwStatusID = ID_STAT_PRN_MANUAL_FEED; bSuccess = TRUE; break; case PRINTER_STATUS_NO_TONER: dwStatusID = ID_STAT_PRN_NO_TONER; bSuccess = FALSE; break; case PRINTER_STATUS_NOT_AVAILABLE: dwStatusID = ID_STAT_PRN_NOT_AVAILABLE; bSuccess = FALSE; break; case PRINTER_STATUS_OFFLINE: dwStatusID = ID_STAT_PRN_OFFLINE; bSuccess = TRUE; break; case PRINTER_STATUS_OUT_OF_MEMORY: dwStatusID = ID_STAT_PRN_OUT_OF_MEMORY; bSuccess = FALSE; break; case PRINTER_STATUS_OUTPUT_BIN_FULL: dwStatusID = ID_STAT_PRN_OUTPUT_BIN_FULL; bSuccess = TRUE; break; case PRINTER_STATUS_PAGE_PUNT: dwStatusID = ID_STAT_PRN_PAGE_PUNT; bSuccess = FALSE; break; case PRINTER_STATUS_PAPER_JAM: dwStatusID = ID_STAT_PRN_PAPER_JAM; bSuccess = FALSE; break; case