Was Kniffliges: Taste Systemweit sperren auch wenn andere Programme KeyHooks nutzen?



  • Muesly und ich gruebeln am selben problem ... daher fuehre ich das vielleicht etwas spezifischer aus ....

    laut SDK Doku sollte ja die Hookqueue unterbrochen werden, wenn ich True (respektive nicht 0) zurueckgebe ... dann sollte eigentlich das programm nix mehr mitbekommen .... oder zumindest nicht mehr, wenn ich nicht CallNextHook aufrufe

    jedoch erhaellt das prog sogar die tastendruecke wenn mein Hook folgendermassen aussieht

    LRESULT CALLBACK KeyboardProc(      
        int code,
        WPARAM wParam,
        LPARAM lParam )
    {
    return 1;
    }
    

    eigentlich sollte das doch das gesamte Keyboard freezen fuer das prog ...

    wenn ich obige hookProc als einen LowLevelKeyboardHook setze, freezt das keyboard wirklich .... aber leider ist das ja nur unter NT-Kernel moeglich ... und mein prog soll auch unter W95/98/Me laufen

    Thx fuer eure Bemuehungen schon mal im vorhinein

    Annotation:
    @WebFritzi:
    Die VK_Codes kennen wir ^^; Nix fuer ungut.

    [ Dieser Beitrag wurde am 15.06.2002 um 14:49 Uhr von Ineluki editiert. ]



  • Ich würde sagen wir probieren es mal in "WinAPI".
    Für die dortigen Leser: das erwähnte Beispiel findet sich in der VCL-FAQ.



  • In der Doku vom PlatformSDK steht doch was von Hookchain. chain heißt glaub ich immer noch Kette. Also kann man natürlich nicht davon ausgehen, dass dein Programm am Anfang dieser Kette steht. Dein Programm könnte genausogut als letztes drankommen, und dann wäre es wurscht ob du CallNextHookEx aufrufst oder nicht.

    Ich würde übrigens eine GetMessage-Hook nehmen (auch wenn es nur um Tastendrücke geht), die ist IMHO flexibler.



  • Original erstellt von cd9000:
    **
    Ich würde übrigens eine GetMessage-Hook nehmen (auch wenn es nur um Tastendrücke geht), die ist IMHO flexibler.**

    Hat aber leider auch ein paar Nachteile:
    In 2 Anwendungen, Borland Delphi 6 und command.com habe ich bisher erfahren, dass du hier keine Nachrichten bekommst.
    In MS Word bekommst du gleich 4! Dieses Problem lässt sich lösen, indem du die Zeiten vergleichst (Element time in MSG-Struktur).



  • also unser problem steht noch ....

    es ist nicht so, das wir keinen oder zuwenig oder zuviele nachrichten ueber den tastendruck erhalten ...

    es ist einfach, das wir verhindern wollen, das der tastendruck ans programm gemeldet wird .... und laut API-Doku sollte das mit nem rueckgabewert von True auch funktionieren .. egal in welcher pos man in der chain ist .... tut es aber nicht



  • push



  • push



  • Kleine Frage: Was tun, wenn andere Programme ebenfalls KeyHooks verwenden, die auch funktionieren wenn andere Programme Hooks verwenden? Wer bekommt dann den Vorrang?

    MfG SideWinder



  • Ist nur ne vermutung, aber ich könnte mir vorstellen, dass Windows die zuletzt registrierten Hooks immer hinten an die Chain anhängt. Und ich würde mal sagen ganz vorne ist Das System-Hook (wenn ich das mal so nennen darf 😉 ) weshalb unter WindowsXP auch unmöglich ist Strg+Alt+Entf zu unterbinden. So stell ich mir das vor, kann aber auch grottenfalsch sein 😉



  • Schreibt euch einen Keyboardtreiber, mit dem sind alle Probleme gelöst.



  • @Subby und nur nebenbei, hat mit dem Thread nix zu tun

    weshalb unter WindowsXP auch unmöglich ist Strg+Alt+Entf zu unterbinden

    Registry\HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr=1 ... Voila! 🙂

    .



  • Hi,

    soweit ich weiß, wird die normale Hook-Function erst aufgerufen NACHDEM die Nachricht aus der Message Queue des entsprechenden Programs entfernt wurde!
    Damit empfängt das Prog die Nachricht noch, bevor Du sie sperren kannst.

    CU


Anmelden zum Antworten