AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Programme schliessen

Ein Thema von capo · begonnen am 16. Aug 2006 · letzter Beitrag vom 23. Aug 2006
Antwort Antwort
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#1

Alle Programme schliessen

  Alt 16. Aug 2006, 00:51
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:
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;
wenn ich auf desktop anzeigen klicke und dann auf meinen button klicke dann verschwinden auch alle icons auf meinem desktop.
wie geht das ohne das sich der komplette desktop entleert?

capo
Hotte
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Alle Programme schliessen

  Alt 16. Aug 2006, 07:18
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Alle Programme schliessen

  Alt 16. Aug 2006, 08:56
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Alle Programme schliessen

  Alt 16. Aug 2006, 09:32
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:
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) <> 'progmanthen
        SendMessage(h, WM_SYSCOMMAND, WM_ClOSE, 0);
    end;
    h := getnextwindow(h, GW_HWNDNEXT);
  end;
END.
...müsste klappen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Alle Programme schliessen

  Alt 16. Aug 2006, 10:05
@ 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
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Alle Programme schliessen

  Alt 17. Aug 2006, 09:42
@Luckie
Zitat:
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?
würde ich auch lieber machen, nur dazu müsste ich ja wissen und kennen was so alles läuft und was auf keinen fall beendet werden darf, woher weiß ich was nicht beendet werden darf.
das ist doch noch viel schwieriger, oder nicht?

gruss, capo
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Alle Programme schliessen

  Alt 22. Aug 2006, 23:29
hallo....warum antwortet mir niemand mehr?
Hotte
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Alle Programme schliessen

  Alt 22. Aug 2006, 23:31
Zitat von capo:
@Luckie
Zitat:
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?
würde ich auch lieber machen, nur dazu müsste ich ja wissen und kennen was so alles läuft und was auf keinen fall beendet werden darf, woher weiß ich was nicht beendet werden darf.
Und woher weißt du das bei deiner Methode?

Was hast du überhaupt vor?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Alle Programme schliessen

  Alt 22. Aug 2006, 23:40
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Alle Programme schliessen

  Alt 23. Aug 2006, 05:39
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:
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;
gruss und danke, capo
Hotte
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz