silentteamo 发表于 2014-11-20 14:09:24

【已解决】ini配置文件修改后,程序不重启读取最新值

本帖最后由 silentteamo 于 2014-11-21 22:45 编辑

事情是这样的,就是运行脚本后,会修改ini文件,但需要重启脚本才能重新读入。
想请教的问题是,如何可以不重启程序,可以重新加载配置文件中的最新值。 #include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=


$Form1 = GUICreate("Form1", 615, 104, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")

$Button1 = GUICtrlCreateButton(IniRead(@ScriptDir & "\test.ini","test","test1",""), 520, 32, 75, 25)
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
        Sleep(100)
WEnd

Func Button1Click()
        $a = InputBox('','','')
        IniWrite(@ScriptDir & "\test.ini","test","test1",$a)
EndFunc
Func Form1Close()
        Exit
EndFunc
配置文件:

文件名:test.ini


test1 =123


-------------
点击界面中的123按钮,弹出input输入框,输入新的值后,会写到ini文件中,界面中如何实现不重启的情况下,重新读取ini最近的写入值。



补充:回复 7# user3000

3k哥,给我说的是iniread一遍配置文件。这样的确可以读,我在补充一下我的意思吧。

实际中,是client.au3和config.au3这两个脚本。一个配置文件T_config.ini   

client.au3 这个脚本运行后会读取 T_config.ini文件内的内容,该脚本中添加了一个按钮,点击后会弹出config.au3这个脚本窗口。config.au3这个窗口呢是对client.au3这个程序的配置。因为修改后,配置文件是被修改了。但是client.au3因为没有关闭,读的还是之前的配置内容。

我这个要求是不是太过分了???现在就是想配置窗口修改配置文件后,cient.au3这个脚本如何不重启,就可以使用新的修改值。

(当然也可以一个脚本内,写俩窗口,不用分开。各位哥,给个思路啥的,小弟跪谢。)



解决方案:各位哥给的方法,虽然能达到目的,可能还不是我想要的,最后的解决方式还是俩脚本,脚本中生成外置的vbs和bat文件,使用RUN运行vbs杀掉并重启加载。显然先凑合着吧。多谢各位。

haopp1 发表于 2014-11-20 15:25:04

加一个变量 dim

Huiseyu 发表于 2014-11-20 16:27:27

这个必须顶起。我的也是要重启脚本

baduxiyang 发表于 2014-11-20 17:00:51

我也遇到这个情况,那要在while里开刀了

silentteamo 发表于 2014-11-20 17:45:43

回复 2# haopp1


这位哥,能详细说下么??

silentteamo 发表于 2014-11-20 17:48:37

回复 2# haopp1


这位哥,你的意思是搞个全局变量,在写ini的时候写进去了,用的时候接着用当前的写入值,是这么个意思么?

user3000 发表于 2014-11-20 17:49:23

回复 1# silentteamo
怎么可能读不了??#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 104, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Button1 = GUICtrlCreateButton(IniRead(@ScriptDir & "\test.ini","test","test1","default"), 520, 32, 75, 25)
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
      Sleep(100)
WEnd
Func Button1Click()
      $a = InputBox('','','')
                If Not @error Then
         IniWrite(@ScriptDir & "\test.ini","test","test1",$a)
                   ;Sleep(100)
                   GUICtrlSetData($Button1, IniRead(@ScriptDir & "\test.ini","test","test1","default"))
                EndIf
EndFunc
Func Form1Close()
      Exit
EndFunc

silentteamo 发表于 2014-11-20 20:43:22

本帖最后由 silentteamo 于 2014-11-20 20:57 编辑

回复 7# user3000


   哥,你这个的确是可以搞,我其实是想问,就是想有没有那种重新reload的方法,上面写的只是个demo,实际中配置项很多,一个一个iniread比较麻烦呀。原来我想让程序自杀的形式把自己干掉,在启动重新读一遍。哥,我说的这个重新读ini文件还有更优的方案没?

3k哥,我又补充了我的问题,烦请移目到发帖框查看。谢谢哥了。

user3000 发表于 2014-11-20 21:22:55

回复 8# silentteamo

如果嫌一个一个读比较麻烦,那当然做成同一个脚本.
用数组储存数据;这样可以简化代码.

tvzml 发表于 2014-11-21 20:43:37

加入 一句即可~~~~

silentteamo 发表于 2014-11-21 22:39:49

回复 10# tvzml


    哥,我懂你了。我谢谢你。

f4李文杨 发表于 2014-11-22 00:01:16

可用 Fucn 调用重新读取新值!再调用就是最新值了!

haopp1 发表于 2014-11-25 22:44:09

回复 6# silentteamo


    没错。就是这样 或者,你是用的时候在读取一次

Huiseyu 发表于 2014-11-26 22:40:15

效果太好了,谢谢3000.正在努力学习中

nqawen 发表于 2014-11-27 19:04:16

来学习了,
页: [1] 2
查看完整版本: 【已解决】ini配置文件修改后,程序不重启读取最新值