Sendkeys mit "Enter" auslösen

  • VB.NET

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

    Sendkeys mit "Enter" auslösen

    Hallo,
    ich habe ein Problem,


    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    5. End Sub
    6. Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short
    7. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. If GetAsyncKeyState(Keys.Enter) = -32767 Then
    9. SendKeys.Send("{F3}")
    10. SendKeys.Send("^s")
    11. End If
    12. End Sub
    13. 'F-Tasten belegen
    14. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    15. If e.KeyCode = Keys.Enter Then
    16. SendKeys.Send("{F3}")
    17. SendKeys.Send("^s")
    18. End If
    19. End Sub
    20. End Class



    Die Taste F3 funktioniert aber ich bekomme kein strg+s hin.. kann mir da jemand sagen was das Problem ist?.. oder sollte zwischen den 2 Sendkeys ne kurze zeit Pause sein?


    ich habe glaube das Prob gefunden..

    VB.NET-Quellcode

    1. = -32767
    dann kann ich aber nicht mit

    VB.NET-Quellcode

    1. Option Strict On
    arbeiten ..

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „tuvok“ ()

    Danke Bernd für die schnelle Antwort,
    ich kann das ja mal testen, aber das mit dem Option Strict On und dem Wert muss ich denke ich trotzdem draußen lassen..

    Du meinst das so?

    VB.NET-Quellcode

    1. SendKeys.Send("{F3}")
    2. SendKeys.SendWait("")
    3. SendKeys.Send("^s")


    oder so?

    VB.NET-Quellcode

    1. SendKeys.SendWait("{F3}")
    2. SendKeys.Send("^s")
    Oder hast Du dem empfangenden Fenster den Fokus weggenommen?
    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!
    Hallo,
    habe nun die Lösung..

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    5. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    6. Private Const Key_NONE As Integer = &H0
    7. Private Const WM_HOTKEY As Integer = &H312
    8. Dim Counter As Integer = 0 'Counter am Anfang auf Null
    9. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    10. 'die tab taste wieder freigeben
    11. UnregisterHotKey(Me.Handle, 1)
    12. 'UnregisterHotKey(Me.Handle, 2)
    13. End Sub
    14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    15. 'die tab taste abfangen
    16. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.Enter)
    17. 'RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.D1)
    18. End Sub
    19. Protected Overrides Sub WndProc(ByRef m As Message)
    20. 'die messages auswerten
    21. If m.Msg = WM_HOTKEY Then
    22. 'hier wird entschieden welcher hotkey es war
    23. 'einfach die übergebene id auswerten
    24. Select Case m.WParam.ToInt32
    25. Case 1
    26. Counter += 1
    27. If Counter = 4 Then
    28. SendKeys.Send("{F3}")
    29. SendKeys.Send("^s")
    30. Counter = 0
    31. End If
    32. Label4.Text = Counter.ToString
    33. Case 2
    34. MessageBox.Show("Sie haben die 1 gedrückt!")
    35. End Select
    36. End If
    37. MyBase.WndProc(m)
    38. End Sub
    39. End Class


    Dankeschön an alle
    Ich habe auch mal ein wenig probiert.

    VB.NET-Quellcode

    1. 'F-Tasten belegen
    2. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    3. If e.KeyCode = Keys.F3 Then
    4. Do Until i >= 25
    5. i += 1
    6. Label1.Text = i.ToString
    7. Me.Refresh()
    8. Threading.Thread.Sleep(50)
    9. Loop
    10. i = 0
    11. SendKeys.Send("%{F4}") ' Alt F4 also das Fenster schließen
    12. End If
    13. End Sub


    Das geht. Me hat den Fokus und somit wird es geschlossen.

    Da er aber die F3 nicht belegt hat kann auch nichts passieren.

    Bernd
    Hat die Anwendung, an die du den Tastendruck senden willst überhaupt den Fokus? Und um welche Anwendung handelt es sich überhaupt? Woher weißt du, dass genau ein Umschalt-F3 angkommt?
    Vielleicht geht es auch mit der SendMessage-Funktion der WinAPI besser (die bevorzuge ich vor allem, weil die Zielanwendung nicht den Fokus benötigt).
    es ist SAP und ja die hat einmal für Zurück F3 und für eine andere ebene UMSCHALT+F3

    und da wir in dem Moment wo wir die eingabe in SAP machen auch SAP aktiv ist geh ich davon aus das sie den Focus hat :)


    EDIT: OK das F3 Prob war keins .. weil das funktioniert.. nur strg+s sendet er nicht .. meine Vermutung, dass in der Zeit wo das SAP sein Form neu läd oder ein anderes Fenster.. verliert dieses den Focus..
    hm .. evtl. müsste man nen sleep oder so einbauen .. weil SendWait geht auch nicht

    EDIT2:

    VB.NET-Quellcode

    1. SendKeys.SendWait("{F3}")
    2. System.Threading.Thread.Sleep(1000) 'Zeit in Millisekunden angeben
    3. SendKeys.SendWait("^s")


    so .. nen Sleep bewirkt Wunder und bestätigt mich mit meiner Vermutung :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tuvok“ ()