| Autor |
Beitrag |
nepleurepas
      
Beiträge: 164
Win XP
|
Verfasst: Mi 16.04.08 22:00
Hallo,
ich möchte mitbekommen, wann ein Fenster, dessen handle ich kenne, geschlossen wird.
meine frage nun, ist es dafür notwendig, hooks einzusetzen?
Hab mir mal das hook tutorial in der library angeschaut und jetz auf anhieb leider nich so viel verstanden...  , daher eben die Frage, ob ich mir die ganze materie aneignen muss, oder obs da ne einfachere möglichkeit gibt.
danke für antworten
gruß stefan
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 16.04.08 22:35
Gehört das Fenster zu nem ganzen Prozess, der beendet wird, wenn das Fenster geschlossen wird???
Wenn ja, kannst Du einfach mit OpenProcess ein Handle auf den Prozess öffnen und mit WaitForSingleObject auf diesen Prozess warten ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 17.04.08 09:21
BenBE hat folgendes geschrieben: | Gehört das Fenster zu nem ganzen Prozess, der beendet wird, wenn das Fenster geschlossen wird???
Wenn ja, kannst Du einfach mit OpenProcess ein Handle auf den Prozess öffnen und mit WaitForSingleObject auf diesen Prozess warten ... |
Ein sich schliessendes Fenster signalisiert nicht, nur Prozesse tun das.
Einfachste Lösung wär in regelmäßigen Abständen eine Fensterliste zu erstellen und zu gucken, ob das betreffende Handle noch in der Liste ist.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 17.04.08 09:43
Luckie hat folgendes geschrieben: | BenBE hat folgendes geschrieben: | Gehört das Fenster zu nem ganzen Prozess, der beendet wird, wenn das Fenster geschlossen wird???
Wenn ja, kannst Du einfach mit OpenProcess ein Handle auf den Prozess öffnen und mit WaitForSingleObject auf diesen Prozess warten ... |
Ein sich schliessendes Fenster signalisiert nicht, nur Prozesse tun das. |
@Luckie: Ich weiß, daher in der ersten Zeile meine Frage zwecks Prozessbeeindigung. Dass Fenster nicht signalisieren, ist mir klar ... manchmal les ich sogar die MSDNLib
Luckie hat folgendes geschrieben: | | Einfachste Lösung wär in regelmäßigen Abständen eine Fensterliste zu erstellen und zu gucken, ob das betreffende Handle noch in der Liste ist. |
Wozu ne ganze Fensterliste, wenn man nur ein Fenster überwachen will? Regelmäßig nach diesem einen Fenster suchen, sollte reichen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Do 17.04.08 14:22
BenBE hat folgendes geschrieben: | Gehört das Fenster zu nem ganzen Prozess, der beendet wird, wenn das Fenster geschlossen wird???
|
Nein. Wenn das Fenster geschlossen wird, öffnet sich ein zweites Fenster mit gleichem Titel, der prozess läuft weiter. Da sich dieses zweite fenster mit gleichem titel öffnet, bin ich mir auch nicht sicher, ob das mit dem handle suchen funktioniert, da ja das neue fenster den gleichen titel hat.
Oder haben unterschiedliche fenster mit gleichem titel verschiedene handles? Das wär nähmlich auch noch ne frage für mich. Wie kann ich versch. fenster mit gleichem titel unterscheiden? Also wenn ich sie mit postmessage ansprechen will.
Könnte man iwie mit getmessage mitbekommen, wann das fenster geschlossen wird?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 17.04.08 14:31
Verschiedene Fenster(-Instanzen) haben unterschiedliche Handles.
Teilweise haben die dann auch noch unterschiedliche Fenster-Klassen, daran könnte man das auch noch fest machen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Do 17.04.08 14:49
Ja mein problem is, wenn ich jetz per findwindow und dem fensternamen das handle finde, wie kann ich dann wissen, welches fenster-handle ich erwischt habe?
Kann ich vllt auch nach der größe der fenster gehen? Kann ich über ein handle herausfinden, wie groß das fenster ist?
Und wie kann ich das mit dem regelmäßigen abfragen machen? Mit sleep erscheint mir das sehr dilletantisch und rechenleistung raubend...
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 17.04.08 14:55
nepleurepas hat folgendes geschrieben: | | Ja mein problem is, wenn ich jetz per findwindow und dem fensternamen das handle finde, wie kann ich dann wissen, welches fenster-handle ich erwischt habe? |
Indem Du weitere Informationen des Fensters abfragst???
nepleurepas hat folgendes geschrieben: | | Kann ich vllt auch nach der größe der fenster gehen? Kann ich über ein handle herausfinden, wie groß das fenster ist? |
Ja, geht. Die Größe sollte man aber nicht hernehmen, wenn der User diese verändern kann ...
nepleurepas hat folgendes geschrieben: | | Und wie kann ich das mit dem regelmäßigen abfragen machen? Mit sleep erscheint mir das sehr dilletantisch und rechenleistung raubend... |
Timer auf ein Interval von ~5-10 Sekunden (oder u.U. auch kürzer je nach Anwendung) einstellen ...
Eigentlich alles was die VCL an Möglichkeiten bietet, geht direkt oder Indirekt auch über die WinAPI abzufragen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Do 17.04.08 15:21
das problem das sich glaube ich ergibt, wenn ich das über son ständiges abfragen ergibt is folgendes.
Mein ziel ist es, ein Programm zu imitieren. Wenn das erste fenster gschlossen wurde (vom orginalprogramm), geht ein fenster mit einem bild auf. Mein programm soll nun dieses zweite fenster schließen und ein neues, imitiertes, fenster aufmachen. D.h. also, mein programm muss sofort mitbekommen, wann das erste fenster geschlossen wurde, damit es sofort die weiteren schritte ausführen kann. Wenn die "reaktionsphase" zulange dauert, fliegt der fake sofort auf.
Dass du jetzt nich denkst ich plan iwas krummes, es geht um ein physik-programm, bei dem ich den kopf eines bekannten physiker durch den meines lehrer ersetzen möchte. Das das bild des physikers nicht so vorliegt, eben die idee mit dem nachbauen des fensters.
noch ne frage, wie komm ich an die größe des fensters ran, wenn ich dessen handle habe? Ne zeile code wäre nett
thx für de antworten
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Do 17.04.08 16:13
Sleep ist nicht Rechenlastig, denn das legt den Prozess richtig schlafen. Aber das muss man nicht. Bzw ist Windows eventbasiert also sollte man auch events dafür benutzen. Im Konkreten meine ich einen TTimer. Selbst wenn du das Intervall auf 5-20 (millisekunden) stellst sollte die Rechenleistung sich wirklich in Grenzen halten.
Zum Erfragen der Position kannst du die Funktion GetWindowInfo benutzen. Diese liefert dir eine Struktur mit vielen Informationen des Fensters. Alternativ geht auch GetWindowRect. Diese liefert aber nur die Position.
Beide Methoden haben als Rückgabewert ein Boolean. Wenn das Fensterhandle nicht gültig ist, dann liefert die Methode false zurück. Ansonsten true. Und Windows vergibt jedem Fenster ein neues Handle. Dabei werden gerade frisch gelöschte Fenster aber nicht sofort wieder vergeben. Du kannst also die Methoden benutzen um zu überprüfen ob die Fenster noch existieren oder nicht.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 17.04.08 16:16
Kleiner Hinweis vorweg: Beachte bitte, dass dein Vorhaben stark in der Grauzone von Artikel 5.4 der Richtlinien liegt...
Zum Ändern des Bildes bietet sich ein Resourcen-Editor wahrscheinlich eher an. Wie man damit umgeht, fällt allerdings unter Artikel 5.2\5.5, daher dazu keine Antwort.
Ansonsten halt das was auch schon Lossy eX sagte. GetWindowPos gibt's auch nich. IsVisible wäre ne alternative, falls das Fenster nur ausgeblendet wird.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Fr 18.04.08 19:29
BenBE hat folgendes geschrieben: | Kleiner Hinweis vorweg: Beachte bitte, dass dein Vorhaben stark in der Grauzone von Artikel 5.4 der Richtlinien liegt...
Zum Ändern des Bildes bietet sich ein Resourcen-Editor wahrscheinlich eher an. Wie man damit umgeht, fällt allerdings unter Artikel 5.2\5.5, daher dazu keine Antwort.
Ansonsten halt das was auch schon Lossy eX sagte. GetWindowPos gibt's auch nich. IsVisible wäre ne alternative, falls das Fenster nur ausgeblendet wird. |
okay, vielen dank an alle, jetz sollte ich weiterkommen
p.s.: wegen der grauzone... ist ja wirklich nur für den kleinen schulkreis der fachschaft physik. und da dass programm sowieso shareware is und meine lehrer sich auch eher geehrt fühlen wird, als beleidigt, sollte das meiner meinung nach kein problem sein
|
|
|