Funktion starten bei bestimmter Texteingabe

  • Hallo,

    ich beginne gerade, mich in Autoit einzuarbeiten. Ich bekomme es hin, eine Funktion zu starten bei Drücken einer Tastenkombinatiion. (in meinem Beispiel : ALT+N)
    Ich würde aber gerne die Funtkion starten, wenn ich einen bestimmten Text eingebe. Z.B. meine eingabe #mfg soll eine Funktion starten, die mir diese Eingabe ersetzt durch Mit Freundichen Grüßen Wie mache ich das ??

    und in diesem Zusammenhang noch eine Frage: Wie definiere ich, was bei Drücken von ALTGR+ö passieren soll ?? Gibt es für die Rechte ALT Taste auch einen code ???

    Gruss Winnie ;)

  • Hilft dir das?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    $hGui = GUICreate("Gui", 625, 443, 192, 124)
    $Input = GUICtrlCreateInput("Gib start ein!", 56, 48, 297, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    If GUICtrlRead($Input) = "start" Then
    start()
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func start()
    MsgBox(0, "hallo", "Hallo, start aufgerufen!")
    GUICtrlSetData($Input, "")
    EndFunc ;==>start

    [/autoit]

    Oder möchtest du das ohne Input und ohne Gui?
    Ich glaube dann brauchst du Hooks, kenn mich damit leider nicht aus.

    • Offizieller Beitrag

    Hi,

    HorkeySet würde sicherlich gehen.
    Ansonsten sowas hier:

    Spoiler anzeigen
    [autoit]

    Global Const $WH_KEYBOARD_LL = 13
    Global $hHook
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
    Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", _
    $WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hmod[0], "dword", 0)
    Global $buffer = ""

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

    MsgBox(4096, "", "Type MFG in notepad :-)")

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

    ShellExecute('notepad.exe')

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

    While 1
    Sleep(10)
    WEnd

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

    Func EvaluateKey($keycode)
    If (($keycode > 64) And ($keycode < 91)) _
    Or (($keycode > 47) And ($keycode < 58)) Then
    $buffer &= Chr($keycode)
    Switch $buffer
    Case "MFG"
    $handle = WinGetHandle("[CLASS:Notepad]")
    WinActivate($handle)
    $text = ControlGetText($handle, "", "Edit1")
    ControlSend($handle, '', 'Edit1', "{BS 2}")
    ControlSend($handle, '', 'Edit1', "FUCK YES")
    EndSwitch
    ElseIf ($keycode > 159) And ($keycode < 164) Then
    Return
    Else
    $buffer = ""
    EndIf
    EndFunc ;==>EvaluateKey

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $ret, $KEYHOOKSTRUCT
    If $nCode < 0 Then
    $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], _
    "int", $nCode, "wparam", $wParam, "lparam", $lParam)
    Return $ret[0]
    EndIf
    If $wParam = 256 Then
    $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
    EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
    EndIf
    $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], _
    "int", $nCode, "ptr", $wParam, "ptr", $lParam)
    Return $ret[0]
    EndFunc ;==>_KeyProc

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

    Func OnAutoItExit()
    DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Mega

  • Such mal nach "AutoIt Hotstrings" bei Google.
    AutoHotkey (Abkömmling von AutoIt 2) hat das Feature eingebaut und ist auf solche Aufgaben sehr stark optimiert. AutoIt ist universeller ausgerichtet.

    Johannes


    Moin Johannes....

    vielen Dank für den Tipp, aber in Autohotkey ist das kein Problem, das kenne ich... Ich dachte, dass kann ich in Autoit auch lösen....

    Gruss Winnie

  • Hat ja niemand behauptet, das man es nicht kann ;)

    HotString.au3
    [autoit]

    ; Authors: Manadar, GarryFrost
    ; Contributor: WideBoyDixon

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

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    #include-once

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

    Dim $hHook
    Dim $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Dim $hmod = _WinAPI_GetModuleHandle(0)
    Dim $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Dim $buffer = ""
    Dim $hotstrings[1]
    Dim $hotfuncs[1]
    Dim $hWnd = GUICreate("")
    GUIRegisterMsg($WM_KEYDOWN, "_GUIKeyProc")

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

    Func _HotStringSet($hotstring, $func)
    _ArrayAdd($hotstrings, $hotstring)
    _ArrayAdd($hotfuncs, $func)
    EndFunc

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

    Func _EvaluateKey($keycode)
    If (($keycode > 64) And ($keycode < 91)) _ ; A - Z
    Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
    $buffer &= Chr($keycode)
    $buffer = StringRight($buffer, 50)

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

    _CheckHotkeys($buffer)
    EndIf
    EndFunc ;==>EvaluateKey

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

    Func _CheckHotkeys($s)
    For $i = 0 to UBound($hotstrings)-1
    if ( $hotstrings[$i] = StringRight($s, StringLen($hotstrings[$i])) ) Then
    Call($hotfuncs[$i])
    EndIf
    Next
    EndFunc

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

    Func _GUIKeyProc($hWnd, $Msg, $wParam, $lParam)
    _EvaluateKey(Number($wParam))
    EndFunc

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

    ;===========================================================
    ; callback function. This function must return as quickly as possible or it will stall and block user input
    ;===========================================================
    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
    $vkKey = DllStructGetData($tKEYHOOKS, "vkCode")
    _WinAPI_PostMessage($hWnd, $WM_KEYDOWN, $vkKey, 0)
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]
    Spoiler anzeigen
    [autoit]


    #include <HotString.au3>
    _HotStringSet("Hi", "_antwort")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _antwort()
    MsgBox(0,0,"Selber Fisch :P")
    EndFunc

    [/autoit]

    edit: Seh grad, im Prinzip das selbe wie in Xenos Beispiel.