如何在Delphi中删除打印队列
我使用的是PDF控件套件,它在启动时自动创建打印队列,但偶尔,如果应用程序异常终止,队列不会被删除,因此在下一次启动时,它会创建一个副本如何在Delphi中删除打印队列,delphi,printqueue,Delphi,Printqueue,我使用的是PDF控件套件,它在启动时自动创建打印队列,但偶尔,如果应用程序异常终止,队列不会被删除,因此在下一次启动时,它会创建一个副本 我可以使用打印机列表检查打印队列以找到它,但我看不到如何删除特定队列。使用Winspool,打印机 GetCurrentPrinterHandle 检索当前打印机的句柄 @返回当前打印机的API打印机句柄 @Desc使用WinSpool.OpenPrinter获取打印机句柄。来电者 获取句柄的所有权,并且必须对其调用ClosePrinter 一旦不再需要手柄。
我可以使用打印机列表检查打印队列以找到它,但我看不到如何删除特定队列。使用Winspool,打印机 GetCurrentPrinterHandle 检索当前打印机的句柄 @返回当前打印机的API打印机句柄 @Desc使用WinSpool.OpenPrinter获取打印机句柄。来电者 获取句柄的所有权,并且必须对其调用ClosePrinter 一旦不再需要手柄。如果做不到这一点,就会造成严重后果 严重的资源泄漏
Uses子句中需要打印机和WinSpool。 @如果OpenPrinter调用失败,则引发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 }
这不是你的应用程序的用户可以决定的吗?要求打印作业。在应用程序启动时检查队列是否存在。@NGLN我在启动时检查,看到一个副本,但当前无法删除它。我的应用程序是特定队列的唯一用户。用户不希望看到同一队列的多个副本。这也会造成许可问题。与其自动创建打印队列,为什么不先检查现有的打印队列并使用它呢?