Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drucker Warteschlange leeren? (https://www.delphipraxis.net/20946-drucker-warteschlange-leeren.html)

chris01 25. Apr 2004 19:04


Drucker Warteschlange leeren?
 
Hi,

gibt es eine API-Funktion, die die Warteschlange des Druckers leert? Ich hab bis jetzt nur im SwissDelphiCenter eine Funktion zum Auslesen dieser gefunden.

Diese hier...

Gruß
Christopher

Assarbad 27. Apr 2004 12:31

Re: Drucker Warteschlange leeren?
 
Nein, es gibt nicht EINE Funktion. Du mußt die Jobs mit EnumJobs() listen und dann mit:

Code:
BOOL SetJob(
  HANDLE hPrinter, // handle to printer object
  DWORD JobId,     // print job identifier
  DWORD Level,     // information level
  LPBYTE pJob,    // job information buffer
  DWORD Command    // job command value
);
... abbrechen

norbertd 5. Mai 2006 23:44

Re: Drucker Warteschlange leeren?
 
Hiermit geht es:

Delphi-Quellcode:
// start service
//
// return TRUE if successful
//
// sMachine:
//   machine name, ie: \\SERVER
//   empty = local machine
//
// sService
//   service name, ie: spooler
//
function TPPInstallForm.ServiceStart(sMachine, sService : string ) : boolean;
  var
    schm, schs : SC_Handle; // service control manager handle & service handle
    ss : TServiceStatus; // service status
    psTemp : PChar; // temp char pointer
    dwChkP : DWord;  // check point
  begin
    ss.dwCurrentState := 0;
    // connect to the service control manager
    schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
    // if successful...
    if(schm > 0)then begin
      // open a handle to the specified service
      // we want to start the service and query service status
      schs := OpenService(schm, PChar(sService), SERVICE_START or SERVICE_QUERY_STATUS);
      // if successful...
      if(schs > 0)then begin
        psTemp := Nil;
        if(StartService(schs, 0, psTemp)) then begin
          // check status
          if (QueryServiceStatus(schs, ss))then begin
            while (SERVICE_RUNNING <> ss.dwCurrentState)do begin
              //
              // dwCheckPoint contains a value that the service increments periodically
              // to report its progress during a lengthy operation.
              // save current value
              dwChkP := ss.dwCheckPoint;
              // wait a bit before checking status again
              //
              // dwWaitHint is the estimated amount of time
              // the calling program should wait before calling
              // QueryServiceStatus() again
              //
              // idle events should be
              // handled here...
              //
              Sleep(ss.dwWaitHint);
              if (not QueryServiceStatus(schs, ss))then begin
                // couldn't check status
                // break from the loop
                break;
              end;
              if (ss.dwCheckPoint < dwChkP) then begin
                // QueryServiceStatus didn't increment dwCheckPoint as it should have.
                // avoid an infinite loop by breaking
                break;
              end;
            end;
          end;
        end;
        // close service handle
        CloseServiceHandle(schs);
      end;
      // close service control manager handle
      CloseServiceHandle(schm);
  end;
  // return TRUE if the service status is running
  Result := SERVICE_RUNNING = ss.dwCurrentState;
end;

//------------------------------------------------------------------------------
// stop service
//
// return TRUE if successful
//
// sMachine:
//   machine name, ie: \\SERVER
//   empty = local machine
//
// sService
//   service name, ie: Alerter
//
function TPPInstallForm.ServiceStop(sMachine, sService : string ) : boolean;
  var
    schm, schs  : SC_Handle; // service control & service handle manager handle
    ss : TServiceStatus; // service status
    dwChkP : DWord; // check point
  begin
    // connect to the service control manager
    schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
    // if successful...
    if (schm > 0) then begin
      // open a handle to the specified service
      // we want to stop the service and query service status
      schs := OpenService(schm, PChar(sService), SERVICE_STOP or SERVICE_QUERY_STATUS);
      // if successful...
      if (schs > 0) then begin
        if (ControlService(schs, SERVICE_CONTROL_STOP, ss)) then begin
          // check status
          if (QueryServiceStatus(schs, ss)) then begin
            while (SERVICE_STOPPED <> ss.dwCurrentState) do begin
              // dwCheckPoint contains a value that the service increments periodically
              // to report its progress during a lengthy operation.
              // save current value
              dwChkP := ss.dwCheckPoint;
              // wait a bit before checking status again
              // dwWaitHint is the estimated amount of time
              // the calling program should wait before calling QueryServiceStatus() again
              // idle events should be handled here...
              Sleep(ss.dwWaitHint);
              if (not QueryServiceStatus(schs, ss)) then begin
                // couldn't check status
                // break from the loop
                break;
              end;
              if (ss.dwCheckPoint < dwChkP) then begin
                // QueryServiceStatus didn't increment dwCheckPoint as it should have.
                // avoid an infinite loop by breaking
                break;
              end;
            end;
          end;
        end;
        // close service handle
        CloseServiceHandle(schs);
      end;
      // close service control manager handle
      CloseServiceHandle(schm);
    end;
    // return TRUE if the service status is stopped
    Result := SERVICE_STOPPED = ss.dwCurrentState;
end;
...und hier die Einleitung für den eigentlichen Code:

Delphi-Quellcode:
      if (ServiceStop('', 'spooler')) then
         begin

      //Hier Deinen Code einfügen..............

      if not ServiceStart('', 'spooler') then
         ShowMessage('Der Spoolservice konnte nicht gestartet werden.' +     #13 + 'Bitte den Treiber deinstallieren und wiederholen.')
[edit=Luckie]Delphi-Tags hinzugefügt. Mfg, Luckie[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz