用winspool取得本机安装的打印机的详细信息

    技术2022-05-11  100

    用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//转载请保留此信息


    最新回复(0)