起動時に印刷キューを自動的に作成する PDF コントロール スイートを使用していますが、アプリが異常終了した場合、キューが削除されないことがあるため、次の起動時に重複が作成されます。
プリンター リストを使用して印刷キューを確認することはできますが、特定のキューを削除する方法がわかりません。
起動時に印刷キューを自動的に作成する PDF コントロール スイートを使用していますが、アプリが異常終了した場合、キューが削除されないことがあるため、次の起動時に重複が作成されます。
プリンター リストを使用して印刷キューを確認することはできますが、特定のキューを削除する方法がわかりません。
Winspool、プリンターを使用します。
GetCurrentPrinterHandle
現在のプリンターのハンドルを取得します。 @現在のプリンターの API プリンター ハンドルを返します。 @Desc WinSpool.OpenPrinter を使用してプリンター ハンドルを取得します。呼び出し元はハンドルの所有権を取得し、ハンドルが不要になったら ClosePrinter を呼び出す必要があります。そうしないと、重大なリソース リークが発生します。
Uses 句に Printers と 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 }