如何获得当前打印机的状态?如未连机,缺纸, 打印机出错等, 在XP和2000下使用. 在程序中,由于有大量的数据需要打印,针式打印机,速度较慢,如果有打印任务时,直接把它放到打印队列中,经常出现漏打.因此,只有当打印机空闲时,才发送打印命令.可是,现在我没法获得当前打印机的状态.在网上找过一些代码,都用到了汇编,在XP下不支持. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试windows的API函数吧,网上查查,看有没有相关API函数。 TPrinterInfo = record SeverName : PChar; PrinterName : PChar; ShareName : PChar; PortName : PChar; DriverName : PChar; Comment : PChar; Location : PChar; DeviceMode : PDeviceModeA; SepFile : PChar; PrintProcessor : PChar; DataType : PChar; Parameters : PChar; SecurityDescriptor: PSecurityDescriptor; Attributes : Cardinal; DefaultPriority : Cardinal; StartTime : Cardinal; UntilTime : Cardinal; Status : Cardinal; Jobs : Cardinal; AveragePPM : Cardinal; end; function GetCurrentPrinterHandle: THandle; var Device, Driver, Port : array[0..255] of char; hDeviceMode: THandle; begin Printer.GetPrinter(Device, Driver, Port, hDeviceMode); if not OpenPrinter(@Device, Result, nil) then RaiseLastWin32Error; end; function GetCurrentPrinterInformation: TPrinterInfo; var hPrinter : THandle; pInfo: PPrinterInfo2; bytesNeeded: DWORD; begin hprinter := GetCurrentPrinterHandle; try Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded ); pInfo := AllocMem( bytesNeeded ); try Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded ); Result.SeverName := pInfo^.pServerName; Result.PrinterName := pInfo^.pPrinterName; Result.ShareName := pInfo^.pShareName; Result.PortName := pInfo^.pPortName; Result.DriverName := pInfo^.pDriverName; Result.Comment := pInfo^.pComment; Result.Location := pInfo^.pLocation; Result.DeviceMode := pInfo^.pDevMode; Result.SepFile := pInfo^.pSepFile; Result.PrintProcessor := pInfo^.pPrintProcessor; Result.DataType := pInfo^.pDatatype; Result.Parameters := pInfo^.pParameters; Result.SecurityDescriptor := pInfo^.pSecurityDescriptor; Result.Attributes := pInfo^.Attributes; Result.DefaultPriority := pInfo^.DefaultPriority; Result.StartTime := pInfo^.StartTime; Result.UntilTime := pInfo^.UntilTime; Result.Status := pInfo^.Status; Result.Jobs := pInfo^.cJobs; Result.AveragePPM := pInfo^.AveragePPM; finally FreeMem( pInfo ); end; finally ClosePrinter( hPrinter ); end; end;procedure TForm1.ComboBox1Change(Sender: TObject);var PrinterInfo: TPrinterInfo; begin PrinterInfo := GetCurrentPrinterInformation; memo1.Clear; with memo1.Lines do begin Add('GENERAL INFORMATION'); Add(''); Add('ServerName: ' + PrinterInfo.SeverName); Add('PrinterName: ' + PrinterInfo.PrinterName); Add('ShareName: ' + PrinterInfo.ShareName); Add('PortName: ' + PrinterInfo.PortName); Add('DriverName: ' + PrinterInfo.DriverName); Add('Comment: ' + PrinterInfo.Comment); Add('Location: ' + PrinterInfo.Location); Add('SepFile: ' + PrinterInfo.SepFile); Add('PrintProcessor: ' + PrinterInfo.PrintProcessor); Add('DataType: ' + PrinterInfo.DataType); Add('Parameters: ' + PrinterInfo.Parameters); Add('Attributes: ' + IntToStr(PrinterInfo.Attributes)); Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority)); Add('StartTime: ' + IntToStr(PrinterInfo.StartTime)); Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime)); Add('Status: ' + IntToStr(PrinterInfo.Status)); Add('Jobs: ' + IntToStr(PrinterInfo.Jobs)); Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM)); Add(''); Add('DEVICEMODE INFORMATION'); Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName); Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion)); Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion)); Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize)); Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra)); Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields)); Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation)); Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize)); Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength)); Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth)); Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale)); Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies)); Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource)); Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality)); Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor)); Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex)); Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution)); Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption)); Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate)); Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels)); Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel)); Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth)); Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight)); Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags)); Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency)); TPrinterInfo = record SeverName : PChar; PrinterName : PChar; ShareName : PChar; PortName : PChar; DriverName : PChar; Comment : PChar; Location : PChar; DeviceMode : PDeviceModeA; SepFile : PChar; PrintProcessor : PChar; DataType : PChar; Parameters : PChar; SecurityDescriptor: PSecurityDescriptor; Attributes : Cardinal; DefaultPriority : Cardinal; StartTime : Cardinal; UntilTime : Cardinal; Status : Cardinal; Jobs : Cardinal; AveragePPM : Cardinal; end; function GetCurrentPrinterHandle: THandle; var Device, Driver, Port : array[0..255] of char; hDeviceMode: THandle; begin Printer.GetPrinter(Device, Driver, Port, hDeviceMode); if not OpenPrinter(@Device, Result, nil) then RaiseLastWin32Error; end; function GetCurrentPrinterInformation: TPrinterInfo; var hPrinter : THandle; pInfo: PPrinterInfo2; bytesNeeded: DWORD; begin hprinter := GetCurrentPrinterHandle; try Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded ); pInfo := AllocMem( bytesNeeded ); try Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded ); Result.SeverName := pInfo^.pServerName; Result.PrinterName := pInfo^.pPrinterName; Result.ShareName := pInfo^.pShareName; Result.PortName := pInfo^.pPortName; Result.DriverName := pInfo^.pDriverName; Result.Comment := pInfo^.pComment; Result.Location := pInfo^.pLocation; Result.DeviceMode := pInfo^.pDevMode; Result.SepFile := pInfo^.pSepFile; Result.PrintProcessor := pInfo^.pPrintProcessor; Result.DataType := pInfo^.pDatatype; Result.Parameters := pInfo^.pParameters; Result.SecurityDescriptor := pInfo^.pSecurityDescriptor; Result.Attributes := pInfo^.Attributes; Result.DefaultPriority := pInfo^.DefaultPriority; Result.StartTime := pInfo^.StartTime; Result.UntilTime := pInfo^.UntilTime; Result.Status := pInfo^.Status; Result.Jobs := pInfo^.cJobs; Result.AveragePPM := pInfo^.AveragePPM; finally FreeMem( pInfo ); end; finally ClosePrinter( hPrinter ); end; end;procedure TForm1.ComboBox1Change(Sender: TObject);var PrinterInfo: TPrinterInfo; begin PrinterInfo := GetCurrentPrinterInformation; memo1.Clear; with memo1.Lines do begin Add('GENERAL INFORMATION'); Add(''); Add('ServerName: ' + PrinterInfo.SeverName); Add('PrinterName: ' + PrinterInfo.PrinterName); Add('ShareName: ' + PrinterInfo.ShareName); Add('PortName: ' + PrinterInfo.PortName); Add('DriverName: ' + PrinterInfo.DriverName); Add('Comment: ' + PrinterInfo.Comment); Add('Location: ' + PrinterInfo.Location); Add('SepFile: ' + PrinterInfo.SepFile); Add('PrintProcessor: ' + PrinterInfo.PrintProcessor); Add('DataType: ' + PrinterInfo.DataType); Add('Parameters: ' + PrinterInfo.Parameters); Add('Attributes: ' + IntToStr(PrinterInfo.Attributes)); Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority)); Add('StartTime: ' + IntToStr(PrinterInfo.StartTime)); Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime)); Add('Status: ' + IntToStr(PrinterInfo.Status)); Add('Jobs: ' + IntToStr(PrinterInfo.Jobs)); Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM)); Add(''); Add('DEVICEMODE INFORMATION'); Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName); Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion)); Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion)); Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize)); Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra)); Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields)); Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation)); Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize)); Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength)); Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth)); Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale)); Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies)); Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource)); Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality)); Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor)); Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex)); Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution)); Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption)); Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate)); Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels)); Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel)); Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth)); Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight)); Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags)); Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency)); procedure TForm1.ComboBox1Change(Sender: TObject);var PrinterInfo: TPrinterInfo; begin PrinterInfo := GetCurrentPrinterInformation; memo1.Clear; with memo1.Lines do begin Add('GENERAL INFORMATION'); Add(''); Add('ServerName: ' + PrinterInfo.SeverName); Add('PrinterName: ' + PrinterInfo.PrinterName); Add('ShareName: ' + PrinterInfo.ShareName); Add('PortName: ' + PrinterInfo.PortName); Add('DriverName: ' + PrinterInfo.DriverName); Add('Comment: ' + PrinterInfo.Comment); Add('Location: ' + PrinterInfo.Location); Add('SepFile: ' + PrinterInfo.SepFile); Add('PrintProcessor: ' + PrinterInfo.PrintProcessor); Add('DataType: ' + PrinterInfo.DataType); Add('Parameters: ' + PrinterInfo.Parameters); Add('Attributes: ' + IntToStr(PrinterInfo.Attributes)); Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority)); Add('StartTime: ' + IntToStr(PrinterInfo.StartTime)); Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime)); Add('Status: ' + IntToStr(PrinterInfo.Status)); Add('Jobs: ' + IntToStr(PrinterInfo.Jobs)); Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM)); Add(''); Add('DEVICEMODE INFORMATION'); Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName); Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion)); Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion)); Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize)); Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra)); Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields)); Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation)); Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize)); Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength)); Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth)); Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale)); Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies)); Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource)); Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality)); Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor)); Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex)); Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution)); Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption)); Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate)); Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels)); Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel)); Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth)); Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight)); Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags)); Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency)); Add('ICMMethod: ' + IntToStr(PrinterInfo.DeviceMode.dmICMMethod)); Add('ICMintent: ' + IntToStr(PrinterInfo.DeviceMode.dmICMIntent)); Add('MediaType: ' + IntToStr(PrinterInfo.DeviceMode.dmMediaType)); Add('DitherType: ' + IntToStr(PrinterInfo.DeviceMode.dmDitherType)); Add('ICCManufacturer: ' + IntToStr(PrinterInfo.DeviceMode.dmICCManufacturer)); Add('ICCModel: ' + IntToStr(PrinterInfo.DeviceMode.dmICCModel)); Add('PanningWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningWidth)); Add('PanningHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningHeight)); end; end; 谢谢 oushengfen 啊.我的好多问题,你都回复过...不好意思啊,最近这些时间,没有查看这个帐子.呵呵,问题我自己解决了:我用的是EPSON 220 PB 的打印机,打印小票的部分,全部用的EPSON打印机指令搞定的. EPSON北京公司提供了技术支持.关于获取打印机的状态,我直接用的 WinIO.dll 这个动态库,直接获取并口状态位的高低电平信号来判断打印机的状态.现在连打印机驱动也不用安装了. 关于DrawGrid和StringGrid的疑问 实现TreeView多节点的同时移动 dxdbgrid问题 如何消除這個時鐘的閃爍? 关于面向对象的问题(override)!国庆节了,散分! 关于狗的问题。 连接Oracle问题 Delphi在Windows XP下的问题,如何解决 fastreport2.42版本可否在D6上安装? 新手问一个关于事务操作的问题,还望高手指教 请教怎么把数据实时存入数据库中? ActiveX 网页与客户端
SeverName : PChar;
PrinterName : PChar;
ShareName : PChar;
PortName : PChar;
DriverName : PChar;
Comment : PChar;
Location : PChar;
DeviceMode : PDeviceModeA;
SepFile : PChar;
PrintProcessor : PChar;
DataType : PChar;
Parameters : PChar;
SecurityDescriptor: PSecurityDescriptor;
Attributes : Cardinal;
DefaultPriority : Cardinal;
StartTime : Cardinal;
UntilTime : Cardinal;
Status : Cardinal;
Jobs : Cardinal;
AveragePPM : Cardinal;
end;
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end; function GetCurrentPrinterInformation: TPrinterInfo;
var
hPrinter : THandle;
pInfo: PPrinterInfo2;
bytesNeeded: DWORD;
begin
hprinter := GetCurrentPrinterHandle;
try
Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
pInfo := AllocMem( bytesNeeded );
try
Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded );
Result.SeverName := pInfo^.pServerName;
Result.PrinterName := pInfo^.pPrinterName;
Result.ShareName := pInfo^.pShareName;
Result.PortName := pInfo^.pPortName;
Result.DriverName := pInfo^.pDriverName;
Result.Comment := pInfo^.pComment;
Result.Location := pInfo^.pLocation;
Result.DeviceMode := pInfo^.pDevMode;
Result.SepFile := pInfo^.pSepFile;
Result.PrintProcessor := pInfo^.pPrintProcessor;
Result.DataType := pInfo^.pDatatype;
Result.Parameters := pInfo^.pParameters;
Result.SecurityDescriptor := pInfo^.pSecurityDescriptor;
Result.Attributes := pInfo^.Attributes;
Result.DefaultPriority := pInfo^.DefaultPriority;
Result.StartTime := pInfo^.StartTime;
Result.UntilTime := pInfo^.UntilTime;
Result.Status := pInfo^.Status;
Result.Jobs := pInfo^.cJobs;
Result.AveragePPM := pInfo^.AveragePPM;
finally
FreeMem( pInfo );
end;
finally
ClosePrinter( hPrinter );
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
PrinterInfo: TPrinterInfo;
begin
PrinterInfo := GetCurrentPrinterInformation;
memo1.Clear;
with memo1.Lines do
begin
Add('GENERAL INFORMATION');
Add('');
Add('ServerName: ' + PrinterInfo.SeverName);
Add('PrinterName: ' + PrinterInfo.PrinterName);
Add('ShareName: ' + PrinterInfo.ShareName);
Add('PortName: ' + PrinterInfo.PortName);
Add('DriverName: ' + PrinterInfo.DriverName);
Add('Comment: ' + PrinterInfo.Comment);
Add('Location: ' + PrinterInfo.Location);
Add('SepFile: ' + PrinterInfo.SepFile);
Add('PrintProcessor: ' + PrinterInfo.PrintProcessor);
Add('DataType: ' + PrinterInfo.DataType);
Add('Parameters: ' + PrinterInfo.Parameters);
Add('Attributes: ' + IntToStr(PrinterInfo.Attributes));
Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority));
Add('StartTime: ' + IntToStr(PrinterInfo.StartTime));
Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime));
Add('Status: ' + IntToStr(PrinterInfo.Status));
Add('Jobs: ' + IntToStr(PrinterInfo.Jobs));
Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM));
Add('');
Add('DEVICEMODE INFORMATION');
Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName);
Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion));
Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion));
Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize));
Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra));
Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields));
Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation));
Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize));
Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength));
Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));
Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale));
Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies));
Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource));
Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality));
Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor));
Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex));
Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution));
Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption));
Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate));
Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels));
Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel));
Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth));
Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight));
Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags));
Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency));
SeverName : PChar;
PrinterName : PChar;
ShareName : PChar;
PortName : PChar;
DriverName : PChar;
Comment : PChar;
Location : PChar;
DeviceMode : PDeviceModeA;
SepFile : PChar;
PrintProcessor : PChar;
DataType : PChar;
Parameters : PChar;
SecurityDescriptor: PSecurityDescriptor;
Attributes : Cardinal;
DefaultPriority : Cardinal;
StartTime : Cardinal;
UntilTime : Cardinal;
Status : Cardinal;
Jobs : Cardinal;
AveragePPM : Cardinal;
end;
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end; function GetCurrentPrinterInformation: TPrinterInfo;
var
hPrinter : THandle;
pInfo: PPrinterInfo2;
bytesNeeded: DWORD;
begin
hprinter := GetCurrentPrinterHandle;
try
Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
pInfo := AllocMem( bytesNeeded );
try
Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded );
Result.SeverName := pInfo^.pServerName;
Result.PrinterName := pInfo^.pPrinterName;
Result.ShareName := pInfo^.pShareName;
Result.PortName := pInfo^.pPortName;
Result.DriverName := pInfo^.pDriverName;
Result.Comment := pInfo^.pComment;
Result.Location := pInfo^.pLocation;
Result.DeviceMode := pInfo^.pDevMode;
Result.SepFile := pInfo^.pSepFile;
Result.PrintProcessor := pInfo^.pPrintProcessor;
Result.DataType := pInfo^.pDatatype;
Result.Parameters := pInfo^.pParameters;
Result.SecurityDescriptor := pInfo^.pSecurityDescriptor;
Result.Attributes := pInfo^.Attributes;
Result.DefaultPriority := pInfo^.DefaultPriority;
Result.StartTime := pInfo^.StartTime;
Result.UntilTime := pInfo^.UntilTime;
Result.Status := pInfo^.Status;
Result.Jobs := pInfo^.cJobs;
Result.AveragePPM := pInfo^.AveragePPM;
finally
FreeMem( pInfo );
end;
finally
ClosePrinter( hPrinter );
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
PrinterInfo: TPrinterInfo;
begin
PrinterInfo := GetCurrentPrinterInformation;
memo1.Clear;
with memo1.Lines do
begin
Add('GENERAL INFORMATION');
Add('');
Add('ServerName: ' + PrinterInfo.SeverName);
Add('PrinterName: ' + PrinterInfo.PrinterName);
Add('ShareName: ' + PrinterInfo.ShareName);
Add('PortName: ' + PrinterInfo.PortName);
Add('DriverName: ' + PrinterInfo.DriverName);
Add('Comment: ' + PrinterInfo.Comment);
Add('Location: ' + PrinterInfo.Location);
Add('SepFile: ' + PrinterInfo.SepFile);
Add('PrintProcessor: ' + PrinterInfo.PrintProcessor);
Add('DataType: ' + PrinterInfo.DataType);
Add('Parameters: ' + PrinterInfo.Parameters);
Add('Attributes: ' + IntToStr(PrinterInfo.Attributes));
Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority));
Add('StartTime: ' + IntToStr(PrinterInfo.StartTime));
Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime));
Add('Status: ' + IntToStr(PrinterInfo.Status));
Add('Jobs: ' + IntToStr(PrinterInfo.Jobs));
Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM));
Add('');
Add('DEVICEMODE INFORMATION');
Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName);
Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion));
Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion));
Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize));
Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra));
Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields));
Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation));
Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize));
Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength));
Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));
Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale));
Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies));
Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource));
Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality));
Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor));
Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex));
Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution));
Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption));
Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate));
Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels));
Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel));
Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth));
Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight));
Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags));
Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency));
var
PrinterInfo: TPrinterInfo;
begin
PrinterInfo := GetCurrentPrinterInformation;
memo1.Clear;
with memo1.Lines do
begin
Add('GENERAL INFORMATION');
Add('');
Add('ServerName: ' + PrinterInfo.SeverName);
Add('PrinterName: ' + PrinterInfo.PrinterName);
Add('ShareName: ' + PrinterInfo.ShareName);
Add('PortName: ' + PrinterInfo.PortName);
Add('DriverName: ' + PrinterInfo.DriverName);
Add('Comment: ' + PrinterInfo.Comment);
Add('Location: ' + PrinterInfo.Location);
Add('SepFile: ' + PrinterInfo.SepFile);
Add('PrintProcessor: ' + PrinterInfo.PrintProcessor);
Add('DataType: ' + PrinterInfo.DataType);
Add('Parameters: ' + PrinterInfo.Parameters);
Add('Attributes: ' + IntToStr(PrinterInfo.Attributes));
Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority));
Add('StartTime: ' + IntToStr(PrinterInfo.StartTime));
Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime));
Add('Status: ' + IntToStr(PrinterInfo.Status));
Add('Jobs: ' + IntToStr(PrinterInfo.Jobs));
Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM));
Add('');
Add('DEVICEMODE INFORMATION');
Add(''); Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName);
Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion));
Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion));
Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize));
Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra));
Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields));
Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation));
Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize));
Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength));
Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));
Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale));
Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies));
Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource));
Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality));
Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor));
Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex));
Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution));
Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption));
Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate));
Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels));
Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel));
Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth));
Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight));
Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags));
Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency));
Add('ICMMethod: ' + IntToStr(PrinterInfo.DeviceMode.dmICMMethod));
Add('ICMintent: ' + IntToStr(PrinterInfo.DeviceMode.dmICMIntent));
Add('MediaType: ' + IntToStr(PrinterInfo.DeviceMode.dmMediaType));
Add('DitherType: ' + IntToStr(PrinterInfo.DeviceMode.dmDitherType));
Add('ICCManufacturer: ' + IntToStr(PrinterInfo.DeviceMode.dmICCManufacturer));
Add('ICCModel: ' + IntToStr(PrinterInfo.DeviceMode.dmICCModel));
Add('PanningWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningWidth));
Add('PanningHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningHeight));
end; end;
我用的是EPSON 220 PB 的打印机,打印小票的部分,全部用的EPSON打印机指令搞定的. EPSON北京公司提供了技术支持.
关于获取打印机的状态,我直接用的 WinIO.dll 这个动态库,直接获取并口状态位的高低电平信号来判断打印机的状态.现在连打印机驱动也不用安装了.