text aufnehmen

  • hey jungs, ich möchte während einem laufenden spiel kurzzeitig Tastenanschläge aufnehmen.

    krieg das aber irgendwie nicht gebacken. habs mal so versucht, aber haut nicht wirklich hin.

    Vieleicht hat einer von euch ne idee

    Worauf es mir ankommt ist, dass ich nicht aus dem spiel raus ins windows fliege, wenn ich die Anschläge aufnehmen will.

    [autoit]


    #include <GUIConstants.au3>
    Opt("TrayOnEventMode",11)
    HotKeySet ( "^!{F1}","gui")

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

    While 1
    sleep (200)
    Wend

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

    func gui()
    HotKeySet("{Enter}","write")
    $gui = GUICreate(" text", 320,120, @DesktopWidth/2-160, @DesktopHeight/2-45, -1, 0x00000018)
    $file = GUICtrlCreateInput ( "", 10, 5, 300, 20)

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

    GUISetState (@SW_ENABLE)
    EndFunc

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

    func write ()
    IniWrite("test.ini","sestsec","eingabe1",GUICtrlRead($file))
    exit
    EndFunc

    [/autoit]


    Ps: keine Panik, soll kein Keylogger oder Troyaner werden.

    Einmal editiert, zuletzt von Vollnoob (29. Juli 2007 um 14:36)

  • vieleicht gibts auch ne Möglichkeit ne inputbox einzublenden, ohne aus dem Fullscreenmodus des spiels gekickt zu werden?


    Edit BugFix: Bitte keine Doppelposts! Man kann editieren.

  • Also am einfachsten währs wenn du die funktion _ispressed verwenden würdest. Dann kannst du es ja in ne Variable schreiben lassen und dann weiter verarbeiten.

    MfG Night

  • Mein Problem ist, ich möchte Dateinamen eingeben können, die dann ausgeführt werden.

    Also, mein plan ist, ich gebe während dem spiel meinen Hotkey ein, so das mein autoitscript auf aufnahme schält. woraufhin ich sichtbar oder unsichtbar enen Dateinamen eintippen kann, der dann mit RUN ausgeführt werden soll.
    All das soll so geschehen, das ich nicht aus dem fullscreenmodus fliege.

    Bsp.: ich bin im spiel (fullscreen) und möchte nun im hintergrund die beispiel.exe im script-Verzeichnis ausführen.

    Also drücke ich meinen Hotkey für Aufnahme, und tippe "beispiel" ein.
    beim nächsten Enterdruck soll dann die Beispiel.exe ausgeführt werden.

  • ja das ist möglich, wie gesagt _ispressed in ne Variable schreiben, das kannst du ja dann weiterverarbeiten wie du willst. Und den Teil mit dem Enter lässt sich auch Programmieren.

  • dann muss ich aber beim programieren schon genau wissen, wie die exe heißt.

    Tu ich aber nicht.

  • Teste mal folgendes (Keine Ahnung, ob er den Fullscreen-Modus dann verlässt, aber einen Versuch ist es Wert.) Also vorher Skript anschmeissen und dann mal probieren.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>
    #include <Misc.au3>

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

    Opt("MustDeclareVars", 1)
    HotKeySet("^!{F1}", "RecordeInput")

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

    Global $h_maingui = -1
    Global $h_fileinp = -1
    $h_maingui = GUICreate("", 320, 30, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
    $h_fileinp = GUICtrlCreateInput("", 5, 5, 310, 20)

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

    While 1
    WEnd

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

    Func RecordeInput()
    Local $s_file = ""

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

    HotKeySet("", "RecordeInput")
    GUISetState(@SW_SHOW, $h_maingui)
    While 1
    If _IsPressed("0D") Then
    $s_file = GUICtrlRead($h_fileinp, 1)
    ;~ If FileExists($s_file) == 1 Then
    Run($s_file, @WorkingDir, @SW_HIDE)
    ;~ EndIf
    GUICtrlSetData($h_fileinp, "")
    GUISetState(@SW_HIDE, $h_maingui)
    HotKeySet("^!{F1}", "RecordeInput")
    EndIf
    WEnd
    EndFunc ;==>RecordeInput

    [/autoit]
  • danke für die mühe, aber sobald da

    @SW_SHOW kommt, flieg ich aus dem Spiel ins Windows zurück

    und bei

    [autoit]

    GUISetState(@SW_SHOWMINIMIZED , $h_maingui)

    [/autoit]

    wird die Eingabe nicht aufgenommen :help:

  • hi


    ich glaube kaum das das ohne dllcalls oder addons möglich ist, es gab aber mal nen fred über texte in spielen usw wie in fraps anzuzeigen aber den hab ich auch nciht verstanden. ich weiß nur das es mit boardmitteln ziemlich unmöglcih sein sollte(berichtigt mich wenn ich falsch liege...)

    vieleicht kann sich ja mal nen dllmächtiger erbarmen nen beispiel bei zu steuern:D


    mfg

  • Zitat

    Original von Vollnoob
    dann muss ich aber beim programieren schon genau wissen, wie die exe heißt.

    Tu ich aber nicht.

    Nein musst du nicht. Du musst dir nur so ne art Keylogger programmieren. Die Tastaturanschläge dann in einer variable speichern und sobald enter oder eine andere Taste gedrückt wird, wird ein Run() befehl ausgeführt. Ich hoffe du verstehst nun was ich meine:

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    HotKeySet("{F1}","_active")
    $dll = DllOpen("user32.dll")
    $programm = ""
    $aktiv = 0
    While 1
    Sleep (1)
    if $aktiv = 1 Then
    If _IsPressed("41", $dll) Then
    $programm &= "a"
    EndIf
    ToolTip($programm,20,20)
    while _IsPressed("41", $dll)
    sleep(1)
    WEnd
    ;b
    ;c
    ;...
    EndIf
    WEnd

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

    Func _active()
    if $aktiv = 0 Then
    $aktiv = 1
    Else
    $aktiv = 0
    EndIf
    EndFunc

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

    DllClose($dll)

    [/autoit]

    Mit F1 startest und beendest du jetzt die Eingabe.

    Einmal editiert, zuletzt von Nightraven (29. Juli 2007 um 21:42)

  • Danke, ist scheinbar die einzige sinnvolle Lösung.

    Das mit dem tooltip is genial, der wird nämlich auch im Fullscreenmodus sichtbar.

    Thx

  • Hi kein problem, wenn du die aufnahme stoppst kannst du ja auch den Tooltip ausblenden dann stört er nicht. (Falls er stört)

  • [autoit]

    ;===============================================================================
    ; Function: _GetKeyPressed($iOption)
    ; Description: Returns the keyboard key that was pressed.
    ; Parameter(s): $iOption = 1: Returns ASCII value for the key pressed.
    ; $iOption = 0: Returns Hex value for the key pressed.
    ; $iOption = 2: Returns the character for the key pressed.
    ; Requirement(s): Must include <misc.au3>
    ; Return Value(s): On Success - Returns a character corresponding the keyboard button pressed.
    ; On Failure - -1(No key was pressed) and Set
    ; @ERROR to: 1 - No key was pressed.
    ; Author(s): Chris95219 and The Author of _IsPressed()
    ; Note(s):
    ;
    ;===============================================================================

    Func _GetKeyPressed($iOption = 2)
    For $i = 0 to 255
    if (_IsPressed(Hex($i, 2))) Then
    Select
    Case $iOption = 0
    Return Hex($i)
    Case $iOption = 1
    Return $i
    Case $iOption = 2
    Return Chr($i)
    EndSelect
    EndIf
    Next
    SetError(1)
    Return -1
    EndFunc

    [/autoit]

    benutze das hier, dann musst du nicht jeden key einzeln Abfragen

  • sieht absolut klasse aus, aber irgendwie steig ich nicht ganz durch.
    (mein Nick ist nicht umsonst gewählt :D)

    warscheinlich bin ich voll auf dem Holzweg.
    ich hab mal versucht die tasteneingaben abzugreifen.

    hier mein misratener Versuch.

    [autoit]

    #include <Misc.au3>
    HotKeySet("^!{F1}", "_GetKeyPressed")
    HotKeySet("^!{F2}", "raus")
    global $i = ("y")
    global $text = ("x")

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

    While 1
    sleep (200)
    WEnd

    Func _GetKeyPressed () ;($iOption = 2)
    ToolTip ($text,20,20)
    while 1
    sleep (200)
    ;~ For $i = 0 to 255
    if (_IsPressed(Hex($i, 2))) Then
    ;~ Select
    ;~ Case $iOption = 0
    ;~ Return Hex($i)
    ;~ Case $iOption = 1
    ;~ Return $i
    ;~ Case $iOption = 2
    Return Chr($i)
    ;~ EndSelect
    global $text &= $i
    ToolTip ($text,20,20)
    EndIf
    ;~ Next
    ;~ SetError(1)
    ;~ Return -1
    WEnd
    ;~ MsgBox (0,"",$text)
    EndFunc

    func raus()
    MsgBox (0,"",$text)
    exit
    EndFunc

    [/autoit]

    kann mir da jemand auf die sprünge helfen?
    Bei mir klickts irgendwie nicht.

    Einmal editiert, zuletzt von Vollnoob (31. Juli 2007 um 12:58)

  • Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    HotKeySet("^!{F1}", "_change")
    HotKeySet("^!{F2}", "raus")
    $i = 0
    $text = ""
    $dll = DllOpen("user32.dll")
    $old = ""
    $new = ""
    $1 = ""
    $on = 0
    While 1
    Sleep(1)
    If $on = 1 Then
    ToolTip("Text:" & $text, 20, 20)
    If $1 = 1 Then
    $old = _GetKeyPressed(2)
    Else
    $new = _GetKeyPressed(2)
    EndIf

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

    If Not @error = 1 And $old <> $new Then
    $text &= StringLower(_GetKeyPressed(2))
    EndIf

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

    If $1 = 0 Then
    $1 = 1
    Else
    $1 = 0
    EndIf
    EndIf
    WEnd

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

    Func _change()
    If $on = 1 Then
    $on = 0
    Else
    $on = 1
    EndIf
    EndFunc ;==>_change

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

    Func _GetKeyPressed($iOption = 2)
    For $i = 0 To 255
    If (_IsPressed(Hex($i, 2), $dll)) Then
    Select
    Case $iOption = 0
    Return Hex($i)
    Case $iOption = 1
    Return $i
    Case $iOption = 2
    Return Chr($i)
    EndSelect
    EndIf
    Next
    SetError(1)
    Return -1
    EndFunc ;==>_GetKeyPressed

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

    Func raus()
    MsgBox(0, "", $text)
    Exit
    EndFunc ;==>raus

    [/autoit]

    Hab noch eine Funktion hinzugefügt die verhindert das die Eingaben doppelt genommen werden.

    Einmal editiert, zuletzt von Nightraven (31. Juli 2007 um 13:36)

  • Servus, danke für die schnelle hilfe.
    Ich glaub ich hab wohl bisher Funktion und Return nie richtig kapiert und genutzt.

    Werds gleich nach der Spätschicht mal testen.

    Nochmals Danke einstweilen!