anythinging 发表于 2021-8-24 12:26:08

【已解决】关于共享变量的问题

本帖最后由 anythinging 于 2021-8-24 16:55 编辑

我想在一个程序中设置一个变量,另一个程序运行时能够读取到,但是未能实现,在此请教2个程序如何共用一个变量?
3个au3文件如下:
read.au3无法读取write.au3设置的$share的值

global.au3
Global $share

write.au3
#include <global.au3>
$share = 6

read.au3
#include <global.au3>
msgbox(0,'',$share)

afan 发表于 2021-8-24 12:51:07

进程间的数据要么通过通讯获取,要么直接读。像你这种可以直接读。
GUICreate('读取共享变量', 300, 200, -1, -1)
$bt = GUICtrlCreateButton('读取', 30, 60, 50, 20)
GUISetState()

While 1
        Switch GUIGetMsg()
                Case -3
                        ExitLoop
                Case $bt
                        $Share = ControlGetText('写共享变量', '', 'Edit1')
                        MsgBox('', '', $Share, 1)
        EndSwitch
WEnd

afan 发表于 2021-8-24 12:32:01

read.au3 应该 #include <write.au3>,否则根本执行不到 write.au3
#include <write.au3>
msgbox(0,'',$share)

另外,这不是共享变量,这是全局变量

anythinging 发表于 2021-8-24 12:42:36

本帖最后由 anythinging 于 2021-8-24 12:45 编辑

afan 发表于 2021-8-24 12:32
read.au3 应该 #include ,否则根本执行不到 write.au3
#include
msgbox(0,'',$share)

请教write.au3写的变量能否在运行时,可以让read.au3读取到?我想实现的是write.exe始终运行,read.exe运行时可以读取到write的一个变量。(目前可以通过写入文件再读取来实现,想请教高级点的方法,比如是否可以写入内存再读取)
------------write.au3----------------------
GUICreate('写共享变量',300,200,-1,-1)
$input = GUICtrlCreateInput('',30,30,50,20)
$bt = GUICtrlCreateButton('设置',30,60,50,20)
GUISetState()
While 1
      Switch GUIGetMsg()
                Case -3
                        ExitLoop
                Case $bt
                        $t = GUICtrlRead($input)
                        Global $Share = $t
      EndSwitch
WEnd



------------read.au3----------------------
#include <global.au3>
#include <write.au3>
GUICreate('读取共享变量',300,200,-1,-1)
$input = GUICtrlCreateInput('',30,30,50,20)
$bt = GUICtrlCreateButton('读取',30,60,50,20)
GUISetState()

While 1
      Switch GUIGetMsg()
                Case -3
                        ExitLoop
                Case $bt
                        MsgBox('','',$Share,1)
      EndSwitch
WEnd

anythinging 发表于 2021-8-24 12:53:39

感谢解答!看来我需要的是通过通讯来获取,求指点或示例。

afan 发表于 2021-8-24 13:43:29

方法太多。比如简单的可以通过文件或注册表作为中介读写;父子进程的可以通过环境变量;通过TCP;通过内存;通过系统消息……
比如系统消息方式,可以用 GUIRegisterMsg 注册 WM_COPYDATA 消息。
具体可自行搜索关键字如“进程”,按需选择适合自己需求的方式

anythinging 发表于 2021-8-24 16:54:09

afan 发表于 2021-8-24 13:43
方法太多。比如简单的可以通过文件或注册表作为中介读写;父子进程的可以通过环境变量;通过TCP;通过内存 ...

感谢指点,我学习下
页: [1]
查看完整版本: 【已解决】关于共享变量的问题