找回密码
 加入
搜索
查看: 2730|回复: 7

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

  [复制链接]
发表于 2010-1-12 21:31:31 | 显示全部楼层 |阅读模式
如题,两个脚本程序间变量可以互相赋值吗?
假如一个脚本程序触发另一个程序执行某个函数。怎么弄
发表于 2010-1-12 22:55:50 | 显示全部楼层
用中间文件temp.txt
发表于 2010-1-12 23:00:15 | 显示全部楼层
可以用API实现进程之间的通信。
发表于 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[1000]')
        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[1000]', $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[1000]')
        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[1000]', $a2)
        $a4 = DllStructGetData($a3, 1)

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

评分

参与人数 3金钱 +45 贡献 +2 收起 理由
gapkiller + 10 厉害
afan + 25 + 2
顽固不化 + 10 谢谢帮忙

查看全部评分

发表于 2010-1-13 09:56:53 | 显示全部楼层
学习了
发表于 2010-1-13 10:54:04 | 显示全部楼层
学习了,谢谢!!
发表于 2010-1-13 10:56:41 | 显示全部楼层
使用内存读取 方法可取 涉及到点汇编
发表于 2010-1-13 17:55:28 | 显示全部楼层
本帖最后由 pusofalse 于 2010-1-13 18:06 编辑

奇怪啊,4#的代码中,DllStructCreate只是在自己的进程空间中分配了一块内存区域,它并没有用VirtualAllocEx远程分配内存啊,为何目标进程中$ilParam仍是一个合法指针?
---------------------
明白了,原来跟发送的消息有关,0x4A - WM_COPYDATA,会将自身中的数据拷贝到目标进程中。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 23:26 , Processed in 0.086373 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表