实际上我正在一个需要在特定打印机上打印测试页的项目中工作.测试页必须与选项打印机属性 - >打印测试页中打印Windows的页面相同.
我怎么能在delphi中做到这一点?
jac*_*ate 13
此代码将打印默认打印机的测试页:
uses ShellAPI, printers;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
Device, Driver, Port: Array [0..255] of Char;
hDevMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDevmode);
ShInvokePrinterCommand(handle, PRINTACTION_TESTPAGE, Device, nil, true );
end;
Run Code Online (Sandbox Code Playgroud)
结果:

请享用 :)
您可以使用wmi类中的PrintTestPage方法Win32_Printer
检查这个样本
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj;
procedure PrintTestPage(const PrinterName:string);
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
PrintResult : Integer;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_Printer Where Name="%s"',[PrinterName]),'WQL',0);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
PrintResult:=FWbemObject.PrintTestPage;
if PrintResult=0 then
Writeln('Success')
else
Writeln('An error occurred');
end;
end;
begin
try
CoInitialize(nil);
try
PrintTestPage('MyPrinter');
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |