用winspool取得本機安裝的印表機的詳細資訊 (轉)

gugu99發表於2008-04-28
用winspool取得本機安裝的印表機的詳細資訊 (轉)[@more@]

用winspool取得本機的印表機的詳細資訊

在 6 Professional version on 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;
  Name  : 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: T);
  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
  RaiseLastError;
end;

function GetCurrentPrinterInformation: TPrinterInfo;
var
  hPrinter  : THandle;
  pInfo:  PPrinterInfo2;
  bytesNeeded: D;
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('Paength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength));
  Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));
  Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale));
  Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies));
  Add('Default: ' + 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
//轉載請保留此資訊


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1003093/,如需轉載,請註明出處,否則將追究法律責任。

相關文章