用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. [1] [2] 下一页 没有相关教程
|