Bug oder Feature?
-
Hallo,
ich versuche derzeit mit meinem Programm ein eigenes Fenster mit entweder
BringWindowToTop oder ShowWindow sichtbar zu machen, es in der Z-Order hervorzuholen...
Kleine Besonderheit: Das Fenster (könnte) nicht mehr reagieren, heißt es verarbeitet keine Messages mehr.Nun bemerkte ich, dass die Aufrufe von BringWindowToTop oder ShowWindow (nur diese zwei getestet) aus einem anderen Thread (gleicher Prozess) den Thread quasi Deadlocken da sie wohl auf eine Antwort des Fensters warten...
War das so von den Programmieren gedacht??? Das kann einen aber ganz schön verarschen...
-
Das ist so "by design". Ob man es deswegen gleich ein Feature nennen kann weiss ich nicht, aber ein Bug ist es nicht. Guck dir die Doku zu SendMessage an.
Davon abgesehen kannst du mit einem Fenster welches keine Messages mehr verarbeitet sogut wie nixmehr machen, jeder Versuch dahingehend wäre also sowieso zwecklos.
-
hustbaer schrieb:
Das ist so "by design". Ob man es deswegen gleich ein Feature nennen kann weiss ich nicht, aber ein Bug ist es nicht.
Ja das ist eigentlich klar. Die beiden Funktionen verwendet intern halt einfach SendMessage und diese Funktion zeigt dieses Verhalten.
Allerdings findet man keinerlei Hinweis in der Doku der Funktionen, dass sie sich so verhalten könnten. Und wer nicht weiß oder gleich drauf kommt, dass sie SendMessage verwenden läuft da in ne böse Falle...
-
Man soll ja auch keine nicht-antwortenden Fenster bauen!
Ein totes Fenster ist nicht besser als gar kein Fenster
-
geeky schrieb:
Man soll ja auch keine nicht-antwortenden Fenster bauen!
Ein totes Fenster ist nicht besser als gar kein Fenster
Nein! Was du nicht sagst!

Aaaaber es soll ja möglich sein, dass irgendwann irgendwie, weiß der Geier warum ein Fenster hängt und dann ists aus...Und bei dem was ich schreibe muss diese Möglichkeit in Betracht gezogen werden, aber ich werde es dir/euch dann nochmal genauer präsentieren sozusagen. Wenn es denn endlich mal fertig werden sollte...

-
Wenn du davon ausgehst, daß das Ziel eventuell nicht reagieren könnte, darfst du halt SendMessage() nicht verwenden (denn das wartet wirklich so lange, bis es eine Antwort bekommt). Als Alternativen hast du noch PostMessage() (legt die Nachricht nur in der Ziel-MessageQueue ab und kehrt dann zurück) oder SendMessageTimeout() (da kannst du eine maximale Wartezeit festlegen, bevor die gesendete Nachricht zurückgezogen wird) verwenden.
(die Parameter, die ShowWindow() und Co. an SendMessage() übergeben wollen, mußt du jeweils in Handarbeit zusammenstellen)