Prüfen ob fremdes Fenster grade Nachrichten erhält



  • Hi,

    ich habe zwei fremde Fenster A und B. Ich möchte Fenster B eine Nachricht schicken aber muss davon ausgehen, dass das Fenster A grade vom Benutzer mit Nachrichten "überflutet" wird (Benutzer hält eine Taste gedrückt).

    Bei diesem Szenario gibt es das Problem, dass ich Fenster B kurz WM_SETFOCUS ... Nachricht ... WM_KILLFOCUS schicken muss, damit das Fenster die Nachricht annimmt. In der Zeit zwischen WM_SETFOCUS und WM_KILLFOCUS kommt aber auch die Taste an, die der Benutzer grade an Fenster A schicken will und das möchte ich nicht.

    Gibt es eine Möglichkeit das Problem zu beheben? - Ich dachte daran, dass man irgendwie überprüft ob Fenster A (das was mit Nachrichten überflutet wird) grade Nachrichten erhält. Falls dieses nicht der Fall ist, könnte ich meine Nachricht senden. - Obowhl ich die ganze Sache nicht sehr elegant finde.

    PS: Fenster A für kurze Zeit den Focus zu klauen halte ich für zu rüpelhaft.

    Ich freue mich auf Eure Vorschläge.

    Gruß
    ravel



  • Mit Hook, setz dich dahinter und erhalte eine Kopie der Msg, die das besagte Win erhielt und werte diese aus.

    EDIT:
    btw. wenn du es innerhalb eines Prog hast, kannst du das auch durch eine globale Variable machen. Die die Aufrufe in einer bestimmten Zeit enthält.



  • Hi,

    danke für Deine Hilfe aber wie meinst Du das mit dem Hook? - Ein globaler Hook mit zugehöriger .dll usw. schreckt mich etwas ab.

    Kannst Du vielleicht etwas genauer beschreiben welches Fenster Du meinst und inwiefern ich die Nachricht auswerten soll?

    BTW: Gibt es eigentlich auch eine Möglichkeit eine Nachricht an ein Fenster zu senden ohne vorher WM_SETFOCUS benutzen zu müssen?

    Gruß
    ravel



  • "Benutzer hält eine Taste gedrückt" ist aber ein schlechtes Beispiel 😉
    Das ist doch noch keine Überflutung, da müsste sich die Message Queue sogar noch schön bei langweilen (Es sei denn der keyboard-delay wäre 0 ms, aber dann dürfte man selbst beim eingeben von urls im browser probleme haben *gg*) 😉



  • Hi.

    Hmm das hilft mir jetzt aber auch nicht weiter.

    Ich bräuchte einen WinApi Befehl, der ein Fenster dazu bringt die Messages abzuarbeiten, ohne dass ich dem Fenster vorher WM_SETFOCUS schicken muss.

    Gruß
    ravel



  • Warum sollte das Fenster die Nachricht nicht abarbeiten ?
    Auch wenn das Fenster/Control den Fokus hat sollte es die Nachricht trotzdem bearbeiten, vor allem wenn man die Nachricht mit SendMessage() sendet...



  • geeky schrieb:

    Warum sollte das Fenster die Nachricht nicht abarbeiten ?
    Auch wenn das Fenster/Control den Fokus hat sollte es die Nachricht trotzdem bearbeiten, vor allem wenn man die Nachricht mit SendMessage() sendet...

    Hi,

    Du meinst "Auch wenn das Fenster/Control nicht den Fokus"? Bei dem Fenster ist es so, dass ich fleißig mit SendMessage Nachrichten in die Nachrichtenschleife packen kann, sie aber erst alle beim Fenster ankommen bzw. abgearbeitet werden, wenn ich dem Fenster einmal kurz den Fokus (WM_SETFOCUS) gebe. In der Zeit wo das Fenster aber kurz den Fokus hat und der Benutzer grade an einem anderen Fenster wild am rumdrücken ist, kommen leider auch Tastenanschläge vom Benutzer bei dem anderen Fenster an.

    Das ist mein momentanes Problem ⚠

    Gruß
    ravel



  • Hmm, welche Nachricht sendest du an das Fenster ? (Falls keine benutzerdefinierte Nachricht...)



  • Hi,

    ich sende nur ein eizelnes Zeichen an das Fenster, also Buchstabe oder Zahl.
    Das ganze per SendMessage bzw. PostMessage.

    Gruß
    ravel



  • Sendest du ne WM_CHAR an ein Edit-Control ?



  • Hi,

    ja ich sende wm_keydown, wm_char, und wm_keyup. Ich sende aber nicht ein Edit-Control sondern direkt das Fenster an, da in dem Fenster keinerlei Controls vorhanden sind, die ich ansprechen könnte.

    Ich habe graden rausgefunden, dass ich statt WM_SETFOCUS auch WM_AVTIVE benutzen kann. Leider kommt das gleiche dabei raus ... in der Zeit in der das Fenster unter WM_ACTIVE steht, nimmt es auch Tastenanschläge von anderen Fenstern auf.

    Gruß
    ravel


Anmelden zum Antworten