![]() |
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. ![]() Gruß Christopher |
Re: Drucker Warteschlange leeren?
Nein, es gibt nicht EINE Funktion. Du mußt die Jobs mit EnumJobs() listen und dann mit:
Code:
... abbrechen
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 ); |
Re: Drucker Warteschlange leeren?
Hiermit geht es:
Delphi-Quellcode:
...und hier die Einleitung für den eigentlichen Code:
// 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;
Delphi-Quellcode:
[edit=Luckie]Delphi-Tags hinzugefügt. Mfg, Luckie[/edit]
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.') |
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