delphi 取得本机打印机列表及打印机详细信息

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,WinSpool,Printers ,StdCtrls;

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;

type
TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

//取得本机打印机列表
function GetCurrentPrinterHandle: THandle;

//取得本机打印机详细信息

function GetCurrentPrinterInformation: TPrinterInfo;


var
Form1: TForm1;

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 TForm1.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;


//取得本机打印机列表

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.Assign(Printer.Printers);
ComboBox1.ItemIndex := 0;
//若无Combobox.onchange事件代码,请把下面的代码注释掉,否则程序打开时容易出错。若已有combobox.onchange事件代码,则不用注释掉。

ComboBox1.OnChange(nil);
end;

end.

你可能感兴趣的:(delphi 取得本机打印机列表及打印机详细信息)