window API GetPrinter 有关问题求解
window API GetPrinter 问题求解。
- Delphi(Pascal) code
unit Umain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,winspool,Printers, ExtCtrls; type TForm1 = class(TForm) BitBtn2: TBitBtn; LabeledEdit1: TLabeledEdit; CheckBox1: TCheckBox; procedure BitBtn2Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type days=(sun,mon,tue,wed,thu,fri,sat); var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BitBtn2Click(Sender: TObject); var pinfo: array[0..32] of _PRINTER_INFO_2a; pprt,a: Cardinal; b:DWORD; MyPrinter,MyHandle : THandle; MyDevice,MyDriver,MyPort: array [0..255] of Char; begin if CheckBox1.Checked then begin Printer().PrinterIndex := -1; Printer().GetPrinter(MyDevice,MyDriver,MyPort,MyHandle); end else begin StrCopy(@MyDevice,PChar(LabeledEdit1.Text)); end; if OpenPrinter(MyDevice,pprt,nil) then begin a:=sizeof(pinfo); b:=84; if getprinter(pprt,2,@pinfo,a,@b) then begin showmessage(pinfo[0].pPrinterName+' ststus:'+inttostr(pinfo[0].Status)); case pinfo[0].Status of 0: //PRINTER_STATUS_OK: showmessage('正常'); PRINTER_STATUS_PAUSED : // $00000001; showmessage('暂停'); PRINTER_STATUS_ERROR : // $00000002; showmessage('错误'); PRINTER_STATUS_PENDING_DELETION : // $00000004; showmessage('暂停'); PRINTER_STATUS_PAPER_JAM : // $00000008; showmessage('夹纸'); PRINTER_STATUS_PAPER_OUT : // $00000010; showmessage('暂停'); PRINTER_STATUS_MANUAL_FEED : // $00000020; showmessage('手动送纸'); PRINTER_STATUS_PAPER_PROBLEM : // $00000040; showmessage('纸张问题'); PRINTER_STATUS_OFFLINE : // $00000080; showmessage('脱机'); PRINTER_STATUS_IO_ACTIVE : // $00000100; showmessage('暂停'); PRINTER_STATUS_BUSY : // $00000200; showmessage('忙'); PRINTER_STATUS_PRINTING : // $00000400; showmessage('打印中'); PRINTER_STATUS_OUTPUT_BIN_FULL : // $00000800; showmessage('暂停'); PRINTER_STATUS_NOT_AVAILABLE : // $00001000; showmessage('无效'); PRINTER_STATUS_WAITING : // $00002000; showmessage('等待'); PRINTER_STATUS_PROCESSING : // $00004000; showmessage('处理'); PRINTER_STATUS_INITIALIZING : // $00008000; showmessage('正在初始化'); PRINTER_STATUS_WARMING_UP : // $00010000; showmessage('预热'); PRINTER_STATUS_TONER_LOW : // $00020000; showmessage('墨少'); PRINTER_STATUS_NO_TONER : // $00040000; showmessage('缺墨'); PRINTER_STATUS_PAGE_PUNT : // $00080000; showmessage('暂停'); PRINTER_STATUS_USER_INTERVENTION : // $00100000; showmessage('用户干涉'); PRINTER_STATUS_OUT_OF_MEMORY : // $00200000; showmessage('超出内存'); PRINTER_STATUS_DOOR_OPEN : // $00400000; showmessage('门打开'); PRINTER_STATUS_SERVER_UNKNOWN : // $00800000; showmessage('不明服务'); PRINTER_STATUS_POWER_SAVE : // $01000000; showmessage('节能'); else showmessage('print end or no print'); end; end else begin showmessage(SysErrorMessage(GetLastError())); end; ClosePrinter(pprt); end; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin LabeledEdit1.Enabled:= not CheckBox1.Checked; end; end.