String ausgeben durch Tastenkombination

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von NoobInParadise.

    String ausgeben durch Tastenkombination

    Hallo Community,

    ich möchte eine Hintergrundanwendung basteln, welche bei bestimmten Tastenkombinationen, z.B.: strg+num01, einen bestimmten String ausgibt. Ich habe dies geschafft, aber dazu musste die Form erstmal fokusiert sein um die Tastenkombi anzunehmen, dann z.B.: Notepad zu fokusieren und letztendlich den String auszugeben.
    Ich möchte aber nicht die From oder "vb Console" fokusiert ist sonder, dass die exe im Hintergrund läuft und auf Tastenkombinationen wartet.

    Irgendwer ne Idee :S
    @NoobInParadise:: Das Zauberwort heißt RegisterHotKey.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Klar.
    Du sagst dwem System, dass es Dich bei einer bestimmten Taste / Tastenkombination exklusiv informieren möchte. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich persönlich mache das etwas anders^^

    Zunächst holen wir uns die user32lib.dll. Das sollte dich eher nicht interessieren^^

    VB.NET-Quellcode

    1. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    2. Private Const Key_NONE As Integer = &H0
    3. Private Const WM_HOTKEY As Integer = &H312


    Dies hier brauchst du nur, wenn du noch einen Hotkey mit einem anderen kombinieren willst. Ansonsten packst du die Funktion die du aufrufst einfach in den Form.Load Sub, oder verwendest nur das KeyDown Event. Wenn du hier den Key "E" drückst, wird der Hotkey mit der ID 1 registriert, und das was oben in dem Case 1 steht wird ausgeführt. Dafür müssen halt E und A gedrückt worden sein ;) So hast du eine Kombi.

    VB.NET-Quellcode

    1. Public Sub Form_Key(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.E Then
    3. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.A)
    4. End If
    5. End Sub


    Hier sagst du dem Programm wass passieren soll, wenn der Hotkey registriert wurde. Das passiert mit dem jeweiligen Fall. Der wird ebenfalls mit der Funktion bestimmt.

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. If m.Msg = WM_HOTKEY Then
    3. Select Case m.WParam
    4. Case 1
    5. MsgBox("A + E wurde gedrückt!")
    6. 'Wenn der Key "E" gedrückt wurde, wird der Hotkey registriert.
    7. End Select
    8. End If
    9. MyBase.WndProc(m)
    10. End Sub


    Die 1 steht für die ID in dem "WndProc" Sub oben. Keys.A ist der Key, der registriert werden soll. Das ist halt eine etwas kürzere und abgeändere Version, ohne Unregister. Aber die Keys werden ja eh nach Beendigung des Programms deregistriert. Zum schluss solltest du noch die Eigenschaft KeyPreview auf False setzten, damit auch ohne Fokus das KeyDown Event ausgelöst wird.

    Hoffe ich konnte dir helfen :D
    He, ja es wird langsam klarer was da so passiert.
    Ich(oder besser das programm ^^ ) kann schon was ich wollte, nur ohne die Tastenkombi und die kann ich nun wohl ,dank Deiner Hilfe, auch noch noch einbauen. :)

    Es dankt der Noob :thumbup:

    wenns funzt kommt n post

    NoobInParadise schrieb:

    Tastenkombi
    Nimm die entsprechenden Modifiers:

    VB.NET-Quellcode

    1. Private Const Key_NONE As Integer = &H0
    2. Private Const Key_ALT As Integer = &H1
    3. Private Const Key_CTRL As Integer = &H2
    4. Private Const Key_SHIFT As Integer = &H4
    5. Private Const Key_WIN As Integer = &H8
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich blicks einfach net, ich glaub ich bi zu dumm dazu X(

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    3. Private Const Key_NONE As Integer = &H0
    4. Private Const WM_HOTKEY As Integer = &H312
    5. Private Const Key_CTRL As Integer = &H2
    6. Public Sub Form_Key(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    7. If e.KeyCode = Keys.NumPad0 Then
    8. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.NumPad0)
    9. End If
    10. End Sub
    11. Protected Overrides Sub WndProc(ByRef m As Message)
    12. If m.Msg = Key_CTRL Then
    13. Select Case m.WParam
    14. Case 1
    15. MsgBox("strg + NumPad0 wurde gedrückt!")
    16. End Select
    17. End If
    18. MyBase.WndProc(m)
    19. End Sub
    20. End Class
    Aus

    NoobInParadise schrieb:

    VB.NET-Quellcode

    1. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.NumPad0)
    machst Du dies, ansonsten wie vorher:

    VB.NET-Quellcode

    1. RegisterHotKey(Me.Handle, 1, Key_CTRL, Keys.NumPad0)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ahh jetzt weiss ich auch warum da

    VB.NET-Quellcode

    1. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.NumPad0)

    "Key_NONE"
    stand
    und hier jetzt "Key_CTRL"

    Da darf nich nix stehen als dritter Wert, oder ? bzw. muss eine Angabe gemacht werden.

    Wenn man eine Tastenkombination möchte trägt man als 3. Wert die Zusatztaste ein ?!?!.

    Geht das auf die Art eigentlich auch ohne Form?
    Als KonsolenAnwendung?
    Wahrscheinlich nicht wegen "System.Windows.Forms.KeyEventArgs"?!?

    Danke :)

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