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

类别:Delphi 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it5720.htm