Form immer mit Keydown aufrufen

  • VB.NET
  • .NET 4.0

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

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

    Form immer mit Keydown aufrufen

    Moin Leute,

    mit Keydown und der Keys abfrage kann ich ja bei Bestimmter tastenkombination etwas ausführen..Soweit ich weiß funktioniert das aber nur wenn die Form ausgewählt ist.

    Ich möchte meine Form aber im Hintergrund laufen lassen. Also von mir aus nicht in der Taskleiste sondern bei den ausgeblendeten Symbolen.

    Wenn ich jetzt auf dem Desktop oder ieinem Ordner bin und z.B. Alt + x drücke, soll sich meine Form öffnen.

    Was beachte ich nicht?
    Was du brauchst ist kein KeyDown (das gibt es nämlich nicht wenn die Form nicht da ist). Du Brauchst ein Keybinding/Hotkey.

    Schau dir mal das an:

    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 Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    3. Protected Overrides Sub WndProc(ByRef m As Message)
    4. If m.Msg = WM_HOTKEY Then
    5. End If
    6. MyBase.WndProc(m)
    7. End Sub
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

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

    @Schamash

    verstehe ich das richtig? WM_HOTKEY ist also der key den ich dann wähle. Z.B. F5. Wobei ich nicht so ganz verstehe wie dieser hotkey dann registiert wird.

    @MichaHo

    aktuell habe ich noch keinen Code da ich erstmal wissen muss wie ich den richtigen Aufruf generiere...
    Arbeite auch nicht mit sendkeys.
    Will ja quasi nur, dass meine Form bei z.B. Alt+F5 sichtbar wird,wenn sie minimiert ist.

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

    Ja, das verstehst du richtig. Registriert wird mit mit RegisterHotKey(...) z.B. im Formload.
    Immer dran denken mit UnregisterHotKey im FormClose oder so der Key wieder frei geben.

    Keys die Default funktionen haben (z.B. F5, F1) würde ich nicht nehmen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Schamash

    Funktionsweise habe ich verstanden, aber verstehe den Aufruf nicht.

    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 'Was genau bedeuten diese Values. Also was machen sie?
    2. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer) 'Hier auch was sind die Values
    3. Protected Overrides Sub WndProc(ByRef m As Message)
    4. If m.Msg = WM_HOTKEY Then
    5. End If
    6. MyBase.WndProc(m)
    7. End Sub


    Ich muss im formload registerhotkey() aufrufen und im close natürlich unregisterhotkey...
    Hab ich verstanden ist und ja auch offensichtlich wieso.

    was ist mit der protected overrides sub windproc. Was genau passiert da?

    Und wie verwende ich das ganze jetzt korrekt? Sorry dass ich nicht so gut drauf klar komme gerade.
    Moin,

    razzzer530i schrieb:

    Was genau bedeuten diese Values. Also was machen sie?
    Eine sehr gute Quelle für die ganzen WinAPI-Aufrufe ist pinvoke.net. Oben links ist ein Suchformular. Wenn du da RegisterHotKey eingibst, findest du schnell pinvoke.net/default.aspx/user32/RegisterHotKey.html. Da ist auch ein Beispielcode vorhanden.
    Mit freundlichen Grüßen,
    Thunderbolt
    Hab das soweit jetzt hinbekommen und verstanden. Allerdings hab ich noch eine Kleinigkeit. Hotkey funktioniert. Aber Tastenkombination nicht.
    RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F11)

    Läuft.
    Möchte aber gerne eine Kombination abfragen. ALT + X oder so?
    Key_None = Kein Modifikator Key
    Key.F11 = F11 Taste
    -> Hotkey ist nur f11


    VB.NET-Quellcode

    1. Public Const MOD_ALT As Integer = &H1 'Alt key

    VB.NET-Quellcode

    1. RegisterHotKey(Me.Handle, 1, MOD_ALT , Keys.X)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."