2 programme per Memory miteinander kommunizieren lassen

  • Hi
    Ich weiß im diesem und im englischen Forum sind schon einige Themen hierzu
    aber alles was ich gefunden habe hat nicht funktioniert wenn ich es für meine Zwecke geändert habe.

    Also ich habe 2 Programme. Das eine soll etwas in den Speicher schreiben und das andere soll das auslesen.

    Writer(Test.exe):

    Spoiler anzeigen
    [autoit]


    #include <NomadMemory.au3>

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

    $pidmarray = ProcessList("Test.exe")
    $pidm = $pidmarray[1] [1]

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

    $infom = _MemoryOpen($pidm)
    _MemoryWrite(0x0100579C, $infom, "text")

    _MemoryClose($infom)
    While 1
    Sleep(30)
    Wend

    [/autoit]


    Reader:

    Spoiler anzeigen
    [autoit]


    #include"NomadMemory.au3"
    $iv_InheritHandle = 1
    $iv_Pid = Run("C:\Dokumente und Einstellungen\Developeing\Desktop\Test.exe","C:\Dokumente und Einstellungen\Developeing\Desktop")
    $pidm1 = ProcessList("Test.exe")
    $iv_Pid = $pidm1[1] [1]
    Sleep(3000)
    While 1
    $err =_MemoryOpen($iv_Pid, 0x1F0FFF, $iv_InheritHandle = 1)
    $Mem = _MemoryRead(0x0100579C, $err)
    _MemoryClose($err)
    MsgBox(0,"",$Mem)
    WEnd

    [/autoit]

    Bei mir komt da folgendes Ergebnis: 17039361.
    Was mache ich da falsch?

  • EnvSet usw.:
    1. Envupdate dauert lange
    2. ich kann den Variablenwert irgendwie nicht ändern

  • Benutz doch Pipes und Adlib
    Edit: Damit meinte ich das du eine Pipe zwischen den Prozessen erstellst (Siehe auch Wikipedia) und dann per AdlibEnable und einer Funktion immer den Inhalt abfragst. Aber wenns nur wegen Interesse bzw. Lerneffekt ist...:rolleyes:

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    2 Mal editiert, zuletzt von Fast2 (2. September 2008 um 12:02)

  • Ich verstehe nicht wie mir diese Befehle helfen.
    Außerdem geht es ja auch darum, was zu lernen und das mit dem memory schreiben und auslesen interessiert mich halt.
    Trotzdem danke

  • [autoit]

    ;; http://www.autoitscript.com/forum/index.ph…41&#entry681941

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

    #Include <GUIConstantsEx.au3>

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

    Opt('WinTitleMatchMode', 3)

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

    global const $TITLE_SENDER = '#Sender'
    global const $TITLE_RECEIVER = '#Reseiver'
    global const $WM_COPYDATA = 0x004A

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

    global $sMsg, $Dummy, $Flag = 0

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    if WinExists($TITLE_RECEIVER) then
    if WinExists($TITLE_SENDER) then
    exit
    endif
    _Sender()
    else
    _Receiver()
    endif

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    func _Sender()

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

    local $Input, $Button, $ID

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

    GUICreate($TITLE_SENDER, 400, 100)
    $Input = GUICtrlCreateinput('', 20, 20, 360, 20)
    $Button = GUICtrlCreateButton('Send', 165, 60, 70, 23)
    $Dummy = GUICtrlCreateDummy()
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')
    GUISetState()

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

    while 1
    $ID = GUIGetMsg()
    switch $ID
    case 0
    continueloop
    case $GUI_EVENT_CLOSE
    _SendData(WinGetHandle($TITLE_RECEIVER), '@exit')
    exitloop
    case $Button
    $sMsg = GUICtrlRead($Input)
    $hWnd = WinGetHandle($TITLE_RECEIVER)
    if (not @error) and ($sMsg > '') then
    if _SendData($hWnd, $sMsg) then
    GUICtrlSetState($Button, $GUI_DISABLE)
    endif
    endif
    case $Dummy
    GUICtrlSetState($Button, $GUI_ENABLE)
    endswitch
    wend

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

    GUIDelete()
    endfunc

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    func _Receiver()
    GUICreate($TITLE_RECEIVER)
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')

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

    while 1
    Sleep(10)
    if $Flag then
    if $sMsg = '@exit' then
    exitloop
    endif
    $Flag = 0
    _DoSomething($sMsg)
    _SendData(WinGetHandle($TITLE_SENDER), '')
    endif
    wend

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

    GUIDelete()
    endfunc; _Receiver

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    func _DoSomething($sData)
    MsgBox(0, 'Message', $sData)
    endfunc; _DoSomething

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    func _SendData($hWnd, $sData)

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

    local $tCOPYDATA, $tMsg

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

    $tMsg = DllStructCreate('char[' & StringLen($sData) + 1 & ']')
    DllStructSetData($tMsg, 1, $sData)
    $tCOPYDATA = DllStructCreate('dword;dword;ptr')
    DllStructSetData($tCOPYDATA, 2, StringLen($sData) + 1)
    DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
    $Ret = DllCall('user32.dll', 'lparam', 'SendMessage', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
    if (@error) or ($Ret[0] = -1) then
    return 0
    endif
    return 1
    endfunc; _SendData

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)

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

    local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
    local $tMsg = DllStructCreate('char[' & DllStructGetData($tCOPYDATA, 2) & ']', DllStructGetData($tCOPYDATA, 3))

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

    $sMsg = DllStructGetData($tMsg, 1)

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

    ; For Sender
    GUICtrlSendToDummy($Dummy)

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

    ; For Receiver
    $Flag = 1

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

    return 0
    endfunc; _WM_COPYDATA

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    [/autoit]

    ich find's einfach nur GEIL !!