如何使用delphi发送测试页打印到打印机?

Sal*_*dor 4 printing delphi

实际上我正在一个需要在特定打印机上打印测试页的项目中工作.测试页必须与选项打印机属性 - >打印测试页中打印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)

结果: 打印机测试页面

请享用 :)

  • 萨尔瓦多,在询问有关它们的问题之前,请阅读[文档](http://msdn.microsoft.com/en-us/library/bb762211.aspx).找到有关PRINTACTION_TESTPAGE的部分,并阅读有关*lpBuf1*参数的内容. (3认同)

RRU*_*RUZ 6

您可以使用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)