用winspool取得本机安装的打印机的详细信息
在Delphi 6 Professional version on Windows 2000 Professional环境下测试过窗体的名字为"FPrint",有TMemo 和 TCombobox 两个控件
unit unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, TabEdit, Printers, Buttons, WinSpool;
type 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;
TFPrint = class(TForm) Memo1: TMemo; ComboBox1: TComboBox; procedure FormShow(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end;
function GetCurrentPrinterInformation: TPrinterInfo; function GetCurrentPrinterHandle: THandle;
var FPrint: TFPrint;
implementation
{$R *.dfm}
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 TFPrint.FormShow(Sender: TObject); begin ComboBox1.Items.Assign(Printer.Printers); ComboBox1.ItemIndex := 0; ComboBox1.OnChange(nil); end;
procedure TFPrint.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;
end.//rock//转载请保留此信息