SetWindowsHookEx???



  • Hi hi

    hab da mal wieder ein Problem. Ich würde gerne ein Hook auf ein Fenster legen damit ich dessen Nachrichten abfangen kann. Die Funkiton ist mir gängig doch irgendwie komme ich damit nicht so ganz damit klar. Egal wie ich rumprobiere das Funktioniert nicht. Vielleicht kennt sich damit jemand aus oder hat so etwas schonmal gemacht. Ich bin für jede Hilfe offen und dankbar.

    THX
    Utopia



  • Zeig mal wie Du die Funktion aufrufst, und dann noch die Callback Funktion.
    Ich habe das nach anleitung der msdn gemacht und es hat eigentlich sofort funktioniert.



  • Meine Prog ist soeben weggeflogen da ich es auf einem Temp auf dem Server liegen hatte *g*. Aber darin ist ja noch nicht soviel passiert. Ich sollte vielleicht den Hintergrund dazu erzählen. Ich würde gerne aus einem anderen Fenster heraus eine WM_KEYDOWN Message abfangen. Ich habe da eine Zeitlang mit PeekMessage und dem Handle von diesem Fenster herumprobiert aber das ging nur Global für den Focus des Fensters. Wenn ich z.B. in einer Combo- oder ListBox dieses Fensters eine Taste gedrückt habe ist nichts mehr passiert. Da habe ich mal rumgefragt und kam dann auf das SetWindowsHookEx.

    Meine Problematik steht darin:
    1. Ich weiss nicht wie ich an das SetWindowsHookEx mein Fensterhandle oder eine Identifkation des Fensters übergeben soll
    2. Wie ich mit den zurückgelieferten HHOOK die Message abfangen kann das eine bestimmte Taste gedrückt wurde

    Damit komme ich halt im Moment absolut nicht klar.

    Wenn du mir da helfen könntest würde ich 3 Kreuzchen im Kalender machen

    thx
    Utopia



  • Ich habe hier gerade nochmal das zusammengestellt:

    LRESULT CALLBACK CEnumWindowsDlg::message_hook(int code, WPARAM wp, LPARAM lp)
    {
    if( code >= 0 )
    {
    if (wp == VK_F3)
    {
    AfxMessageBox("Gefunden");
    }

    }

    return CallNextHookEx(hhk, code, wp, lp);
    }

    Aufruf:
    DWORD dwThreadId = ::GetWindowThreadProcessId(m_handle, NULL);
    hhk = ::SetWindowsHookEx(WH_KEYBOARD, message_hook, NULL, dwThreadId);

    wobei m_handle das Handle von meinem gesuchten Fenster ist. Aber nix ist geht leider nicht verstehe ich nicht. Wenn ich ::GetCurrentThreadId() auf dwThreadId lege und mein eigenes Fenster abfrage gehts ohne weiteres. Das ist echt schmarn

    Utopia



  • Hmmm.... gibt ::GetWindowThreadProcessId() auch was korrektes zurück? Versuch mal die Thread-ID manuell einzugeben ( falls Du WinNT 2000 XP hast kannst Du die im Task-Manager sehen )

    Ansonsten würd ich mal versuchen mit WH_CALLWNDPROC alle Messages abzufangen und dann schauen ob es WM_KEYDOWN ist.

    Sonst KA 🙄


Anmelden zum Antworten