Как я могу удалить очередь печати в Delphi
Я использую пакет управления PDF, который создает очередь печати автоматически при запуске, но иногда, если приложение завершается ненормально, очередь не удаляется, поэтому при следующем запуске он создает дубликат.
Я могу проверить очереди печати, чтобы найти его, используя список принтеров, но я не вижу, как удалить определенную очередь?
1 ответ
Использует Winspool, принтеры;
GetCurrentPrinterHandle
Получает дескриптор текущего принтера. @ Возвращает дескриптор принтера API для текущего принтера. @Desc Использует WinSpool.OpenPrinter, чтобы получить дескриптор принтера. Вызывающий объект становится владельцем дескриптора и должен вызвать для него метод ClosePrinter, если дескриптор больше не нужен. Невыполнение этого требования приводит к серьезной утечке ресурсов!
Требуются принтеры и WinSpool в разделе "Использование". @Raises EWin32Error в случае сбоя вызова OpenPrinter.
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 }