1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Yjuq

Beiträge von Yjuq

  • Ftp Updater

    • Yjuq
    • 11. März 2013 um 19:12

    Nein!!! BITTE!!!
    Bleib hier im Thread...
    Schreib einfach eine neue ausführliche Beschreibung hier unten als Beitrag hinein...

  • int -> char

    • Yjuq
    • 11. März 2013 um 18:22

    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 aufrufen

    Mittlerweile 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]'], _
    $tStruct[2]

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

    $tStruct[0] = DllStructCreate($tagStruct[0])
    DllStructSetData($tStruct[0], 1, 0x656b614d) ; ekaM
    DllStructSetData($tStruct[0], 2, 0x6172472d) ; arG-
    DllStructSetData($tStruct[0], 3, 0x006b6966) ; kif

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

    $tStruct[1] = DllStructCreate($tagStruct[1], DllStructGetPtr($tStruct[0]))
    ConsoleWrite(@CRLF & DllStructGetData($tStruct[1], 1) & @CRLF & @CRLF)

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

    $tagStruct = ''
    $tStruct = ''

    [/autoit]

    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!

  • Nach (DLL-)Funktion -> Exit

    • Yjuq
    • 11. März 2013 um 17:37

    Es so meinen:
    [ gelöst ] Irrlicht.dll - DLL Call

  • exe weiter laufen lassen und erneut mit Parametern aufrufen

    • Yjuq
    • 11. März 2013 um 17:00

    Kannste vergessen :x
    Das funktioniert bei mir zmd. Nicht...
    Deswegen bin ich ja auch den "umständlichen" Weg gegangen...

  • exe weiter laufen lassen und erneut mit Parametern aufrufen

    • Yjuq
    • 11. März 2013 um 16:40

    Okey, besser bekomme ich das nicht hin...

    Skript1: (kompilieren)

    Spoiler anzeigen
    [autoit]

    Global $tagStruct, $tStruct, $sSave
    $tagStruct = 'int;' & _ ; 4 Byte
    'char[5]' ; 8 Byte

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

    $tStruct = DllStructCreate($tagStruct)
    DllStructSetData($tStruct, 1, 777)
    DllStructSetData($tStruct, 2, 'Hallo')
    RunWait('Skript2.exe ' & @AutoItPID & ' ' & DllStructGetPtr($tStruct))

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

    $sSave = '1.: ' & DllStructGetData($tStruct, 1) & @CRLF & _ ; 333
    '2.: ' & DllStructGetData($tStruct, 2) ; Welt!

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

    MsgBox(262144, 'Output Skript1.exe', $sSave)

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

    $tagStruct = ''
    $tStruct = ''
    $sSave = ''

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

    Exit

    [/autoit]

    Skript2: (kompilieren)

    Spoiler anzeigen
    [autoit]

    #include <Pointer.au3>

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

    Global $tagStruct1, $tagStruct2, $hOpen, $tStruct1, $tStruct2, $sSave
    $tagStruct1 = 'int; int'
    $tagStruct2 = 'char[5]'

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

    $hOpen = _MemoryOpen($CmdLine[1])

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

    $tStruct1 = DllStructCreate($tagStruct1)
    DllStructSetData($tStruct1, 1, _MemoryRead($CmdLine[2] + 4, $hOpen))
    DllStructSetData($tStruct1, 2, _MemoryRead($CmdLine[2] + 8, $hOpen))

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

    $tStruct2 = DllStructCreate($tagStruct2, DllStructGetPtr($tStruct1))

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

    $sSave = '1.: ' & _MemoryRead($CmdLine[2], $hOpen) & @CRLF & _ ; 777
    '2.: ' & DllStructGetData($tStruct2, 1) ; Hallo

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

    MsgBox(262144, 'Output Skript2.exe', $sSave)

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

    _MemoryWrite($CmdLine[2], $hOpen, 333)
    _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)

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

    $tagStruct1 = ''
    $tagStruct2 = ''
    $hOpen = ''
    $tStruct1 = ''
    $tStruct2 = ''
    $sSave = ''

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

    Exit

    [/autoit]

    Pointer.au3:

    Spoiler anzeigen
    [autoit]

    #include-once
    #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)

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

    If Not ProcessExists($iv_Pid) Then
    SetError(1)
    Return 0
    EndIf

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

    Local $ah_Handle[2] = [DllOpen('kernel32.dll')]

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

    If @Error Then
    SetError(2)
    Return 0
    EndIf

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

    Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)

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

    If @Error Then
    DllClose($ah_Handle[0])
    SetError(3)
    Return 0
    EndIf

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

    $ah_Handle[1] = $av_OpenProcess[0]

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

    Return $ah_Handle

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

    EndFunc

    [/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')

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

    If Not IsArray($ah_Handle) Then
    SetError(1)
    Return 0
    EndIf

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

    Local $v_Buffer = DllStructCreate($sv_Type)

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

    If @Error Then
    SetError(@Error + 1)
    Return 0
    EndIf

    [/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', '')

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

    If Not @Error Then
    Local $v_Value = DllStructGetData($v_Buffer, 1)
    Return $v_Value
    Else
    SetError(6)
    Return 0
    EndIf

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

    EndFunc

    [/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')

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

    If Not IsArray($ah_Handle) Then
    SetError(1)
    Return 0
    EndIf

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

    Local $v_Buffer = DllStructCreate($sv_Type)

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

    If @Error Then
    SetError(@Error + 1)
    Return 0
    Else
    DllStructSetData($v_Buffer, 1, $v_Data)
    If @Error Then
    SetError(6)
    Return 0
    EndIf
    EndIf

    [/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', '')

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

    If Not @Error Then
    Return 1
    Else
    SetError(7)
    Return 0
    EndIf

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

    EndFunc

    [/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)

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

    If Not IsArray($ah_Handle) Then
    SetError(1)
    Return 0
    EndIf

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

    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

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

    EndFunc

    [/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')

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

    If IsArray($av_Offset) Then
    If IsArray($ah_Handle) Then
    Local $iv_PointerCount = UBound($av_Offset) - 1
    Else
    SetError(2)
    Return 0
    EndIf
    Else
    SetError(1)
    Return 0
    EndIf

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

    Local $iv_Data[2], $i
    Local $v_Buffer = DllStructCreate('dword')

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

    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 + 2)
    Return 0
    EndIf

    [/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

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

    $iv_Data[1] = DllStructGetData($v_Buffer, 1)

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

    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(7)
    Return 0
    EndIf

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

    $iv_Data[1] = DllStructGetData($v_Buffer, 1)

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

    Else
    $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

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

    $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]

    ;=================================================================================================
    ; 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')

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

    If IsArray($av_Offset) Then
    If IsArray($ah_Handle) Then
    Local $iv_PointerCount = UBound($av_Offset) - 1
    Else
    SetError(2)
    Return 0
    EndIf
    Else
    SetError(1)
    Return 0
    EndIf

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

    Local $iv_StructData, $i
    Local $v_Buffer = DllStructCreate('dword')

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

    For $i = 0 to $iv_PointerCount
    If $i = $iv_PointerCount Then
    $v_Buffer = DllStructCreate($sv_Type)
    If @Error Then
    SetError(@Error + 3)
    Return 0
    EndIf

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

    DllStructSetData($v_Buffer, 1, $v_Data)
    If @Error Then
    SetError(8)
    Return 0
    EndIf

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

    $iv_Address = '0x' & hex($iv_StructData + $av_Offset[$i])
    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

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

    $iv_StructData = DllStructGetData($v_Buffer, 1)

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

    Else
    $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

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

    $iv_StructData = DllStructGetData($v_Buffer, 1)

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

    EndIf
    Next

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

    EndFunc

    [/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
    ;==================================================================================

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

    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*",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]

    ;===================================================================================================

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

    ; Function........: _MemoryGetBaseAddress($ah_Handle, $iHD)
    ;
    ; 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.
    ;===================================================================================================

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

    Func _MemoryGetBaseAddress($ah_Handle, $iHexDec = 0)

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

    Local $iv_Address = 0x00100000
    Local $v_Buffer = DllStructCreate('dword;dword;dword;dword;dword;dword;dword')
    Local $vData
    Local $vType

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

    If Not IsArray($ah_Handle) Then
    SetError(1)
    Return 0
    EndIf

    [/autoit] [autoit][/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))

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

    If Not @Error Then

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

    $vData = Hex(DllStructGetData($v_Buffer, 2))
    $vType = Hex(DllStructGetData($v_Buffer, 3))

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

    While $vType <> "00000080"
    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 += 65536

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

    WEnd

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

    If $vType = "00000080" Then
    SetError(0)
    If $iHexDec = 1 Then
    Return Dec($vData)
    Else
    Return $vData
    EndIf

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

    Else
    SetError(2)
    Return 0
    EndIf

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

    Else
    SetError(3)
    Return 0
    EndIf

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

    EndFunc ;==>_MemoryGetBaseAddress

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

    Func _MemoryModuleGetBaseAddress($iPID, $sModule)
    If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)

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

    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
    Local $hProcess
    Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE

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

    If $iPID > 0 Then
    Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
    If $hProcess[0] Then
    $hProcess = $hProcess[0]
    EndIf
    EndIf

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

    ;EnumProcessModules
    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
    EndIf

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

    DllClose($PSAPI)
    Return SetError(-1, 0, 0)

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

    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! :P

    €dit:
    Hab eine falsche Variable verwendet im Skript. :whistling:
    Funktioniert nun einwandfrei!

    Ich hoffe ich konnte weiterhelfen!
    MfG. MG

  • exe weiter laufen lassen und erneut mit Parametern aufrufen

    • Yjuq
    • 11. März 2013 um 15:29
    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...

    Zitat

    Man 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

  • x mal wiederholen

    • Yjuq
    • 11. März 2013 um 14:42

    Ist doch simple:
    "For" ist das Schlüsselwort.

    Dann folgt eine Variable worin wir die aktuelle anzahl der Schleifenrunden speichern:
    For $Variable

    Nun fehlt noch wie lange die Schleife laufen soll:
    For $Variable = 1 To 10

    Zum schluss nur noch die Schleife abschließen:
    For $Variable = $Variable = 1 To 10
    Next

    Nun wird diese Schleife genau 10 mal durchlaufen..
    In $Variable wird immer die aktuelle Schleifenrunde gespeichert!

    Gibt es noch Fragen?

  • exe weiter laufen lassen und erneut mit Parametern aufrufen

    • Yjuq
    • 11. März 2013 um 13:24

    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

  • _gdiplus_graphicsdrawimagerect / .png vergrössern unscharf

    • Yjuq
    • 8. März 2013 um 14:26

    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.

  • Controls leeren klappt nicht

    • Yjuq
    • 8. März 2013 um 13:35

    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)
    Opt('MustDeclareVars', 1)
    Opt('GUICloseOnESC', 0)

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

    Global $hGUI, $idCombo, $idButton
    Global $sItem = '|Item1|Item2|Item3'

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

    $hGUI = GUICreate('Make-Grafik', 120, 70)
    $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()

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

    While Sleep(1000)
    WEnd

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

    Func _Button()
    GUICtrlSetData($idCombo, $sItem)
    EndFunc

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

    Func _GUI_EVENT_CLOSE()
    Exit
    EndFunc

    [/autoit]
  • Controls leeren klappt nicht

    • Yjuq
    • 8. März 2013 um 13:19

    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.

  • Controls leeren klappt nicht

    • Yjuq
    • 8. März 2013 um 13:07

    GUICtrlSetData verändert den Text des Controls.
    Was du suchst ist die Funktion GUICtrlSetState().

  • Sonderzeichen und Umlaute ersetzen

    • Yjuq
    • 6. März 2013 um 22:48

    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...

  • AutoIt Versions-Archiv und Diskussionsthread (3.3.8.1 bis 3.3.10.2, Stand 30.12.13)

    • Yjuq
    • 6. März 2013 um 19:12
    Zitat

    Inoffizielle Alpha v3.3.9.5.X1
    Inoffizielle Alpha v3.3.9.5.X2

    Oha, 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?

  • Problem mit Modernmenu / GUISetState() - funktion wirft mich auf den desktop

    • Yjuq
    • 5. März 2013 um 15:58

    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.

  • exe weiter laufen lassen und erneut mit Parametern aufrufen

    • Yjuq
    • 5. März 2013 um 15:38

    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! :P

  • Frage zu prozentualer Textvergrößerung des Windows Desktops

    • Yjuq
    • 4. März 2013 um 14:38

    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

  • [C“ 2013] The winners!

    • Yjuq
    • 3. März 2013 um 16:58

    Kann es sein, dass das Script von Mat nicht funktioniert?
    Bei mir wird ein Error entgegen geschmissen!

  • Text aus Bild auslesen - Kein Captchacode !!!

    • Yjuq
    • 28. Februar 2013 um 17:57

    Lad doch mal bitte so ein Bild mit einer Schrift hoch.
    Achja: Wofür soll denn sowas gut sein?

  • Mehrer Mauskoordinaten ermitteln, speichern und an einer anderen Stelle verwenden

    • Yjuq
    • 24. Februar 2013 um 19:45

    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.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™