已解决 如何实现控件参数的 简易修改
本帖最后由 itzyx 于 2020-9-4 21:45 编辑MouseClick("left",154,43,1)
sleep(500)
MouseClick("left",184,68,1)
sleep(1000)
WinWaitActive("物品参数设置")
sleep(500)
ControlCommand("物品参数设置","","ComboBox1","SetCurrentSelection", "0")
sleep(500)
ControlClick("物品参数设置","","Button10","",1)
sleep(500)
ControlSetText("物品参数设置","","Edit1",2000)
sleep(500)
ControlSetText("物品参数设置","","Edit4",1900)
sleep(500)
ControlSetText("物品参数设置","","Edit6",800)
sleep(500)
ControlSetText("物品参数设置","","Edit8",600)
sleep(500)
ControlCommand("物品参数设置","","ComboBox5","SetCurrentSelection", "2")
sleep(500)
ControlSetText("物品参数设置","","Edit10",500)
ControlClick("物品参数设置","","Button1","",1)
sleep(2000)
各位大佬,这个代码里面的 Edit 参数是需要修改的,总共要修改四五组参数,我可以实现这个功能,但是每次都要再写一段代码,然后只修改其中的Edit参数,这样整个代码显得特别冗长。 所以 各位大佬有没有简单一点的办法实现这个控件参数修改的功能,如果能通过配置文件,只修改配置文件的参数,来实现软件里面的控件读取,替换就更好了, 万分感谢! 因为这个Edit控件参数, 严格上讲是没有逻辑关系的,所以每次再写一段代码,就显得特别头疼 提供一个思路:haijie1223大神的帖子代码,巧用数组:
https://www.autoitx.com/forum.php?mod=viewthread&tid=72083&_dsign=4ae3aaa6 這樣說明應該沒啥人可以聽得懂..........是不是應該在 你的程式裡面 重複 你說的重複的部分
這樣大家可以看得懂以外還可以協助你精簡 你的程式 才對吧 kk_lee69 发表于 2020-9-2 22:01
這樣說明應該沒啥人可以聽得懂..........是不是應該在 你的程式裡面 重複 你說的重複的部分
這樣大家 ...
是我的错,没有表达清楚,我说具体点,意思就是代码里面 我想通过 ControlSetText 这个命令,来填写控件 类别名为EDIT 编辑框里面的参数, 但是首先这个类别名不是统一的(有Edit1,4,6,8),其次这个输入的参数也不是统一的(Edit1 可以等于2000,1000,500等),因为控件比较多,参数比较多,如果我想实现一套自动化程序, 用我的方法需要写很多类似,重复的代码,所以请教各位大佬 能不能精简一下,或者用更好的方法实现 。比如参数可以自动修改; 读取,替换,写入配置文件的方法等等。 itzyx 发表于 2020-9-2 23:08
是我的错,没有表达清楚,我说具体点,意思就是代码里面 我想通过 ControlSetText 这个命令,来填写控件...
用我的方法需要写很多类似,重复的代码,所以请教各位大佬 能不能精简一下
那就先提供 重覆代碼的 程式 範例吧 kk_lee69 发表于 2020-9-3 01:43
用我的方法需要写很多类似,重复的代码,所以请教各位大佬 能不能精简一下
那就先提供 重覆代碼的 程 ...
大佬,我想了一天,还没搞懂您的意思 ,实在无奈,我这种小白确实比较菜,还望您能够指定一二,必定虚心学习 。 重复的代码,就是我上面写的代码,这只是其中一段,总共有四段差不多一样的代码,只是参数变化了一下,其他的命令都没变 。至于 您说的程式 范例,难倒我了啊 将要改变的写入xxx.ini文件:
[测试]
Edit1=2000
Edit4=1900
Edit6=800
Edit8=600
再将脚本中的相关代码修改,如将
ControlSetText("物品参数设置","","Edit1", 2000)
改为
ControlSetText("物品参数设置","","Edit1", IniRead('xxx.ini', '测试', 'Edit1', 'err'))
ControlSetText这些动作不需要等待,没必要设置 Sleep 的…… itzyx 发表于 2020-9-4 00:39
大佬,我想了一天,还没搞懂您的意思 ,实在无奈,我这种小白确实比较菜,还望您能够指定一二,必定虚心 ...
既然有四段 為何不把四段 全部列出............
其他想幫助你的 就會從你列出的 四段 去看出規則..............
會幫你簡化.................
你不列出...........豈不是要幫你的 還得 去理解你的意思 想法猜想 是怎樣的四段 怎麼樣的重複方式跟怎樣的小變化?? 本帖最后由 itzyx 于 2020-9-4 08:41 编辑
kk_lee69 发表于 2020-9-4 01:26
既然有四段 為何不把四段 全部列出............
其他想幫助你的 就會從你列出的 四段 去看出規則..... ...
嗯嗯,是我疏忽了,害怕列出来太长,没什么用,下次会多留意的
MouseClick("left",154,43,1)
sleep(500)
MouseClick("left",184,68,1)
sleep(1000)
WinWaitActive("物品参数设置")
sleep(500)
ControlCommand("物品参数设置","","ComboBox1","SetCurrentSelection", "0")
sleep(500)
ControlClick("物品参数设置","","Button10","",1)
sleep(500)
ControlSetText("物品参数设置","","Edit1",2000)
sleep(500)
ControlSetText("物品参数设置","","Edit4",1900)
sleep(500)
ControlSetText("物品参数设置","","Edit6",800)
sleep(500)
ControlSetText("物品参数设置","","Edit8",600)
sleep(500)
ControlCommand("物品参数设置","","ComboBox5","SetCurrentSelection", "2")
sleep(500)
ControlSetText("物品参数设置","","Edit10",500)
ControlClick("物品参数设置","","Button1","",1)
sleep(2000)
;设置好参数,开始运行程序,第一段参数运行完,就开始设置第二段参数
MouseClick("left",154,43,1)
sleep(500)
MouseClick("left",184,68,1)
sleep(1000)
WinWaitActive("物品参数设置")
sleep(500)
ControlCommand("物品参数设置","","ComboBox1","SetCurrentSelection", "0")
sleep(500)
ControlClick("物品参数设置","","Button10","",1)
sleep(500)
ControlSetText("物品参数设置","","Edit1",1000)
sleep(500)
ControlSetText("物品参数设置","","Edit4",900)
sleep(500)
ControlSetText("物品参数设置","","Edit6",800)
sleep(500)
ControlSetText("物品参数设置","","Edit8",300)
sleep(500)
ControlCommand("物品参数设置","","ComboBox5","SetCurrentSelection", "2")
sleep(500)
ControlSetText("物品参数设置","","Edit10",500)
ControlClick("物品参数设置","","Button1","",1)
sleep(2000)
;第二段参数只修改了四个edit 里面的内容,改为:1000,900,800,300, 第二段参数设置好,运行程序,之后运行第三段参数
MouseClick("left",154,43,1)
sleep(500)
MouseClick("left",184,68,1)
sleep(1000)
WinWaitActive("物品参数设置")
sleep(500)
ControlCommand("物品参数设置","","ComboBox1","SetCurrentSelection", "0")
sleep(500)
ControlClick("物品参数设置","","Button10","",1)
sleep(500)
ControlSetText("物品参数设置","","Edit1",427)
sleep(500)
ControlSetText("物品参数设置","","Edit4",400)
sleep(500)
ControlSetText("物品参数设置","","Edit6",800)
sleep(500)
ControlSetText("物品参数设置","","Edit8",128)
sleep(500)
ControlCommand("物品参数设置","","ComboBox5","SetCurrentSelection", "2")
sleep(500)
ControlSetText("物品参数设置","","Edit10",500)
ControlClick("物品参数设置","","Button1","",1)
sleep(2000)
:同上
MouseClick("left",154,43,1)
sleep(500)
MouseClick("left",184,68,1)
sleep(1000)
WinWaitActive("物品参数设置")
sleep(500)
ControlCommand("物品参数设置","","ComboBox1","SetCurrentSelection", "0")
sleep(500)
ControlClick("物品参数设置","","Button10","",1)
sleep(500)
ControlSetText("物品参数设置","","Edit1",213)
sleep(500)
ControlSetText("物品参数设置","","Edit4",210)
sleep(500)
ControlSetText("物品参数设置","","Edit6",800)
sleep(500)
ControlSetText("物品参数设置","","Edit8",64)
sleep(500)
ControlCommand("物品参数设置","","ComboBox5","SetCurrentSelection", "2")
sleep(500)
ControlSetText("物品参数设置","","Edit10",500)
ControlClick("物品参数设置","","Button1","",1)
sleep(2000)
;总的来说,四段代码,主要需要修改的就四个参数edit 1,2,3,4, 其他的参数第一段代码运行完之后,软件会有记忆功能,不用再输第二次(这里我直接复制粘贴,就没删除多余的了)。而edit四个参数其中 edit2 只要小于 接近 edit1就行,其他edit1,3,4 都是不固定的参数,我要把这几组参数都运行一遍 才行 afan 发表于 2020-9-4 00:53
将要改变的写入xxx.ini文件:
[测试]
Edit1=2000
好的,谢谢,我以为代码之间都要加延迟呢;
不过A大您这个方法 我考虑过,但是控件不同,是不是还要输入四个代码,比如参数输入到edit4里面
[测试]
Edit1=2000
Edit4=1900
Edit6=800
Edit8=600
ControlSetText("物品参数设置","","Edit4", IniRead('xxx.ini', '测试', 'Edit4', 'err'))
我能不能把我的参数 都写到配置文件 里面,比如
Edit1=A,B,C,D
Edit4=A1,B1,C2,D2
Edit6=A3,B3,C3,D3
Edit8=A4,B4,C4,D4
(当然这里 Edit1应该不能同时=A,B,C,D)
然后就写一段代码,分别第一次运行A,A1,A2,A3 ;第二次运行 B,B1,B2,B3以此类推,不知道可行
可以这样
例子:
_SetText(2000, 1900, 800, 600)
_SetText(1000, 900, 800, 300)
_SetText(427, 400, 800, 128)
_SetText(213, 210, 800, 64)
Func _SetText($Edit1, $Edit4, $Edit6, $Edit8)
MouseClick("left", 154, 43, 1)
Sleep(500)
MouseClick("left", 184, 68, 1)
Sleep(1000)
WinWaitActive("物品参数设置")
Sleep(500)
ControlCommand("物品参数设置", "", "ComboBox1", "SetCurrentSelection", "0")
Sleep(500)
ControlClick("物品参数设置", "", "Button10", "", 1)
Sleep(500)
ControlSetText("物品参数设置", "", "Edit1", $Edit1)
Sleep(500)
ControlSetText("物品参数设置", "", "Edit4", $Edit4)
Sleep(500)
ControlSetText("物品参数设置", "", "Edit6", $Edit6)
Sleep(500)
ControlSetText("物品参数设置", "", "Edit8", $Edit8)
Sleep(500)
ControlCommand("物品参数设置", "", "ComboBox5", "SetCurrentSelection", "2")
Sleep(500)
ControlSetText("物品参数设置", "", "Edit10", 500)
ControlClick("物品参数设置", "", "Button1", "", 1)
Sleep(2000)
EndFunc ;==>_SetText
itzyx 发表于 2020-9-4 08:55
好的,谢谢,我以为代码之间都要加延迟呢;
不过A大您这个方法 我考虑过,但是控件不同,是不是还要输入 ...
IniRead 当然要读取对应的键到对应的值,这是再基础不过了
你这只有4个要改,直接复制粘贴一遍很容易。如果是40个控件,就用循环处理也简单。 本帖最后由 gyp2000 于 2020-9-4 10:10 编辑
itzyx 发表于 2020-9-4 08:55
好的,谢谢,我以为代码之间都要加延迟呢;
不过A大您这个方法 我考虑过,但是控件不同,是不是还要输入 ...
ini每个条目可以保存一组数据,只是ini过大的话,AU3内置函数是无法读取全部内容的。
例
#include <Array.au3>
Global $aArray ,$bArray, $text ;申明变量
$aArray = 10
$aArray = 20
$aArray = 30
$aArray = 40
$text = _ArrayToString($aArray, ";") ;数组转字符串
;保存方案
IniWrite ( @ScriptDir&"\test.ini", "字段", "方案1", $text )
;
;
;
;读取方案
$text =IniRead ( @ScriptDir&"\test.ini", "字段", "方案1", "")
$bArray = StringSplit ( $text, ";" , 2 ) ;字符串转数组
If @error Then Exit
;输出数组内容
ConsoleWrite($bArray&@CRLF)
ConsoleWrite($bArray&@CRLF)
ConsoleWrite($bArray&@CRLF)
ConsoleWrite($bArray&@CRLF) afan 发表于 2020-9-4 09:38
IniRead 当然要读取对应的键到对应的值,这是再基础不过了
你这只有4个要改,直接复制粘贴一遍很容易。 ...
确实,少的话复制粘贴一遍比较容易 ,不过 A大 你说的控件多的话 一般怎么循环处理啊?可以学习一下嘛
页:
[1]
2