manlty 发表于 2010-1-12 21:31:31

两个脚本程序间变量可以互相赋值吗

如题,两个脚本程序间变量可以互相赋值吗?
假如一个脚本程序触发另一个程序执行某个函数。怎么弄

顽固不化 发表于 2010-1-12 22:55:50

用中间文件temp.txt

C.L 发表于 2010-1-12 23:00:15

可以用API实现进程之间的通信。

C.L 发表于 2010-1-12 23:15:28

上一段代码吧,有兴趣的话可以测试一下:
发送端:
#include <winapi.au3>
GUICreate('Send')
GUIRegisterMsg(0x4A, '_Rec')
_Send()

While 1
        sleep(1000)
wend

Func _Send()
        $hwnd = WinGetHandle('Rec')
        $message = '发送端的信息,发送OK'

        $struct = DllStructCreate('wchar var1')
        DllStructSetData($struct, 1, $message)
        $pStruct = DllStructGetPtr($struct)

        $struct2 = DllStructCreate('dword;dword;ptr')
        DllStructSetData($struct2, 1, 0)
        DllStructSetData($struct2, 2, 1000)
        DllStructSetData($struct2, 3, $pStruct)
        $pStruct2 = DllStructGetPtr($struct2)

        _SendMessage($hwnd, 0x4A, 0, $pStruct2)

Endfunc   ;==>_Send


Func _Rec($hwnd, $iMsg, $iwParam, $ilParam)

        $a1 = DllStructCreate('dword var1;dword var2;ptr var3', $ilParam)
        $a2 = DllStructGetData($a1, 3)
        $a3 = DllStructCreate('wchar var1', $a2)
        $a4 = DllStructGetData($a3, 1)

        MsgBox(0, '发送端收到', $a4)
EndFunc   ;==>_Rec
接收端:
#include <winapi.au3>

GUICreate('Rec')
GUIRegisterMsg(0x4A, '_Rec')
sleep(3000)
_send()
While 1
        Sleep(1000)
WEnd

Func _send()
        $hWnd = WinGetHandle('Send')
        $message = '接收端的信息,发送ok'
        $struct = DllStructCreate('wchar var1')
        DllStructSetData($struct, 1, $message)
        $pStruct = DllStructGetPtr($struct)

        $struct2 = DllStructCreate('dword;dword;ptr')
        DllStructSetData($struct2, 1, 0)
        DllStructSetData($struct2, 2, 1000)
        DllStructSetData($struct2, 3, $pStruct)
        $pStruct2 = DllStructGetPtr($struct2)

        _SendMessage($hWnd, 0x4A, 0, $pStruct2)

Endfunc   ;==>_send

Func _Rec($hWnd, $iMsg, $iwParam, $ilParam)

        $a1 = DllStructCreate('dword var1;dword var2;ptr var3', $ilParam)
        $a2 = DllStructGetData($a1, 3)
        $a3 = DllStructCreate('wchar var1', $a2)
        $a4 = DllStructGetData($a3, 1)

        MsgBox(0, '接收端收到', $a4)
EndFunc   ;==>_Rec

gapkiller 发表于 2010-1-13 09:56:53

学习了:face (16):

wgzhi 发表于 2010-1-13 10:54:04

学习了,谢谢!!

jhwl 发表于 2010-1-13 10:56:41

使用内存读取 方法可取 涉及到点汇编

pusofalse 发表于 2010-1-13 17:55:28

本帖最后由 pusofalse 于 2010-1-13 18:06 编辑

奇怪啊,4#的代码中,DllStructCreate只是在自己的进程空间中分配了一块内存区域,它并没有用VirtualAllocEx远程分配内存啊,为何目标进程中$ilParam仍是一个合法指针?
---------------------
明白了,原来跟发送的消息有关,0x4A - WM_COPYDATA,会将自身中的数据拷贝到目标进程中。
页: [1]
查看完整版本: 两个脚本程序间变量可以互相赋值吗