Programmfunktion per taste ausserhalb der form ansteuern?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von seby1302.

    Programmfunktion per taste ausserhalb der form ansteuern?

    Wunderschönen guten Tag, wusste den Titel jetzt nicht besser auszudrücken.

    Und zwar habe ich mir mit folgendem Code Realisiert, das ich Automatisch klicken lassen kann

    Funktioniert bestens, nur wie kann ich das hinbekommen das wenn ich außerhalb der Form F8 drücke, das Programm den Befehl registriert, in Moment geht das nur innerhalb der Form leider nicht außerhalb, ich brauch aber das es außerhalb geht.

    Damit ich das Automatische klicken beenden kann, auch wenn ich die form im hintergrund laufen habe habe.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
    3. Public Const MOUSEEVENTF_LEFTDOWN = &H2
    4. Public Const MOUSEEVENTF_LEFTUP = &H4
    5. Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. KeyPreview = True
    7. End Sub
    8. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    9. Timer2.Start()
    10. End Sub
    11. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    12. 'Hier wird die Maus auf die Koordinaten geschoben
    13. mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) 'Damit wird die linke Maustaste gedrückt
    14. mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) 'Damit wird die linke Maustaste losgelassen
    15. Timer1.Stop()
    16. End Sub
    17. Public Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    18. If e.KeyCode = Keys.F8 Then
    19. If Label1.Text = "nicht gestartet" Then
    20. Timer1.Start()
    21. Label1.Text = "gestartet"
    22. ElseIf Label1.Text = "gestartet" Then
    23. Timer2.Stop()
    24. Label1.Text = "nicht gestartet"
    25. End If
    26. End If
    27. End Sub
    28. End Class

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

    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!
    @clubstorm Lässt Du uns an Deiner Lösung teilhaben?
    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!
    Du meinst dann sowas ;)

    API:

    VB.NET-Quellcode

    1. Friend Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    2. Friend Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)


    Const:

    VB.NET-Quellcode

    1. Friend Const Key_NONE As Integer = &H0
    2. Friend Const WM_HOTKEY As Integer = &H312



    Sub:

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. 'die messages auswerten
    3. If m.Msg = WM_HOTKEY Then MessageBox.Show("F10 Wurde gedrückt, hier auch timer start/stop etc...")
    4. RegisterHotKey(Me.Handle, 0, Key_NONE, Keys.F10)
    5. MyBase.WndProc(m)
    6. End Sub


    Funzioniert auch bei minimierten Fenster Have fun ;)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „seby1302“ ()

    Das steht ganz dicke im Code.... Ich gehe davon aus das du diesen einfach nicht verstehst.
    Hast du da einfach mal MSDN/Microsoft Docs zu befragt oder das Internet zu dem was du nicht verstehst.

    Ansonsten kannst du uns auch sagen was genau du da nicht verstehst und wir versuchen es dir zu erklären.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    clubstorm schrieb:

    Entweder ich verstehe es nicht, oder im code ist das nicht vorhanden, das man im programm eine beliebige taste festlegen kann, mit der dann die aktion ausgeführt werden kann.



    WM_HOTKEY das ist die Const Für die F10 Taste Weiter Findest du bei MS Wenn Du Googlest https://docs.microsoft.com/de-de/windows/desktop/inputdev/virtual-key-codes

    Du änderst also die Const, mit dem passenden key-code

    VB.NET-Quellcode

    1. ​Friend Const WM_HOTKEY As Integer = &H312


    Wertest die message aus mit dem passenden key-cod

    VB.NET-Quellcode

    1. If m.Msg = WM_HOTKEY


    Keys.F10 Da die taste Taste zu den passenden key-code

    VB.NET-Quellcode

    1. ​RegisterHotKey(Me.Handle, 0, Key_NONE, Keys.F10)


    lg