Systemweit Tastendruck überprüfen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Unwesen.

    Systemweit Tastendruck überprüfen

    Wie kann ich überprüfen, ob ich eine bestimmte Taste gedrückt halte (halten, nicht einfach nur antippen) ohne das mein Programm gerade das aktive Fenster ist, bzw. minimiert ist? Ich möchte eine Hotkey funktion bauen, die solange etwas tut, wie man eine Taste gedrückt hält.

    Das hier hat ja schon ziemlich gut mit dem einmaligen Abfangen von Tastendrücken funktioniert, ist aber leider nutzlos für meine Zwecke.
    Würde ich nicht sagen..

    Setz mal ein Label in die Form und ändere den Code z.B. so ab:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim a As Integer
    2. Protected Overrides Sub WndProc(ByRef m As Message)
    3. 'die messages auswerten
    4. If m.Msg = WM_HOTKEY Then
    5. 'hier wird entschieden welcher hotkey es war
    6. 'einfach die übergebene id auswerten
    7. Select Case m.WParam
    8. Case 1
    9. ' MessageBox.Show("Sie haben die Tab-Taste gedrückt!")
    10. a += 1
    11. Case 2
    12. ' MessageBox.Show("Sie haben die 1 gedrückt!")
    13. a -= 1
    14. End Select
    15. Label1.Text = a.ToString
    16. End If
    17. MyBase.WndProc(m)
    18. End Sub


    Mit Tab zählst du das Label hoch und mit 1 runter, solange du die Tasten gedrückt hältst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Unwesen“ ()

    Mit GetKeyState / GetKeyboardState Funktionen kannst prüfen ob taste gedrückt gehalten wird.
    APIs doku findest in MSDN.

    EDIT // habe mich verschrieben...statt GetKeyboardState habe GetKeybordState geschrieben.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „SystemUnknow“ ()

    Habt ihr es bald mal?
    Die Frage ist beantwortet! Sollte das nicht der Fall sein, dann soll der TE genauer erläutern, warum der Code seiner Meinung nach für sein Vorhaben unzureichend ist.

    Wenn die Taste erst nach ner bestimmten Zeit was tun soll, dann zähle ich eben in der Abfrage irgendwas hoch und löse dann bei einem bestimmten Schwellenwert etwas aus. FERTIG!
    Hi,

    @Hempelchen, @Lukas
    ich glaube ihr habt jetzt genug spekuliert. (12 Beiträge wurden gelöscht)

    @TE
    Bitte die angebotenen Lösungen testen und bei Bedarf erneut melden.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Darf ich vielleicht wissen, was Lukas und Hempelchen 12 Posts lang spekuliert haben? Ich war ja nicht online als es passiert ist.

    @Unwesen, das Problem ist, dass der Code nur aktiviert wird, wenn eine Taste gedrückt wird, ansonsten passiert gar nichts. Natürlich könnte ich gucken, ob die Zahl hochgezählt wurde in den letzten so und so viel Millisekunden, das erscheint mir aber ein wenig umständlich.

    @SystemUnknown, das klingt schon ziemlich plausibel. Ich werd's mal austesten. Danke! :)

    EDIT: Mit GetAsyncKeyState hat's einwandfrei funktioniert. Danke!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Selbi“ ()

    Wir haben darüber spekuliert, ob du gemeint hast, solange du die Taste gedrückt hälst, oder drücken und loslassen erkennen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Selbi schrieb:

    (...) @Unwesen, das Problem ist, dass der Code nur aktiviert wird, wenn eine Taste gedrückt wird, ansonsten passiert gar nichts. Natürlich könnte ich gucken, ob die Zahl hochgezählt wurde in den letzten so und so viel Millisekunden, das erscheint mir aber ein wenig umständlich. (...)


    Kann dir echt net ganz folgen. Vielleicht wäre es nützlich, wenn du erläuterst, was das Programm dann eigentlich tun soll.
    Ja, macht der Code doch? Egal welches Fenster im Vordergrund ist, ob das Programm minimiert läuft oder whatever. ?(
    Hab ich doch ausprobiert, Programm gestartet, Taste gedrückt, wild irgendwelche Fenster in den Vordergrund geholt usw.. Hat brav weitergezählt, solange ich gedrückt hab.
    @Unwesen: er will nur eine taste gedrückt halten und hotkey sind nur für tastenkombinationen.

    Zum anderen mit deine Code wird die gedrückte taste abgefragt (in diesem Fall sind Hotkey komplett überflussig, für tasten abfragen kannst GetAsyncKeyState verwenden oder siehe mein letztes post) und wie fragst du ab ob die taste gedrückt halte ?

    EDIT// Hotkey einsetzen ist keine saubere lösung !

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „SystemUnknow“ ()

    *grübel*
    Willst du damit sagen, das der Code nicht mehr funzt, wenn nun zusätzlich eine weitere Taste gedrückt würde? Aber mit GetAsyncKeyState abgefragt werden könnte, auch wenn ich gleichzeitig noch mit den Pfeiltasten irgendwas steuern würde?