GUI-Input als Variable.

06/20/2010 14:49 No Hawx#1
Hey,
ich habe mit KODA eine Inputbox erstellt, möchte nun aber dass ich das was ich in die Inputbox eintrage dann per 'OK'-Knopfdruck im schon vorher geöffnetem Notepad geschrieben wird.[Habe schon bei Google gesucht, aber irgendwie nur Sachen gefunden die ich nicht verstehen ;O]

PHP Code:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form3 = GUICreate("Test", 116, 82, 303, 219)
$Button1 = GUICtrlCreateButton("&OK", 8, 48, 99, 25)
GUICtrlCreateInput("", 16, 16, 81, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

    EndSwitch
WEnd 
06/20/2010 14:57 Imaginär#2
PHP Code:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form3 = GUICreate("Test", 116, 82, 303, 219)
$Button1 = GUICtrlCreateButton("&OK", 8, 48, 99, 25)
$Input1 = GUICtrlCreateInput("", 16, 16, 81, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg 
= GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
                Case 
$Button1
                   $auslesen 
= GuiCtrlRead($Input1)
                   
run("notepad.exe")
                   
send($auslesen)

    EndSwitch
WEnd 
mfg

//Edit: Wenn das Fenster schon aktiv ist kannst du es so machen:

PHP Code:
                Case $Button1
                   $auslesen 
= GuiCtrlRead($Input1)
                   
WinActivate("Unbenannt - Editor") ;da passt du deinen Fenstertitel an..
                   
send($auslesen) 
06/20/2010 15:00 No Hawx#3
Oh, dankeschön :)
06/20/2010 15:03 Imaginär#4
Quote:
Originally Posted by KekzCracker View Post
Oh, dankeschön :)
Habe auch noch dazugeschrieben, wie man es machen kann, wenn das Fenster schon existiert.

Dafür muss man das Programm nicht nocheinmal starten, sondern lässt das Fenster mit

PHP Code:
WinActivate("Fenstertitel") 
einfach öffnen!
06/20/2010 15:18 No Hawx#5
Ah ok ^^
Ich bastel gerade an einem Solitärhack rum, aber irgendwie funtioniert es nicht ~.~
06/20/2010 15:23 Imaginär#6
Quote:
Originally Posted by KekzCracker View Post
Ah ok ^^
Ich bastel gerade an einem Solitärhack rum, aber irgendwie funtioniert es nicht ~.~
Was funktioniert denn genau nicht?

Kommst du mit allem klar(Cheat Engine;Adressen in AutoIt verabreiten)?^^
06/20/2010 19:48 No Hawx#7
Naja, also das hier ist mein Code:
[Sorry, aber irgendwie hat der 'NoMadMemory.au3' nicht gefunden, auch nicht als ich es runtergeladen habe. Jetzt habe ich von 'NoMadMemory.au3' den Code rein!]
PHP Code:
;;;;;;;;;;; NoMadMemory.au3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include-once
#region _Memory

Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $iv_InheritHandle = 1)
    
    If 
Not ProcessExists($iv_Pid) Then
        SetError
(1)
        Return 
0
    
EndIf
    
    
Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
    
    If @
Error Then
        SetError
(2)
        Return 
0
    
EndIf
    
    
Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $iv_InheritHandle, 'int', $iv_Pid)
    
    If @
Error Then
        DllClose
($ah_Handle[0])
        
SetError(3)
        Return 
0
    
EndIf
    
    
$ah_Handle[1] = $av_OpenProcess[0]
    
    Return 
$ah_Handle
    
EndFunc

Func _MemoryRead
($iv_Address, $ah_Handle, $sv_Type = 'dword')
    
    If 
Not IsArray($ah_Handle) Then
        SetError
(1)
        Return 
0
    
EndIf
    
    
Local $v_Buffer = DllStructCreate($sv_Type)
    
    If @
Error Then
        SetError
(@Error + 1)
        Return 
0
    
EndIf
    
    
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
    
    If 
Not @Error Then
        Local $v_Value 
= DllStructGetData($v_Buffer, 1)
        Return 
$v_Value
    
Else
        
SetError(6)
        Return 
0
    
EndIf
    
EndFunc

Func _MemoryWrite
($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')
    
    If 
Not IsArray($ah_Handle) Then
        SetError
(1)
        Return 
0
    
EndIf
    
    
Local $v_Buffer = DllStructCreate($sv_Type)
    
    If @
Error Then
        SetError
(@Error + 1)
        Return 
0
    
Else
        
DllStructSetData($v_Buffer, 1, $v_Data)
        If @
Error Then
            SetError
(6)
            Return 
0
        
EndIf
    EndIf
    
    
DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
    
    If 
Not @Error Then
        
Return 1
    
Else
        
SetError(7)
        Return 
0
    
EndIf
    
EndFunc

Func _MemoryClose
($ah_Handle)
    
    If 
Not IsArray($ah_Handle) Then
        SetError
(1)
        Return 
0
    
EndIf
    
    
DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
    If 
Not @Error Then
        DllClose
($ah_Handle[0])
        Return 
1
    
Else
        
DllClose($ah_Handle[0])
        
SetError(2)
        Return 
0
    
EndIf
    
EndFunc

Func SetPrivilege
( $privilege, $bEnable )
    
    Const 
$TOKEN_ADJUST_PRIVILEGES = 0x0020
    
Const $TOKEN_QUERY = 0x0008
    
Const $SE_PRIVILEGE_ENABLED = 0x0002
    Local $hToken
, $SP_auxret, $SP_ret, $hCurrProcess, $nTokens, $nTokenIndex, $priv
    $nTokens 
= 1
    $LUID 
= DLLStructCreate("dword;int")
    If 
IsArray($privilege) Then    $nTokens = UBound($privilege)
    
$TOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]")
    
$NEWTOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]")
    
$hCurrProcess = DLLCall("kernel32.dll","hwnd","GetCurrentProcess")
    
$SP_auxret = DLLCall("advapi32.dll","int","OpenProcessToken","hwnd",$hCurrProcess[0],   _
            
"int",BitOR($TOKEN_ADJUST_PRIVILEGES,$TOKEN_QUERY),"int_ptr",0)
    If 
$SP_auxret[0] Then
        $hToken 
= $SP_auxret[3]
        
DLLStructSetData($TOKEN_PRIVILEGES,1,1)
        
$nTokenIndex = 1
        
While $nTokenIndex <= $nTokens
            
If IsArray($privilege) Then
                $priv 
= $privilege[$nTokenIndex-1]
            Else
                
$priv = $privilege
            
EndIf
            
$ret = DLLCall("advapi32.dll","int","LookupPrivilegeValue","str","","str",$priv,   _
                    
"ptr",DLLStructGetPtr($LUID))
            If 
$ret[0] Then
                
If $bEnable Then
                    DLLStructSetData
($TOKEN_PRIVILEGES,2,$SE_PRIVILEGE_ENABLED,(3 * $nTokenIndex))
                Else
                    
DLLStructSetData($TOKEN_PRIVILEGES,2,0,(3 * $nTokenIndex))
                EndIf
                
DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,1),(3 * ($nTokenIndex-1)) + 1)
                
DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,2),(3 * ($nTokenIndex-1)) + 2)
                
DLLStructSetData($LUID,1,0)
                
DLLStructSetData($LUID,2,0)
            EndIf
            
$nTokenIndex += 1
        WEnd
        $ret 
= DLLCall("advapi32.dll","int","AdjustTokenPrivileges","hwnd",$hToken,"int",0,   _
                
"ptr",DllStructGetPtr($TOKEN_PRIVILEGES),"int",DllStructGetSize($NEWTOKEN_PRIVILEGES),   _
                
"ptr",DllStructGetPtr($NEWTOKEN_PRIVILEGES),"int_ptr",0)
        
$f = DLLCall("kernel32.dll","int","GetLastError")
    EndIf
    
$NEWTOKEN_PRIVILEGES=0
    $TOKEN_PRIVILEGES
=0
    $LUID
=0
    
If $SP_auxret[0] = 0 Then Return 0
    $SP_auxret 
= DLLCall("kernel32.dll","int","CloseHandle","hwnd",$hToken)
    If 
Not $ret[0] And Not $SP_auxret[0] Then Return 0
    
return $ret[0]
EndFunc   ;==>SetPrivilege

#endregion
;;;;;;;;;;;;;;;;;;;; END ~ NoMadMemory.au3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,

;;;;;;;;;;;;;;;;;; 
KODA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 154, 78, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 16, 16, 121, 21)
$Button1 = GUICtrlCreateButton("Okay ^^", 32, 40, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;;;;;;;;;;;;;; END ~ KODA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$ID = WinGetProcess("Solitär")
$process = _MemoryOpen($ID)

While 
1
    $nMsg 
= GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
         Case 
$Button1
                   $auslesen 
= GuiCtrlRead($Input1)
                   
_MemoryWrite(0x000A8FC0, $process, $Input1)
            Exit
    EndSwitch
WEnd

;;;;;;;;;;;;;;;;;;; HANDLE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$handle = WinGetHandle("Solitär", "")
If @
error Then
    MsgBox
(4096, "Fehler", "Das Solitär-Fenster konnte nicht gefunden werden")
Else
EndIf 
Problem ~ Immer wenn ich dann einen Wert in die Inputbox eingebe verändert sich die Punktezahl, aber nur auf 3. Wenn ich 600 eintrage kommt 3, wenn ich 10 eintrage kommt 3 usw. :(

Wahrscheinlich habe ich die Adresse falsch rausgesucht :(, werde es jetzt nochmal probieren.
06/20/2010 20:18 omer36#8
es heißt "NomadMemory.au3" vllt liegts daran? ^^
06/20/2010 20:58 huberhans#9
Wenn schon, dann liegt der Fehler da:

PHP Code:
 Case $Button1
                   $auslesen 
= GuiCtrlRead($Input1)
                   
_MemoryWrite(0x000A8FC0, $process, $Input1) 
denn entweder du machst es so:

PHP Code:
 Case $Button1
                   _MemoryWrite
(0x000A8FC0, $process, GUICtrlRead($Input1)) 
oder so:

PHP Code:
 Case $Button1
                   $auslesen 
= GuiCtrlRead($Input1)
                   
_MemoryWrite(0x000A8FC0, $process, $auslesen)