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

2008-04-09 04:29:08来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

用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));

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何控制其他程序窗体上的窗口控件:中

下一篇:一个简单的菜单按钮的实现