Tastatureingaben global abfragen (Keyboard Hooks) C++



  • Also ich muss bei zwei meiner Programme Tastatureingaben global abfangen. Beim einen nur ein paar wenige als Steuerung und beim anderen die Komplette Tastatur (Es soll ein komplettes neu belegen der Tasten und Makros bieten).

    Ich habe schon recht lange bei Google gesucht aber nicht wirklich was gefunden, auser das ich dazu einen Keyboard Hook brauche. Würd mich freuen wenn mir das jemand genauer erklären könnte. Als IDE benutze ich Code::Blocks, in C++ kenn ich mich schon recht gut aus aber mit Dlls hab ich noch nie etwas gemacht.

    mfg
    zigarrre


  • Mod

    Um das in Deinen Programmen zu machen benötigst Du KEINE globalen Hooks!
    Was Dein Programm betrifft oder Deine Threads langt ein prozesslokaler Hook in der EXE.



  • Auch nicht für mein Tastenneubelegungs-/Makroprogramm bzw wärs mit einem globalen Hook nicht sauberer? Das soll auch Tasten deaktivieren können also das der Anschlag einfach abgefangen wird und nicht dem aktiven Fenster weitergeleitet wird.


  • Mod

    Dann benötigst Du einen globalen Hook. Nur Frage ich mich was solch ein Tool soll?
    Für Makros könntest Du zum auslösen RegisterHotKey verwenden und anschließend SendInput.
    Was soll das abfangen von Tasten, außer den User verunsichern?



  • Das deaktivieren der Windows-Taste um aus Vollbildanwendungen nicht einfach so herauszuspringen wäre nur eine von vielen anwendungsmöglichkeiten.

    Und SendInput ist doch ziemlich High-Level ich hab da früher mal etwas verwendet was einen Tastendruck auf Low-Level Ebene Simuliert hat (mir fällt der Name der Funktion leider gerade nicht ein), das wäre dafür doch geeigneter.


  • Mod

    In meinen Augen Unsinn. Aber es ist Dein Aufwand.

    Zu SendInput: Tiefer runter geht es nur mit einem eigenen Tastatur Treiber 😉

    Du meinst evtl. keybd_event? Aber das ist genau der selbe Level!



  • Ja genau keybd_event hab ich gemeint.

    Wenn du mir jetzt bitte noch eine genaue Schritt für schritt Anleitung für globale Hooks und prozesslokale Hooks schreiben bzw einen link zu einem solchen posten kanst wäre ich sehr dankbar.

    mfg
    zigarrre


  • Mod

    Nein! Ich gebe aus Prinzip nie Tipps zu globalen Hooks...

    Außerdem GIDF!



  • ^^
    Im Internet wird irgendwie so getan als ob globale KeyHooks schwarze Magie wären. Was ist denn da so schlimm dran? Oder kannst dus selber nicht?



  • Eine der Eigenschaften von globalen Hooks ist die unnötige Ressourcen-Verschwendung (gegenüber SendInput oder keybd_event)

    Des weiteren wird bei Einsatz von globalen Hooks von vorneherein erstmal böse Absicht (Spyware, Keylogger, Paßwort-Ausspäher ... ) unterstellt.

    Hier im Forum und natürlich im Internet allegemein stellte sich meistens heraus, daß in 99% aller Fälle jeder Fragesteller bei einem Problem an globalen Hooks gedacht hat, aber für das gleiche Ziel die bedeutend einfacheren und schlankeren Funktionen völlig ausreichten.

    Je nach Programm-Muster erkennen einige AntiViren-Wächter darin einen vermeintlichen Virus (oder Schadsoftware allgemein), egal ob zu recht oder nicht.

    Die Liste ließe sich beliebig fortsetzen...

    Ich kann Martin Richter nur beipflichten.
    Für DEINE EIGENEN Programme (!) benötigst Du keinen globalen Hook!
    Das wäre in etwa so wie mit Kanonen auf Spatzen schießen 😮

    Hoffe, es ist alles klar?
    Martin



  • Naja noch nicht ganz. Kann ich mit prozesslokalen Hooks Tasten abfangen bevor es alle anderen Programme bekommen und werden die anschläge dann noch an die anderen Programme weitrgeleitet (beim Makroprogramm wärs bischen blöd, weil wenn man sich zb auf die taste [A] das Makro [STRG] + [1] gelegt hat und dann wird das A auch noch ausgeführt)? Und kann man damit eine Taste so zusagen deaktivieren (in meinem Fall die Windowstaste)? Und stört es wenn man das ganze Keyboard oder zumindest sehr viele Tasten damit abfrägt?



  • Bin ich jetzt als "schwarzer Magier" verschrien und keiner will mir mehr helfen?


Log in to reply