Я использую API очереди принтера для получения информации о состоянии принтера PRINTER_INFO_6
с использованием функции GetPrinter()
.
Myцель состоит в том, чтобы определить состояние бумаги (PRINTER_STATUS_PAPER_JAM
, PRINTER_STATUS_PAPER_OUT
, PRINTER_STATUS_PAPER_PROBLEM
) и состояние тонера (PRINTER_STATUS_TONER_LOW
, PRINTER_STATUS_NO_TONER
).
Странно, независимо от состояния принтера, элемент dwStatus
всегда ноль.
Следующий код извлекает информацию о состоянии принтера из принтера по умолчанию и отображает ее на экране:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main( void )
{
HANDLE hPrinter = INVALID_HANDLE_VALUE;
PPRINTER_INFO_6 pInfo = NULL;
DWORD dwNeeded = 0L;
CHAR szPrinterName[ MAX_PATH + 1 ] = {0};
DWORD dwLength = MAX_PATH;
BOOL ret = FALSE;
ret = GetDefaultPrinter( szPrinterName, &dwLength );
if( ret == FALSE )
{
fprintf(stderr, "[FATAL] GetDefaultPrinter() failed: %lu\n", GetLastError() );
return EXIT_FAILURE;
}
ret = OpenPrinter( szPrinterName, &hPrinter, NULL );
if( ret == FALSE )
{
fprintf(stderr, "[FATAL] OpenPrinter( '%s' ) failed: %lu\n", szPrinterName, GetLastError() );
return EXIT_FAILURE;
}
GetPrinter( hPrinter, 6, NULL, 0, &dwNeeded );
if(!dwNeeded)
{
fprintf(stderr, "[FATAL] GetPrinter() failed: %lu\n", GetLastError() );
ClosePrinter( hPrinter );
return EXIT_FAILURE;
}
pInfo = (PRINTER_INFO_6*) HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwNeeded );
if( pInfo == NULL )
{
fprintf(stderr, "[FATAL] HeapAlloc() failed: %lu\n", GetLastError() );
ClosePrinter( hPrinter );
return EXIT_FAILURE;
}
ret = GetPrinter( hPrinter, 6, (LPBYTE) pInfo, dwNeeded, &dwNeeded );
if( ret == FALSE )
{
fprintf(stderr, "[FATAL] GetPrinter() failed: %lu\n", GetLastError() );
HeapFree( GetProcessHeap(), 0, pInfo );
ClosePrinter( hPrinter );
return EXIT_FAILURE;
}
fprintf( stdout, "pInfo->dwStatus: 0x%08lX\n", pInfo->dwStatus );
HeapFree( GetProcessHeap(), 0, pInfo );
ClosePrinter( hPrinter );
return EXIT_SUCCESS;
}
В приведенном выше коде pInfo->dwStatus
всегда равен 0x00000000
.
Может кто-нибудь сказать мне, что не так?Улики?