![]() |
Alle Programme schliessen
Ich würde mir gerne einiges geklicke ersparen und alle geöffneten programme auf einmal schliessen.
habe ein wenig rumprobiert und das ist dabei rausgekommen.
Delphi-Quellcode:
wenn ich auf desktop anzeigen klicke und dann auf meinen button klicke dann verschwinden auch alle icons auf meinem desktop.
procedure TForm1.Button1Click(Sender: TObject);
var h: HWnd; begin form1.Visible:=false; h := handle; while h > 0 do begin if isWindowVisible(h) then postmessage(h, WM_SYSCOMMAND, SC_ClOSE, 0); h := getnextwindow(h, GW_HWNDNEXT); end; end; wie geht das ohne das sich der komplette desktop entleert? capo |
Re: Alle Programme schliessen
Vermutlich wird durch Deinen code auch der Ur-Explorer (der den Desktop darstellt) geschlossen.
Entweder musst Du dies verhindern oder Du musst alle Fenster schliessen, die den Ur-Explorer als Parent haben. |
Re: Alle Programme schliessen
Wie wäre es mit EnumWindows, um gezielt die fensterhandle zu ermitteln, anstatt alle zaheln von null an durchzugehen, die ein Fensterhandle sein könnten?
|
Re: Alle Programme schliessen
1.)
Ich würde die Message WM_CLOSE benutzen da nicht alle Programme auf SC_CLOSE reagieren. 2.) Wenn du alle offenen Fenster schliesst bleibt nat. nix mehr übrig, du solltest also prüfen was du zu machen willst und was nicht.
Delphi-Quellcode:
...müsste klappen.
program ProjectCloseAllWindows;
uses Windows; var h: HWnd; buf: array[0..1024] of char; s: string; n: integer; BEGIN h := handle; while h > 0 do begin if isWindowVisible(h) then begin GetClassName(h, buf, n); s := strPas(buf); if LowerCase(s) <> 'progman' then SendMessage(h, WM_SYSCOMMAND, WM_ClOSE, 0); end; h := getnextwindow(h, GW_HWNDNEXT); end; END. |
Re: Alle Programme schliessen
@ RavenIV
sowas dachte ich mir auch. @Luckie im prinzip hast du ja recht. müßte aber anders doch auch möglich sein, oder? @turboPASCAL hmm, nee hier passiert nichts. woran kann das nun liegen? capo |
Re: Alle Programme schliessen
@Luckie
Zitat:
das ist doch noch viel schwieriger, oder nicht? gruss, capo |
Re: Alle Programme schliessen
hallo....warum antwortet mir niemand mehr?
|
Re: Alle Programme schliessen
Zitat:
Was hast du überhaupt vor? |
Re: Alle Programme schliessen
Im übrigen heißt der Titel auch "Alle Programme beenden" und nicht "alle Fenster schließen". Eventuell sollte man genau dort mal ansetzen. Einfach alle laufenden Prozesse auflisten und diese versuchen zu beenden. Ich denke Prozesse lassen sich leichter filtern als Fenster (da ein Prozess zig Fenster beinhalten kann)
|
Re: Alle Programme schliessen
hallo
Hallo Luckie ist jetzt keine antwort auf deine frage - aber, im prinzip bin ich mit meiner lösung zufrieden. das einzigste was mich daran stört ist, dass der dektop verschwindet. ich hätte gerne eine funktion, ähnlich der "desktop anzeigen" icon in windows, halt werden die fenster gleich geschlossen. das bringt mich auf eine idee, man könnte doch überprüfen welche programme momentan in der taskleiste angezeigt werden und diese dann schliessen? Hi SirThornberry ja, aber so fit bin ich ehrlich gesagt nicht. das kann ich noch verstehen, gerade so.
Delphi-Quellcode:
gruss und danke, capo
procedure TForm1.Button1Click(Sender: TObject);
var h: HWnd; begin h := handle; while h > 0 do begin if isWindowVisible(h) then postmessage(h, WM_SYSCOMMAND, SC_ClOSE, 0); h := getnextwindow(h, GW_HWNDNEXT); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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