Но можно понадеятся на порядочность:
function THadgPDFPrinter.GetPrinterStatus(hPrinter: THandle): TResult;
var
ABytesNeeded: Cardinal;
PrinterInfo: PPrinterInfo2;
PrinterInfoSize: Cardinal;
begin
Result.Result := False;
if not GetPrinter(hPrinter, 2, nil, 0, @ABytesNeeded) then
begin
if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then
begin
Result.errorCode := GetLastError;
Result.ErrorDescription := _GetErrorMsg(Result.errorCode);
//ClosePrinter(hPrinter);
exit;
end;
end;
PrinterInfoSize := ABytesNeeded;
GetMem(PrinterInfo, PrinterInfoSize);
if not GetPrinter(hPrinter, 2, PrinterInfo, ABytesNeeded, @ABytesNeeded) then
begin
Result.errorCode := GetLastError;
Result.ErrorDescription := _GetErrorMsg(Result.errorCode);
//ClosePrinter(hPrinter);
FreeMem(PrinterInfo, ABytesNeeded);
exit;
end;
//ClosePrinter(hPrinter);
Result.Data := PrinterInfo^.Status;
FreeMem(PrinterInfo, PrinterInfoSize);
Result.Result := true;
end;
https://docs.microsoft.com/en-us/windows/win32/printdocs/printer-info-2