You can use the PrintTestPage method from the Win32_Printer class
check this sample
{$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.
source share