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 Beim runterfahren automatisch Prozesse beenden? (https://www.delphipraxis.net/7435-beim-runterfahren-automatisch-prozesse-beenden.html)

hircusmutzus 12. Aug 2003 10:26


Beim runterfahren automatisch Prozesse beenden?
 
Hi,
mal wieder ne kleine Frage: Wenn ich nach dem Beispiel den Rechner Reboote bzw. Runterfahre, werden dann auch Programme wie z.B. Winamp, Word, Outlook etc. beendet? Wenn nicht, wie kann man so was machen?
Ich will mir nämlich nen "Dimmer" für den PC machen. Da ich alle Musik auf dem PC hab und beim Abends-im-Bett-liegen gerne noch Musik höre, könnte ich dann einen Countdown einstellen, und dann würde der PC die offenen Programme beenden und runterfahten!

Danke für Infos,
MfG Matthias Volland

alcaeus 12. Aug 2003 10:31

Re: Beim runterfahren automatisch Prozesse beenden?
 
Mit Hilfe von WinAPI-FUnktionen kannst du Prozess-IDs herausfinden und diese dann beenden. Falls du dich nicht mit WinAPI auskennst, kann ich helfen.

hircusmutzus 12. Aug 2003 10:33

Re: Beim runterfahren automatisch Prozesse beenden?
 
Danke, also ich kenn mich damit nicht wirklich aus :)!
Naja, hast du irgendwie ein tut, einen Quelltext o.ä.?

MfG Matthias Volland

Illuminator-23-5 12. Aug 2003 10:34

Re: Beim runterfahren automatisch Prozesse beenden?
 
wenn du EWX_FORCE als parameter nimmst, brauchst du dich nicht darum kümmern!! da müsste er theroretisch alle progs von alleine abschießen!

andererseits könntest du alle handles beenden, da glaube ich laufen die prozesse aber im hintergrund noch weiter [bin aber nicht ganz sicher]

hircusmutzus 12. Aug 2003 10:38

Re: Beim runterfahren automatisch Prozesse beenden?
 
@Illuminator-23-5: könntest du vielleicht etwas präziser werden??? :roll: Ich bin hier grad informationstechnisch ganz auf der Höhe!!!

MfG Matthias Volland

alcaeus 12. Aug 2003 10:42

Re: Beim runterfahren automatisch Prozesse beenden?
 
Mit OpenProcess(PROCESS_ALL_ACCESS, False, Proc_ID) kannst du einen Prozess öffnen. Dann mit ExitProcess(0) den Prozess beenden.
Dazu musst du aber zuerst die ganzen Prozess-IDs in einer Liste eingeben, sorry, ich weiß auch nicht wie man diese findet.

hircusmutzus 12. Aug 2003 10:44

Re: Beim runterfahren automatisch Prozesse beenden?
 
@alcaeus: Jo danke, ich werd mich noch mal weiter umschauen! Irgendwie hab ich mir das unkomplizierter vorgestellt!!!
Aber trotzdem Danke für die Mühe!

MfG Matthias Volland

Illuminator-23-5 12. Aug 2003 11:01

Re: Beim runterfahren automatisch Prozesse beenden?
 
du könntest
1. ExitWindowsEx(EWX_FORCE, 0); dadurch schaltet er den PC einfach ab[eine art reset ohne neu zu starten)
2. du könntest durch folgenden source alle handles herausfinden:

var
H: HWnd;
begin
h := Application.Handle;
while h > 0 do begin
SetLength(handleList, length(handleList) + 1);
HandleList[Length(HandleList)-1] := h;
h := getnextwindow(h,GW_HWNDNEXT);
end;
end;

die dann alle beenden und dann mit ExitWindowsEx(EWX_SHUTDOWN, 0) herunterfahren, bin mir aber nicht sicher, dass das klappt

ich persönlich würde das 1. nehmen

hircusmutzus 12. Aug 2003 11:06

Re: Beim runterfahren automatisch Prozesse beenden?
 
Ist es nicht "ungesund" den PC quasi immer zu resetten?

MfG Matthias Volland

P.S.: Ich hab auch noch grad was in der Code-Library von Luckie gefunden... -> http://www.delphipraxis.net/internal...light=prozesse

alcaeus 12. Aug 2003 11:09

Re: Beim runterfahren automatisch Prozesse beenden?
 
Ja,du könntest diesen Code verwenden, die Prozesse in einer CheckListBox auflisten und dann alle markierten in einer Timer-ROutine "abschießen". Das müsste auf alle Fälle funktionieren.

Flogo 12. Aug 2003 11:46

Re: Beim runterfahren automatisch Prozesse beenden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vor kurzem hat mich ein Freund gefragt ob ich ihm genau so ein Tool schreiben kann (Rechner zu bestimmter Zeit runterfahren). Hab natürlich in der DP gesucht und auch den Eintrag gefunden, ein bisschen rumgestümpert und rausgekommen ist ein kleines Programm (ShutMeDown). Dabei hab ich mich gar nicht um die laufenden Prozesse gekümmert aber es scheint ihn nicht zu stören. Er fährt ganz normal runter und auch wieder rauf(ohne Scandisk,...). Ich hab irgendwie gedacht: "Soll Windoof sich darum kümmern" und es scheint zu klappen

hircusmutzus 12. Aug 2003 11:51

Re: Beim runterfahren automatisch Prozesse beenden?
 
Danke für den Code, ich werds mal testen!

MfG Matthias Volland

P.S.: Bin leider grad damit beschäftigt msblast vom System zu entfernen!

Brüggendiek 13. Aug 2003 00:30

Re: Beim runterfahren automatisch Prozesse beenden?
 
Hallo Mathias!

Es gibt 2 Arten von Programmen:
Die einen beenden sich, wenn Windows die Shutdown-Nachricht sendet, ganz automatisch. Die sind harmlos und brauchen zum Runterfahren nicht beendet werden.

Die anderen laufen dann noch auf eine Ende-Frage. Z.B. fragen sie, ob die Daten nicht doch gespeichert werden sollen oder ob man das Programm wirklich beenden will. Diese Programme bereiten ein Problem, da sie auch beim Schicken einer Close-Nachricht in die entsprechende Abfrage gehen und damit das Herunterfahren so oder so wirksam verhindern können.

Fazit: in eigenen Programmen MIT END-RÜCKFRAGE sollte die Nachricht "WM_QUERYENDSESSION" oder "WM_ENDSESSION" abgefangen und zum rückfragelosen Beenden des Programmes benutzt werden, da man sich sonst Probleme einfängt. Programme, die auf Ende oder Schließkreuz oder ALT-F4 ohne Frage terminieren, braucht man nicht abzusichern.

Zu Deinem Problem: Du mußt halt alle eventuell laufenden Programme daraufhin testen, wie sie beim Runterfahren reagieren. Normalerweise beendet Windows die Programme (über die Endsession-Nachricht) selber. "Widerspenstige" Programme erfordern ggf. Maßnahmen.

Fazit: Egal, wie sauber man selber arbeitet, der Müll der Anderen kann alles versauen!

Gruß

Dietmar Brüggendiek

Assarbad 13. Aug 2003 08:06

Re: Beim runterfahren automatisch Prozesse beenden?
 
Also ich erklär mal etwas vereinfacht Logoff und Shutdown:
  • Logoff: Alle Prozesse des aktuellen Users/Session/Desktops werden beendet.
  • Shutdown = Logoff + Services etc werden runtergefahren und dann wird der Rechner bei Hardwareunterstützung abgeschalten.

Deine Frage ist also müßig, weil exakt dies gemacht wird. Oder stell sie anders, falls ich einen Aspekt übersehen hab.

Moyyer 15. Aug 2003 10:55

Re: Beim runterfahren automatisch Prozesse beenden?
 
Ich hab mir auch schon so ein Programm programmiert, das nach einer eingegebenen Zeit herunterfährt. Falls du es dir mal anschauen willst, kannst du ja mal zu www.Moyyer.de\Downloads gehen und es dir herunterladen.

hircusmutzus 15. Aug 2003 11:21

Re: Beim runterfahren automatisch Prozesse beenden?
 
Danke @Moyyer! Nettes Programm, sieht sehr gut aus. Dann werd ich jetzt in Zukunft deins nehmen!

MfG Matthias Volland


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 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