procedure TForm1.Button2Click(Sender: TObject); var status: dword; function GetCurrentPrinterStatus: dword; var hPrinter: THandle; Device: array [0 .. 255] of char; Driver: array [0 .. 255] of char; Port: array [0 .. 255] of char; hDeviceMode: THandle; bytesNeeded: Cardinal; pPI: PPrinterInfo2; Defaults: TPrinterDefaults; begin Assert(Printer.PrinterIndex >= 0); Printer.GetPrinter(Device, Driver, Port, hDeviceMode); FillChar(Defaults, Sizeof(Defaults), 0); Defaults.DesiredAccess := PRINTER_ACCESS_ADMINISTER or PRINTER_ACCESS_USE; Win32Check(WinSpool.OpenPrinter(@Device, hPrinter, @Defaults)); try WinSpool.GetPrinter(hPrinter, 2, Nil, 0, @bytesNeeded); GetMem(pPI, bytesNeeded); try Win32Check(WinSpool.GetPrinter(hPrinter, 2, pPI, bytesNeeded, @bytesNeeded)); Result := pPI^.status; finally FreeMem(pPI); end; finally WinSpool.ClosePrinter(hPrinter); end; end; begin status := GetCurrentPrinterStatus; if (status and PRINTER_STATUS_OFFLINE) <> 0 then ShowMessage('offline') else ShowMessage('online'); end;
begin
Status := GetCurrentPrinterStatus;
if (Status = PRINTER_STATUS_OFFLINE) then //<> 0 then
begin
// ShowMessage('offline') ;
MessageDlg('Acunes imprimantes actives', mtWarning, [mbOK], 0);
end
else
begin
// ShowMessage('online');
end;
end;
var Form1: TForm1; Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hPrinter: THandle; hDeviceMode: THandle; pcbNeed: DWORD; Buffer: Pointer; procedure TForm1.Button1Click(Sender: TObject); begin Printer.GetPrinter(Device, Driver, Port, hDeviceMode); if not OpenPrinter(@Device, hPrinter, nil) then Exit; if (OpenPrinter(@Device, hPrinter, nil)) then begin Try GetPrinter(hPrinter, 2, nil,0,@pcbNeed); GetMem(Buffer, pcbNeed); if GetPrinter(hPrinter, 2, Buffer, pcbNeed, @pcbNeed) then begin Edit1.Text:= TPrinterInfo2A(Buffer^).pPrinterName; if (TPrinterInfo2A(Buffer^).Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE = PRINTER_ATTRIBUTE_WORK_OFFLINE) then begin Showmessage('l''imprimante est éteinte.'); Exit; end Else showmessage('l''imprimante est allumée.'); end; Finally FreeMem(Buffer, pcbNeed); End; end; End;
TPrinterInfo2A(Buffer^).Attributesa toujours la même valeur(2624) dans les 2 cas (mon imprimante est en wifi).