打印本文 打印本文 关闭窗口 关闭窗口
用winspool取得本机安装的打印机的详细信息
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1868  更新时间:2009/4/23 18:40:03  文章录入:mintao  责任编辑:mintao

用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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口