Mit dem Computer reden xDD

  • Hey ich wollte fragen ob es möglich ist wenn man Hallo eingibt (des über _IsPressed) das er dann Hi in einer Msg box zurück gibt. Wenn man aber z.B. Wie gehts? Drückt dann sagt er gut und dir usw.


    Also geht das ,dass man die eingabe in einer Variablen "speichert" dann des abgleicht und dann ne antwort kommt je nachdem was er antworten soll wenn man irgendwas eingibt?


    is mir klar ,dass man dann selber sagen soll bei was er was schreiben soll aber is das möglich?


    Bitte nur sagen obs geht und vllt Ansatz geben den rest will ich dann selbe rmachn ;) (wegen lernzwecken)
    Wenns fertig is stell ichs rein dann schau ich mal ob man "Selbst-Gespräche bzw mit nem Compter führne kann ;)).


    Es sollte natürlich so gehen dass er nicht auf "Hallo" wartet sondern ich auch erst WIe gehts? eingeben kann udn dann gleich gut und dir kommt.

  • Im Loop die Tasten zwischenspeichern ( _Ispressed alle Tasten durch)
    Dann den String vergleichen, mit dem, den du suchst
    Einen Timeout, nachdem alles gellöscht wird.

  • Wow ty für die schnelle Antowrt aber bin so richtiger Anfänger hätte des mit dem "Nur dne ANsatz veraten" vllt weglassen sollen. ^^
    Hatte davor noch nie mit solchen Programmen wie AutoIT oder so zutun bin grad voll in der Lehrn-Phase.


    Also wenn ich des richtig Verstanden hab soll ich einfach einmal jeden Buchstaben dens gibt mit If _IsPressed blablabla Then ... reintippen und dann im Loop ziowcshenspeichern? Sorry hab zwar durch Google usw begriffen das loop sowas wie ein SPeicher oder Zwischenspeicher ist aber ind <der Hilfe auch nix dazu gefunden.

    Zitat

    Dann den String vergleichen, mit dem, den du suchst


    Also dann mit StringIsAlNum prüfen ? (hAb ich grad in der Hilfe gefunden) ^^


    Zitat

    Einen Timeout, nachdem alles gellöscht wird.


    Wo wird was gelöscht xD?


    Sorry , tut mir echt leid das ich so Blöd bin aber wiegesagt lerne des ganz neu und kenne natürlich bisher nur wenige Begriffe oder Anweisungen. ;(
    Hoffentlich habt ihr Geduld mit mir ^^


    Wäre wiegesagt net wenn du des vllt nochn bissl ausführen könntest und daneben die einzelnen Anweisungen

  • Also, du musst ja die Ispressed-Abfragen speichern. Einfach den buchstaben an den String anhängen:
    $Speicher &= $gedrueckterBuchstabe.


    Aber nach z.B. 1 Seklunde ohne Schreiben, wird der Speicher gelöscht $Speicher = "" :)


    ZUm Abfragen dann:
    IF $gesucht = $Speicher Then ...

  • Ich denke mal so in der Art muss das aussehen mit _IsPressed:


  • mein Vorschlag: mach dir erst mal ne ini-Datei (Bsp. keys.ini ) mit folgendem Inhalt:



    und so könnte mal die Basis für dein Programm aussehen.

    konnts nicht testen, aber so müsste im Parameter $text sämmtlicher eingetippter Text stehen.


    in der Ini lässt sich anpassen, wie welche Zeichen wiedergegeben werden.


    Wenn dus so weit verstanden hast, schaffst du den Rest alleine.


    /edit Fehler beseitigt, thx @FirePanther

  • Also wenn ich richtig verstehe geht das (finde ich) auch einfacher:



    While 1
    $input = InputBox("Input", "Gib etwas ein!")


    If $input = "Hi" Then
    MsgBox(0, "Answer", "Hi!")
    ElseIf $input = "Wie gehts" Then
    MsgBox(0, "Answer", "Gut!")
    ; und so weiter! Immer ein Neues "ElseIf ... Then"
    ElseIf $input = "Was machst du so" Then
    MsgBox(0, "Answer", "Mit dir schreiben!")
    Else ; falls nichts vorgegebenes eingegeben wird
    MsgBox(0, "Not found", "Undefinierter Befehl!")




    EndIf


    WEnd

  • Das ist aber nicht wonach gefragt wurde.
    Er wollte ja wissen ob man das mir _ispressed abfragen kann. ^^


    Im übrigen würde ich in diesem fall Switch verwenden.
    Schneller + kürzer = besser


    mfg Ubuntu

  • Er hat zwar _IsPressed erwähnt, jedoch glaube ich nur, weil er nichts anderes kannte :)
    Also ich würde dir empfehlen, es per InputBox zu machen.


    Edit: also so ungefähr mit switch-case, ist beliebig erweiterbar:


    While 1

    $input = InputBox("Input", "Gib etwas ein!")
    If @error Then
    MSgbox(0,"","Exit")
    Exit
    EndIf

    Switch $input
    Case "Hallo"
    MsgBox(0,"","Hi!")
    Case "Wie gehts"
    MsgBox(0,"","Mir gehts gut")
    Case "Wie heisst du"
    MsgBox(0,"","Ich heisse " & @ComputerName)
    Case Else
    Msgbox(0,"","Ich konnte dich nicht verstehen.")
    EndSwitch

    WEnd


    Schau dir am besten auch mal StringInStr an, damit ein satz nicht genau übereinstimmen muss

  • Wie wäre es hiermit?



    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    Global $hHook, $hStub_KeyProc, $buffer = "",$hmod
    OnAutoItExitRegister("Cleanup")


    $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    $hmod = _WinAPI_GetModuleHandle(0)
    $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)


    While 1
    Sleep(10)
    WEnd



    Func EvaluateKey($keycode)
    If (($keycode > 64) And ($keycode < 91)) _ ; A - z
    Or (($keycode > 96) And ($keycode < 123)) _ ; A - Z
    Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
    $buffer &= Chr($keycode)
    Switch $buffer
    Case "Hi"
    msgbox(0,"","hi")
    EndSwitch
    ElseIf ($keycode > 159) And ($keycode < 164) Then
    Return
    ElseIf ($keycode = 27) Then ; ESC-Taste
    Exit
    Else
    $buffer = ""
    EndIf
    EndFunc ;==>EvaluateKey


    ;===========================================================
    ; Callback-Funktion
    ;===========================================================
    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
    EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode"))
    Else
    Local $flags = DllStructGetData($tKEYHOOKS, "flags")
    Switch $flags
    Case $LLKHF_ALTDOWN
    ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF)
    Case $LLKHF_EXTENDED
    ConsoleWrite("$LLKHF_EXTENDED" & @CRLF)
    Case $LLKHF_INJECTED
    ConsoleWrite("$LLKHF_INJECTED" & @CRLF)
    Case $LLKHF_UP
    ConsoleWrite("$LLKHF_UP: Tastencode (scanCode) - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & " Virtueller Tastencode (vkCode) - " & DllStructGetData($tKEYHOOKS, "vkCode") & @CRLF)
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc


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



    Edit:
    Wer von euch krammt so nen alten Link raus...