Hotkey

  • Guten Morgen,

    ich würde gerne bei der Eingabe von Daten in ein Eingabefeld diese mit Enter bestätigen und daraufhin
    eine Funktion ausführen.

    Mit HotKeySet("{ENTER}", "StartMaps") funktioniert es auch soweit, bloß leider zieht diese
    Funktion auch bei anderen Eingabefeldern. In meinem Fall habe ich in einem IE Objekt Google Maps
    geöffnet und möchte nicht das wenn dort Eingaben bestätigt werden das meine Funktion startet,
    sondern das die normale Funktionalität von Google Maps greift.

    Gibt es eine Möglichkeit die Funktionalität oder eine andere nur auf bestimme Felder zu begrenzen ?


    Viele Grüße

    Thomas

    Warum passieren mir immer Sachen, die sonst nur dämlichen Menschen passieren?

  • So, habe hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnEsc', 0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet('{Enter}', '_Enter')

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $ClassNN_1 = 'Edit1'
    Global Const $ClassNN_2 = 'Edit2'

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $GUI = GUICreate('Beispiel - GUI', 220, 70)
    GUICtrlCreateLabel('Input 1 ->', 10, 13, 50, 20)
    GUICtrlCreateLabel('Input 2 ->', 10, 43, 50, 20)
    Global Const $Input_1 = GUICtrlCreateInput('', 60, 10, 150, 20)
    Global Const $Input_2 = GUICtrlCreateInput('', 60, 40, 150, 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit', $GUI)
    GUISetState(@SW_SHOW, $GUI)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _Enter()
    HotKeySet('{Enter}')
    If ControlGetFocus($GUI) = $ClassNN_1 Then
    ConsoleWrite('+ Fokus liegt im Fenster' & @CRLF & '> -> Input 1' & @CRLF & @CRLF)
    Send('{Enter}')
    ElseIf ControlGetFocus($GUI) = $ClassNN_2 Then
    ConsoleWrite('+ Fokus liegt im Fenster' & @CRLF & '> -> Input 2' & @CRLF & @CRLF)
    Send('{Enter}')
    Else
    ConsoleWrite('! Fokus liegt NICHT im Fenster' & @CRLF & @CRLF)
    Send('{Enter}')
    EndIf
    HotKeySet('{Enter}', '_Enter')
    EndFunc ;==>_Enter

    [/autoit]

    Falls es Fragen dazu geben sollte, immer nach hacken :D
    >> Falls wer eine elegantere Möglichkeit kennt :D Wäre es natürlich noch besser ^^

    Einmal editiert, zuletzt von Yjuq (5. November 2012 um 15:13)

  • Hallo TL1983,

    hier noch eine ähnliche Lösung:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet('{Enter}', '_Enter')

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Meine GUI die Dateien akzeptiert", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018); WS_EX_ACCEPTFILES
    $Edit1 = GUICtrlCreateInput("", 10, 5, 300, 20)
    $Edit2 = GUICtrlCreateInput("", 10, 30, 300, 20) ; Akzeptiert kein Drag&Drop von Dateien
    GUICtrlCreateInput("", 10, 55, 300, 20) ; Akzeptiert kein Drag&Drop von Dateien
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Enter()
    HotKeySet('{Enter}')
    If WinActive($hGUI) Then
    $sClassName = ControlGetFocus($hGUI)
    ConsoleWrite('! Fokus liegt im Fenster bei ' & $sClassName & @CRLF)
    Switch $sClassName
    Case "Edit1", "Edit2"
    ConsoleWrite("an dieser Stelle die gewünschten Funktionen ausführen" & @CRLF & @CRLF)
    Case Else
    ConsoleWrite("falsches Control also keine Funktionen ausführen" & @CRLF & @CRLF)
    Send('{Enter}')
    EndSwitch
    Else
    ConsoleWrite('! Fokus liegt NICHT im Fenster' & @CRLF & @CRLF)
    Send('{Enter}') ;andere nwebdung also normales Enter
    EndIf
    HotKeySet('{Enter}', '_Enter')
    EndFunc ;==>_Enter

    [/autoit]

    mfg autoBert

  • Es gibt natürlich auch noch eine andere Lösung.
    Du kannst eine Art "Hotkey" nur für Deine GUI erstellen!

    Hier mein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate('Example', 200, 80)
    GUICtrlCreateLabel('Input', 10, 13, 50, 20)
    Global $hInput = GUICtrlCreateInput('', 60, 10, 100, 20)
    Global $hEnter = GUICtrlCreateDummy()
    GUICtrlSetOnEvent(-1, "_Enter")
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit', $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aAccelKeys[1][2] = [["{Enter}", $hEnter]]
    GUISetAccelerators($aAccelKeys)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _Enter()
    ConsoleWrite("Enter pressed while GUI active" & @CRLF)
    MsgBox(64, "Enter", "Enter pressed while GUI active")
    EndFunc ;==>_Enter

    [/autoit]

    Gruss Veronesi

  • Hallo,

    vielen Dank für eure Antworten.
    Ich habe jetzt die Lösung autoBert erfolgreich eingebaut.

    Zu dem Beispiel von vernonesi habe ich noch eine Frage,wo findet dort die Zuordnung
    zu den Eingabefeldern statt ??? Vll. verstehe ich den Code auch nicht komplett.
    Ich meine soetwas wie bei autoBert in Zeile 27.


    Gruß Thomas

    Warum passieren mir immer Sachen, die sonst nur dämlichen Menschen passieren?

  • Veronesi hat einfach einen art Hotkey einem Fenster zugewiesen.
    Nur wenn das entsprechende Fenster aktiviert ist, wird auch die Funktion ausgeführt.

    GUISetAccelerators und das dazugehörige Array ist $aAccelKeys.
    Vielleicht schaust du dir einfach die Funktion in der Hilfe an.

  • Sorry, für die späte Rückmeldung.
    Ich bekomme leider vom Forum keine Mails mehr bei neuen Nachrichten!

    Ja, die

    [autoit]

    GUISetAccelerators

    [/autoit]

    einfach in der Hilfe nachlesen!

    "Setzt eine Tabelle mit Zugriffstasten in einem GUI Fenster"
    Gruss Veronesi