Nein!!! BITTE!!!
Bleib hier im Thread...
Schreib einfach eine neue ausführliche Beschreibung hier unten als Beitrag hinein...
Beiträge von Yjuq
-
-
Hey, ich habe das Problem, dass ich 2 Integers nicht zu einer Zeichenkette zusammen gesetzt bekomme...
Die Skripte sind hier zu finden: [ offen ] exe weiter laufen lassen und erneut mit Parametern aufrufenMittlerweile hat mich das ganze so gefesselt, dass ich unbedingt eine Lösung dafür haben muss.
Ich komme aber nicht weiter... Egal was ich versuche, es wird einfach keine Zeichenkette daraus...Hier mal ein Vergleich:
Spoiler anzeigen
[autoit]Global $tagStruct[2] = ['int; int; int', 'char[11]'], _
[/autoit] [autoit][/autoit] [autoit]
$tStruct[2]$tStruct[0] = DllStructCreate($tagStruct[0])
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tStruct[0], 1, 0x656b614d) ; ekaM
DllStructSetData($tStruct[0], 2, 0x6172472d) ; arG-
DllStructSetData($tStruct[0], 3, 0x006b6966) ; kif$tStruct[1] = DllStructCreate($tagStruct[1], DllStructGetPtr($tStruct[0]))
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & DllStructGetData($tStruct[1], 1) & @CRLF & @CRLF)$tagStruct = ''
[/autoit]
$tStruct = ''Hier funktioniert das ganze ohne Probleme. Aber da lasse ich ja auch AutoIt die Arbeit erledigen...
Nun ja, weiß jemand wie ich aus 2 Integers eine Zeichenkette zusammen gesetzt bekomme?Würde mich über jede Antwort freuen. Vielen Dank!
-
Es so meinen:
[ gelöst ] Irrlicht.dll - DLL Call -
Kannste vergessen :x
Das funktioniert bei mir zmd. Nicht...
Deswegen bin ich ja auch den "umständlichen" Weg gegangen... -
Okey, besser bekomme ich das nicht hin...
Skript1: (kompilieren)
Spoiler anzeigen
[autoit]Global $tagStruct, $tStruct, $sSave
[/autoit] [autoit][/autoit] [autoit]
$tagStruct = 'int;' & _ ; 4 Byte
'char[5]' ; 8 Byte$tStruct = DllStructCreate($tagStruct)
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tStruct, 1, 777)
DllStructSetData($tStruct, 2, 'Hallo')
RunWait('Skript2.exe ' & @AutoItPID & ' ' & DllStructGetPtr($tStruct))$sSave = '1.: ' & DllStructGetData($tStruct, 1) & @CRLF & _ ; 333
[/autoit] [autoit][/autoit] [autoit]
'2.: ' & DllStructGetData($tStruct, 2) ; Welt!MsgBox(262144, 'Output Skript1.exe', $sSave)
[/autoit] [autoit][/autoit] [autoit]$tagStruct = ''
[/autoit] [autoit][/autoit] [autoit]
$tStruct = ''
$sSave = ''Exit
[/autoit]Skript2: (kompilieren)
Spoiler anzeigen
[autoit]#include <Pointer.au3>
[/autoit] [autoit][/autoit] [autoit]Global $tagStruct1, $tagStruct2, $hOpen, $tStruct1, $tStruct2, $sSave
[/autoit] [autoit][/autoit] [autoit]
$tagStruct1 = 'int; int'
$tagStruct2 = 'char[5]'$hOpen = _MemoryOpen($CmdLine[1])
[/autoit] [autoit][/autoit] [autoit]$tStruct1 = DllStructCreate($tagStruct1)
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tStruct1, 1, _MemoryRead($CmdLine[2] + 4, $hOpen))
DllStructSetData($tStruct1, 2, _MemoryRead($CmdLine[2] + 8, $hOpen))$tStruct2 = DllStructCreate($tagStruct2, DllStructGetPtr($tStruct1))
[/autoit] [autoit][/autoit] [autoit]$sSave = '1.: ' & _MemoryRead($CmdLine[2], $hOpen) & @CRLF & _ ; 777
[/autoit] [autoit][/autoit] [autoit]
'2.: ' & DllStructGetData($tStruct2, 1) ; HalloMsgBox(262144, 'Output Skript2.exe', $sSave)
[/autoit] [autoit][/autoit] [autoit]_MemoryWrite($CmdLine[2], $hOpen, 333)
[/autoit] [autoit][/autoit] [autoit]
_MemoryWrite($CmdLine[2] + 4, $hOpen, 0x746c6557) ; 74 -> t
; 6c -> l
; 65 -> e
; 57 -> W
_MemoryWrite($CmdLine[2] + 8, $hOpen, 0x00000021) ; 00 -> NUL
; 00 -> NUL
; 00 -> NUL
; 21 -> !
_MemoryClose($hOpen)$tagStruct1 = ''
[/autoit] [autoit][/autoit] [autoit]
$tagStruct2 = ''
$hOpen = ''
$tStruct1 = ''
$tStruct2 = ''
$sSave = ''Exit
[/autoit]Pointer.au3:
Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#region _Memory
;=================================================================================================
; AutoIt Version: 3.1.127 (beta)
; Language: English
; Platform: All Windows
; Author: Nomad
; Requirements: These functions will only work with beta.
;=================================================================================================
; Credits: wOuter - These functions are based on his original _Mem() functions. But they are
; easier to comprehend and more reliable. These functions are in no way a direct copy
; of his functions. His functions only provided a foundation from which these evolved.
;=================================================================================================
;
; Functions:
;
;=================================================================================================
; Function: _MemoryOpen($iv_Pid(, $iv_DesiredAccess(, $iv_InheritHandle)))
; Description: Opens a process and enables all possible access rights to the process. The
; Process ID of the process is used to specify which process to open. You must
; call this function before calling _MemoryClose(), _MemoryRead(), or _MemoryWrite().
; Parameter(s): $iv_Pid - The Process ID of the program you want to open.
; $iv_DesiredAccess - (optional) Set to 0x1F0FFF by default, which enables all
; possible access rights to the process specified by the
; Process ID.
; $if_InheritHandle - (optional) If this value is TRUE, all processes created by
; this process will inherit the access handle. Set to TRUE
; (1) by default. Set to 0 if you want it to be FALSE.
; Requirement(s): A valid process ID.
; Return Value(s): On Success - Returns an array containing the Dll handle and an open handle to
; the specified process.
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = Invalid $iv_Pid.
; 2 = Failed to open Kernel32.dll.
; 3 = Failed to open the specified process.
; Author(s): Nomad
; Note(s):
;=================================================================================================
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)If Not ProcessExists($iv_Pid) Then
[/autoit] [autoit][/autoit] [autoit]
SetError(1)
Return 0
EndIfLocal $ah_Handle[2] = [DllOpen('kernel32.dll')]
[/autoit] [autoit][/autoit] [autoit]If @Error Then
[/autoit] [autoit][/autoit] [autoit]
SetError(2)
Return 0
EndIfLocal $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
[/autoit] [autoit][/autoit] [autoit]If @Error Then
[/autoit] [autoit][/autoit] [autoit]
DllClose($ah_Handle[0])
SetError(3)
Return 0
EndIf$ah_Handle[1] = $av_OpenProcess[0]
[/autoit] [autoit][/autoit] [autoit]Return $ah_Handle
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];=================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _MemoryRead($iv_Address, $ah_Handle(, $sv_Type))
; Description: Reads the value located in the memory address specified.
; Parameter(s): $iv_Address - The memory address you want to read from. It must be in hex
; format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $sv_Type - (optional) The "Type" of value you intend to read. This is set to
; 'dword'(32bit(4byte) signed integer) by default. See the help file
; for DllStructCreate for all types.
; An example: If you want to read a word that is 15 characters in
; length, you would use 'char[16]'.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns the value located at the specified address.
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = Invalid $ah_Handle.
; 2 = $sv_Type was not a string.
; 3 = $sv_Type is an unknown data type.
; 4 = Failed to allocate the memory needed for the DllStructure.
; 5 = Error allocating memory for $sv_Type.
; 6 = Failed to read from the specified process.
; Author(s): Nomad
; Note(s): Values returned are in Decimal format, unless specified as a 'char' type, then
; they are returned in ASCII format. Also note that size ('char[size]') for all
; 'char' types should be 1 greater than the actual size.
;=================================================================================================
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')If Not IsArray($ah_Handle) Then
[/autoit] [autoit][/autoit] [autoit]
SetError(1)
Return 0
EndIfLocal $v_Buffer = DllStructCreate($sv_Type)
[/autoit] [autoit][/autoit] [autoit]If @Error Then
[/autoit] [autoit][/autoit] [autoit]
SetError(@Error + 1)
Return 0
EndIfDllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
[/autoit] [autoit][/autoit] [autoit]If Not @Error Then
[/autoit] [autoit][/autoit] [autoit]
Local $v_Value = DllStructGetData($v_Buffer, 1)
Return $v_Value
Else
SetError(6)
Return 0
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit];=================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _MemoryWrite($iv_Address, $ah_Handle, $v_Data(, $sv_Type))
; Description: Writes data to the specified memory address.
; Parameter(s): $iv_Address - The memory address you want to write to. It must be in hex
; format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $v_Data - The data to be written.
; $sv_Type - (optional) The "Type" of value you intend to write. This is set to
; 'dword'(32bit(4byte) signed integer) by default. See the help file
; for DllStructCreate for all types.
; An example: If you want to write a word that is 15 characters in
; length, you would use 'char[16]'.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = Invalid $ah_Handle.
; 2 = $sv_Type was not a string.
; 3 = $sv_Type is an unknown data type.
; 4 = Failed to allocate the memory needed for the DllStructure.
; 5 = Error allocating memory for $sv_Type.
; 6 = $v_Data is not in the proper format to be used with the "Type"
; selected for $sv_Type, or it is out of range.
; 7 = Failed to write to the specified process.
; Author(s): Nomad
; Note(s): Values sent must be in Decimal format, unless specified as a 'char' type, then
; they must be in ASCII format. Also note that size ('char[size]') for all
; 'char' types should be 1 greater than the actual size.
;=================================================================================================
Func _MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')If Not IsArray($ah_Handle) Then
[/autoit] [autoit][/autoit] [autoit]
SetError(1)
Return 0
EndIfLocal $v_Buffer = DllStructCreate($sv_Type)
[/autoit] [autoit][/autoit] [autoit]If @Error Then
[/autoit] [autoit][/autoit] [autoit]
SetError(@Error + 1)
Return 0
Else
DllStructSetData($v_Buffer, 1, $v_Data)
If @Error Then
SetError(6)
Return 0
EndIf
EndIfDllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
[/autoit] [autoit][/autoit] [autoit]If Not @Error Then
[/autoit] [autoit][/autoit] [autoit]
Return 1
Else
SetError(7)
Return 0
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit];=================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _MemoryClose($ah_Handle)
; Description: Closes the process handle opened by using _MemoryOpen().
; Parameter(s): $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = Invalid $ah_Handle.
; 2 = Unable to close the process handle.
; Author(s): Nomad
; Note(s):
;=================================================================================================
Func _MemoryClose($ah_Handle)If Not IsArray($ah_Handle) Then
[/autoit] [autoit][/autoit] [autoit]
SetError(1)
Return 0
EndIfDllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
[/autoit] [autoit][/autoit] [autoit]
If Not @Error Then
DllClose($ah_Handle[0])
Return 1
Else
DllClose($ah_Handle[0])
SetError(2)
Return 0
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit];=================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _MemoryPointerRead ($iv_Address, $ah_Handle, $av_Offset(, $sv_Type))
; Description: Reads a chain of pointers and returns an array containing the destination
; address and the data at the address.
; Parameter(s): $iv_Address - The static memory address you want to start at. It must be in
; hex format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $av_Offset - An array of offsets for the pointers. Each pointer must have an
; offset. If there is no offset for a pointer, enter 0 for that
; array dimension. (Offsets must be in decimal format, NOT hex!)
; $sv_Type - (optional) The "Type" of data you intend to read at the destination
; address. This is set to 'dword'(32bit(4byte) signed integer) by
; default. See the help file for DllStructCreate for all types.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns an array containing the destination address and the value
; located at the address.
; On Failure - Returns 0
; @Error - 0 = No error.
; 1 = $av_Offset is not an array.
; 2 = Invalid $ah_Handle.
; 3 = $sv_Type is not a string.
; 4 = $sv_Type is an unknown data type.
; 5 = Failed to allocate the memory needed for the DllStructure.
; 6 = Error allocating memory for $sv_Type.
; 7 = Failed to read from the specified process.
; Author(s): Nomad
; Note(s): Values returned are in Decimal format, unless a 'char' type is selected.
; Set $av_Offset like this:
; $av_Offset[0] = NULL (not used)
; $av_Offset[1] = Offset for pointer 1 (all offsets must be in Decimal)
; $av_Offset[2] = Offset for pointer 2
; etc...
; (The number of array dimensions determines the number of pointers)
;=================================================================================================
Func _MemoryPointerRead ($iv_Address, $ah_Handle, $av_Offset, $sv_Type = 'dword')If IsArray($av_Offset) Then
[/autoit] [autoit][/autoit] [autoit]
If IsArray($ah_Handle) Then
Local $iv_PointerCount = UBound($av_Offset) - 1
Else
SetError(2)
Return 0
EndIf
Else
SetError(1)
Return 0
EndIfLocal $iv_Data[2], $i
[/autoit] [autoit][/autoit] [autoit]
Local $v_Buffer = DllStructCreate('dword')For $i = 0 to $iv_PointerCount
[/autoit] [autoit][/autoit] [autoit]If $i = $iv_PointerCount Then
[/autoit] [autoit][/autoit] [autoit]
$v_Buffer = DllStructCreate($sv_Type)
If @Error Then
SetError(@Error + 2)
Return 0
EndIf$iv_Address = '0x' & hex($iv_Data[1] + $av_Offset[$i])
[/autoit] [autoit][/autoit] [autoit]
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(7)
Return 0
EndIf$iv_Data[1] = DllStructGetData($v_Buffer, 1)
[/autoit] [autoit][/autoit] [autoit]ElseIf $i = 0 Then
[/autoit] [autoit][/autoit] [autoit]
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(7)
Return 0
EndIf$iv_Data[1] = DllStructGetData($v_Buffer, 1)
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]
$iv_Address = '0x' & hex($iv_Data[1] + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(7)
Return 0
EndIf$iv_Data[1] = DllStructGetData($v_Buffer, 1)
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]$iv_Data[0] = $iv_Address
[/autoit] [autoit][/autoit] [autoit]Return $iv_Data
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];=================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _MemoryPointerWrite ($iv_Address, $ah_Handle, $av_Offset, $v_Data(, $sv_Type))
; Description: Reads a chain of pointers and writes the data to the destination address.
; Parameter(s): $iv_Address - The static memory address you want to start at. It must be in
; hex format (0x00000000).
; $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $av_Offset - An array of offsets for the pointers. Each pointer must have an
; offset. If there is no offset for a pointer, enter 0 for that
; array dimension.
; $v_Data - The data to be written.
; $sv_Type - (optional) The "Type" of data you intend to write at the destination
; address. This is set to 'dword'(32bit(4byte) signed integer) by
; default. See the help file for DllStructCreate for all types.
; Requirement(s): The $ah_Handle returned from _MemoryOpen.
; Return Value(s): On Success - Returns the destination address.
; On Failure - Returns 0.
; @Error - 0 = No error.
; 1 = $av_Offset is not an array.
; 2 = Invalid $ah_Handle.
; 3 = Failed to read from the specified process.
; 4 = $sv_Type is not a string.
; 5 = $sv_Type is an unknown data type.
; 6 = Failed to allocate the memory needed for the DllStructure.
; 7 = Error allocating memory for $sv_Type.
; 8 = $v_Data is not in the proper format to be used with the
; "Type" selected for $sv_Type, or it is out of range.
; 9 = Failed to write to the specified process.
; Author(s): Nomad
; Note(s): Data written is in Decimal format, unless a 'char' type is selected.
; Set $av_Offset like this:
; $av_Offset[0] = NULL (not used, doesn't matter what's entered)
; $av_Offset[1] = Offset for pointer 1 (all offsets must be in Decimal)
; $av_Offset[2] = Offset for pointer 2
; etc...
; (The number of array dimensions determines the number of pointers)
;=================================================================================================
Func _MemoryPointerWrite ($iv_Address, $ah_Handle, $av_Offset, $v_Data, $sv_Type = 'dword')If IsArray($av_Offset) Then
[/autoit] [autoit][/autoit] [autoit]
If IsArray($ah_Handle) Then
Local $iv_PointerCount = UBound($av_Offset) - 1
Else
SetError(2)
Return 0
EndIf
Else
SetError(1)
Return 0
EndIfLocal $iv_StructData, $i
[/autoit] [autoit][/autoit] [autoit]
Local $v_Buffer = DllStructCreate('dword')For $i = 0 to $iv_PointerCount
[/autoit] [autoit][/autoit] [autoit]
If $i = $iv_PointerCount Then
$v_Buffer = DllStructCreate($sv_Type)
If @Error Then
SetError(@Error + 3)
Return 0
EndIfDllStructSetData($v_Buffer, 1, $v_Data)
[/autoit] [autoit][/autoit] [autoit]
If @Error Then
SetError(8)
Return 0
EndIf$iv_Address = '0x' & hex($iv_StructData + $av_Offset[$i])
[/autoit] [autoit][/autoit] [autoit]
DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(9)
Return 0
Else
Return $iv_Address
EndIf
ElseIf $i = 0 Then
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(3)
Return 0
EndIf$iv_StructData = DllStructGetData($v_Buffer, 1)
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]
$iv_Address = '0x' & hex($iv_StructData + $av_Offset[$i])
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If @Error Then
SetError(3)
Return 0
EndIf$iv_StructData = DllStructGetData($v_Buffer, 1)
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]
NextEndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];==================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: SetPrivilege( $privilege, $bEnable )
; Description: Enables (or disables) the $privilege on the current process
; (Probably) requires administrator privileges to run
;
; Author(s): Larry (from autoitscript.com's Forum)
; Notes(s):
; http://www.autoitscript.com/forum/index.ph…ndpost&p=223999
;==================================================================================Func SetPrivilege( $privilege, $bEnable )
[/autoit] [autoit][/autoit] [autoit]
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*",0)
If $SP_auxret[0] Then
$hToken = $SP_auxret[3]
DLLStructSetData($TOKEN_PRIVILEGES,1,1)
$nTokenIndex = 1
While $nTokenIndex <= $nTokens
If IsArray($privilege) Then
$ntokenvar=$ntokenindex-1
$priv = $privilege[$ntokenvar]
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*",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;===================================================================================================
[/autoit] [autoit][/autoit] [autoit]; Function........: _MemoryGetBaseAddress($ah_Handle, $iHD)
[/autoit] [autoit][/autoit] [autoit]
;
; Description.....: Reads the 'Allocation Base' from the open process.
;
; Parameter(s)....: $ah_Handle - An array containing the Dll handle and the handle of the open
; process as returned by _MemoryOpen().
; $iHD - Return type:
; |0 = Hex (Default)
; |1 = Dec
;
; Requirement(s)..: A valid process ID.
;
; Return Value(s).: On Success - Returns the 'allocation Base' address and sets @Error to 0.
; On Failure - Returns 0 and sets @Error to:
; |1 = Invalid $ah_Handle.
; |2 = Failed to find correct allocation address.
; |3 = Failed to read from the specified process.
;
; Author(s).......: Nomad. Szhlopp.
; URL.............: http://www.autoitscript.com/forum/index.php?showtopic=78834
; Note(s).........: Go to http://Www.CheatEngine.org for the latest version of CheatEngine.
;===================================================================================================Func _MemoryGetBaseAddress($ah_Handle, $iHexDec = 0)
[/autoit] [autoit][/autoit] [autoit]Local $iv_Address = 0x00100000
[/autoit] [autoit][/autoit] [autoit]
Local $v_Buffer = DllStructCreate('dword;dword;dword;dword;dword;dword;dword')
Local $vData
Local $vTypeIf Not IsArray($ah_Handle) Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
SetError(1)
Return 0
EndIfDllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
[/autoit] [autoit][/autoit] [autoit]If Not @Error Then
[/autoit] [autoit][/autoit] [autoit]$vData = Hex(DllStructGetData($v_Buffer, 2))
[/autoit] [autoit][/autoit] [autoit]
$vType = Hex(DllStructGetData($v_Buffer, 3))While $vType <> "00000080"
[/autoit] [autoit][/autoit] [autoit]
DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
$vData = Hex(DllStructGetData($v_Buffer, 2))
$vType = Hex(DllStructGetData($v_Buffer, 3))
If Hex($iv_Address) = "01000000" Then ExitLoop
$iv_Address += 65536WEnd
[/autoit] [autoit][/autoit] [autoit]If $vType = "00000080" Then
[/autoit] [autoit][/autoit] [autoit]
SetError(0)
If $iHexDec = 1 Then
Return Dec($vData)
Else
Return $vData
EndIfElse
[/autoit] [autoit][/autoit] [autoit]
SetError(2)
Return 0
EndIfElse
[/autoit] [autoit][/autoit] [autoit]
SetError(3)
Return 0
EndIfEndFunc ;==>_MemoryGetBaseAddress
[/autoit] [autoit][/autoit] [autoit]Func _MemoryModuleGetBaseAddress($iPID, $sModule)
[/autoit] [autoit][/autoit] [autoit]
If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)If Not IsString($sModule) Then Return SetError(2, 0, 0)
[/autoit] [autoit][/autoit] [autoit]Local $PSAPI = DllOpen("psapi.dll")
[/autoit] [autoit][/autoit] [autoit];Get Process Handle
[/autoit] [autoit][/autoit] [autoit]
Local $hProcess
Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITEIf $iPID > 0 Then
[/autoit] [autoit][/autoit] [autoit]
Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
If $hProcess[0] Then
$hProcess = $hProcess[0]
EndIf
EndIf;EnumProcessModules
[/autoit] [autoit][/autoit] [autoit]
Local $Modules = DllStructCreate("ptr[1024]")
Local $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
If $aCall[4] > 0 Then
Local $iModnum = $aCall[4] / 4
Local $aTemp
For $i = 1 To $iModnum
$aTemp = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
If $aTemp[3] = $sModule Then
DllClose($PSAPI)
Return Ptr(DllStructGetData($Modules, 1, $i))
EndIf
Next
EndIfDllClose($PSAPI)
[/autoit] [autoit][/autoit] [autoit]
Return SetError(-1, 0, 0)EndFunc
[/autoit] [autoit][/autoit] [autoit]#endregion
[/autoit]Kompiliere Skript1.au3 und Skript2.au3 einfach und führe dann Skript1.exe aus.
Es funktioniert soweit schon!
Nur die korrekte Ausgabe des Strings von Skript1.exe in Skript2.exe will mir nicht gelingen.
Aber andersrum funktioniert das...Vielleicht kann ja hier einer weiterhelfen!
€dit:
Hab eine falsche Variable verwendet im Skript.
Funktioniert nun einwandfrei!Ich hoffe ich konnte weiterhelfen!
MfG. MG -
Zitat
Könnte man nicht einfach einen "Zeiger" wie bei C++ auf einen Speicherbereicht machen und den dann direkt verarbeiten. Vorher natürlich noch gucken, ob der Prozess schon läuft.
Das habe ich in Post #6 vorgeschlagen. Allerdings mit anderen Worten...
ZitatMan könnte es vielleicht auch über Objekte machen.
Und wie? Würde mich interessieren! (Ist nicht sarkastisch gemeint...)
€dit:
Hab ne simple Möglichkeit gefunden mit diesen "Zeigern".
Werde dazu ein Beispiel schreiben und dann hier hochladen!Mfg. MG
-
Ist doch simple:
"For" ist das Schlüsselwort.Dann folgt eine Variable worin wir die aktuelle anzahl der Schleifenrunden speichern:
For $VariableNun fehlt noch wie lange die Schleife laufen soll:
For $Variable = 1 To 10Zum schluss nur noch die Schleife abschließen:
For $Variable = $Variable = 1 To 10
NextNun wird diese Schleife genau 10 mal durchlaufen..
In $Variable wird immer die aktuelle Schleifenrunde gespeichert!Gibt es noch Fragen?
-
Hey! Ich mische mich auch mal wieder ein... :x
Du hast eigentlich nur folgende Möglichkeiten:1.: *.txt / *.ini (usw.) Files
Der einzigste Nachteil den ich hierbei sehe, der Anwender kann einfach die Datei verändern und dies würde zu Fehlern im Programm führen...
Aber ich glaube man kann diese auch Schreibgeschützt öffnen sodass eine Änderung ohne weiteres nicht mehr möglich ist.2. Registry
Es gibt einen bestimmten Schlüssel der extra für Anwendungen ist. Dort kann man Werte unbedenkt verändern, löschen oder hinzu fügen. Die einzigste Folge wäre dann: Die betroffenen Programme könnten bei veränderungen nicht mehr richtig laufen.3. IO-Stream
Eigentlich sehr sicher. Ich sehe da derzeitig keine Probleme... Ob du damit umgehen kannst ist eine andere Geschichte. Wenn du willst schreibe ich dir ein Skript bzw. Funktionen die das ganze verwalten. Dann hättest du nur noch 2 Funktionen. Und zwar eine Sende und eine Empfang Funktion...4. TCP / UDP
Eiegntlich auch sehr sicher. Siehe IO-Stream...5. RAM
Betroffene Werte einfach direkt im RAM ändern. Einfacher Datenaustausch... Naja, wenn man es kann
6. Zwischenspeicher
Auch hier können Werte vorrübergehend gespeichert werden. Der nachteil wäre dann, dass dieser dann nicht mehr wärend der Laufzeit besetzbar ist. Bzw. Bei veränderungen kann das Programm nicht mehr sicher laufen.7. Controls (danke autoBert)
Einfach mit dem Script eine nicht sichtbare GUI mit einem Input bzw. Edit Feld auslesen. Nachteile fallen mir spontan nicht ein...Mehr Ideen fallen mir nicht ein. Ist eigentlich auch nur eine Zusammenfassung...
Hoffe ich konnte helfen! :x -
Hö?
Ich denke eher weniger dass das Bild scharf bleibt wenn du dies mit dem Mausrad vergrößerst...
Ganz im Gegenteil: Es sollten nach und nach die einzelnen Pixel erkennbar sein.Dementsprechend auch in der GUI. Wenn man es vergrößert,
werden einfach die Pixel vergrößert dargestellt. -
Okay, ich habe jetzt die Möglichkeit genommen, einfach die Item Liste in einer einzelnen Variable zu speichern und diese einfach neu zu setzen:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Opt('MustDeclareVars', 1)
Opt('GUICloseOnESC', 0)Global $hGUI, $idCombo, $idButton
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $sItem = '|Item1|Item2|Item3'$hGUI = GUICreate('Make-Grafik', 120, 70)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$idCombo = GUICtrlCreateCombo('', 10, 10, 100, 20)
_Button()
$idButton = GUICtrlCreateButton('Reset', 10, 40, 100, 20)
GUICtrlSetOnEvent($idButton, '_Button')
GUISetOnEvent($GUI_EVENT_CLOSE, '_GUI_EVENT_CLOSE')
GUISetState()While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEndFunc _Button()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($idCombo, $sItem)
EndFuncFunc _GUI_EVENT_CLOSE()
[/autoit]
Exit
EndFunc -
Ja, in den Input Controls wird ja der Text eingegeben. Wie ich bereits sagte, verändert GUICtrlSetState() den Status und GUICtrlSetData() den Text. Dementsprechend brauchst du für die Input Controls die Funktion GUICtrlSetData().
Ich werde mal eben bischen rumspielen. Dann kann ich dir ne Antwort auf deine Combobox Frage geben.
-
GUICtrlSetData verändert den Text des Controls.
Was du suchst ist die Funktion GUICtrlSetState(). -
Zeile 50:
Welchen nutzen hat das, wenn du die Variable abrufst die du zuvor in Zeile 3 deklaiert hast?
Du veränderst nicht den Inhalt der Variable...In Zeile 48 (sprich Variable $aTest) wird dein Ergebnis gespeichert!
€dit:
Wenn du die Funktion "Chr()" verwendest und die ASCII Tabelle zu hilfe nimmst, kannst du das auch auf "nummern" prüfen... -
Zitat
Inoffizielle Alpha v3.3.9.5.X1
Inoffizielle Alpha v3.3.9.5.X2Oha, diese ganze Entwicklung ist an mir vorbei gelaufen. Und ich wunder mich immer über was für Features ihr in der SB geredet habt...
Ich gucke zwar immer auf der Website unter Downloads >> Beta aber habe diese noch nie dort gesehen. Darf ich mal nachfragen woher die Quellen stammen?
-
Zuerst einmal wäre die ganze UDF (wenn dies überhaupt ne UDF ist) ganz schön.
Ich habe nämlich keine Ahnung was die Inhalte der Funktionen:
_GetIconID()
_LoadIcon()
usw. Sind. Das erschwert das reproduzieren deines Problemes.Also:
Gib bitte alle nötigen Funktionen und auch wenn möglich ein kurzes(!) Skript mit was dein Problem veranschaulicht. -
Also wenn du nur die Daten in den Variablen ändern willst, dann arbeite mit der Pointer.au3.
So kannst du die Adresse im RAM ermitteln und den Wert direkt ansprechen und verändern.Wäre auch noch ne Idee!

-
Hey!
Dieses Problem wurde hier bereits schon besprochen.Es gab ein kleines Script dazu, was die Einstellung ausliest und dann relative Werte verwendet.
Ich suche mal das entsprechende Thread...
€dit:
Ich hab's gefunden: [ gelöst ] GUI anpassen -
Kann es sein, dass das Script von Mat nicht funktioniert?
Bei mir wird ein Error entgegen geschmissen! -
Lad doch mal bitte so ein Bild mit einer Schrift hoch.
Achja: Wofür soll denn sowas gut sein? -
Das freut mich!

Dann tu mir doch bitte den gefallen, und klicke in deinen aller ersten Post auf [Bearbeiten].
Wenn dann die Seite geladen ist, schaust du weiter oben auf der Seite.
Dort müsste irgendwo "Präfix" stehen. Diesen stellst du auf [gelöst].
Danach klickst du auf [Absenden].Das wäre sehr gut, damit das ganze von außen sichtbar ist, dass dieser Thread gelöst wurde.