0

起動時に印刷キューを自動的に作成する PDF コントロール スイートを使用していますが、アプリが異常終了した場合、キューが削除されないことがあるため、次の起動時に重複が作成されます。

プリンター リストを使用して印刷キューを確認することはできますが、特定のキューを削除する方法がわかりません。

4

1 に答える 1

2

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 } 
于 2013-12-11T11:06:11.403 に答える