我正在使用PDF控件套件,它会在启动时自动创建打印队列,但偶尔如果应用程序异常终止,则不会删除队列,因此在下次启动时会创建一个副本。 / p>
我可以使用“打印机”列表检查打印队列以找到它,但我看不到如何删除特定队列?
答案 0 :(得分:2)
使用Winspool,打印机;
GetCurrentPrinterHandle
检索当前打印机的句柄 @Returns当前打印机的API打印机句柄 @Desc使用WinSpool.OpenPrinter获取打印机句柄。呼叫者,召集者 获得句柄的所有权,并且必须在其上调用ClosePrinter 一旦不再需要手柄。如果做不到就会造成这种情况 严重的资源泄漏!
在Uses子句中需要Printers和WinSpool。 如果OpenPrinter调用失败,则@Raises EWin32Error。
Function GetCurrentPrinterHandle: THandle;
Const
Defaults: TPrinterDefaults = (
pDatatype : nil;
pDevMode : nil;
DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER
);
Var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
Begin { GetCurrentPrinterHandle }
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
If not OpenPrinter(@Device, Result, @Defaults) Then
RaiseLastWin32Error;
End; { GetCurrentPrinterHandle }
{: Kill all pending jobs on the current printer }
Procedure PurgeJobsOnCurrentPrinter;
Var
hPrinter: THandle;
Begin
hPrinter:= GetCurrentPrinterHandle;
try
If not WinSpool.SetPrinter( hPrinter, 0, nil,
PRINTER_CONTROL_PURGE )
Then
RaiseLastWin32Error;
finally
ClosePrinter( hPrinter );
end;
End; { PurgeJobsOnCurrentPrinter }