sanfer8889 发表于 2016-3-4 19:13:24

继续请教阿福找图的几个问题。。。

1、我这段代码,是在找到1.bmp后,然后点击偏移位置,单这个步骤没有问题,第二段操作是没有生效的,为什么呢?#include<af_search_pic.au3>
Sleep(6000)
search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\1.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
MouseClick("left",$array+20,$array+10,"2") ;点击配置属性
Sleep(500)
EndIf

Sleep(1500)
search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\4.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
MouseClick("left",$array+20,$array+10,"2") ;点击配置,选择Debug还是Release
EndIf2、第二个问题是阿福找图函数会生成一个Source.bmp的图在脚本目录下,我想把它放到C:\Temp,或者Windows的%Temp%里,我这样改,似乎连第一步都无法工作了,没那么简单?






3、第三个问题,如图,假设找图已经黄色箭头所在的位置x,y,而下一步是想点击红色框所在的下拉箭头,那么偏移量是多少,有没有什么工具可以“测量”这个位置相对到黄色箭头的x,y偏移多少?
我也曾想过让脚本再找一次红框所在的箭头图,似乎用已找到的坐标再去偏移x,y的思路来的快?

love008 发表于 2016-3-5 22:15:06

本帖最后由 love008 于 2016-3-5 22:26 编辑

1、用法是没有错误的,你应该学会用ConsoleWrite来调试,看$array,$array是否取得坐标值,如果取得,就要找MouseClick语句是否适合你的操作,这个需要你调试,你要学会单步调试,找问题。MouseClick的成功率要注意。
2.Source.bmp的生成目录当然可以是任意的,你的改法没有问题,找其它原因。甚至可改写代码,运行完后删除source. bmp.
3.方法是有许多,autoit v3 windows info就可以直接获取。还可以MouseGetPos获取。

sanfer8889 发表于 2016-3-7 11:01:25

谢谢,已经在用ConsoleWrite来输出调试了。。。
现在做到这一步,看样子是有问题,这是我的代码:#include<af_search_pic.au3>
;~ Opt("TrayIconDebug", 1)
Sleep(6000)
search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\1.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
ConsoleWrite(@CRLF & "1.bmp array0 is " & $array & @CRLF & @CRLF)
ConsoleWrite(@CRLF & "1.bmp array1 is " & $array & @CRLF & @CRLF)
MouseClick("left",$array+20,$array+10,"2") ;点击配置属性
EndIf

search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\4.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
ConsoleWrite(@CRLF & "4.bmp array0 is " & $array & @CRLF & @CRLF)
ConsoleWrite(@CRLF & "4.bmp array1 is " & $array & @CRLF & @CRLF)
MouseClick("left",$array+20,$array+10,"2") ;点击配置,选择Debug还是Release
EndIf这是输出:>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3" /UserParams   
+>10:57:59 启动 AutoIt3Wrapper v15.920.938.0 SciTE v3.6.0.0键盘:00000804操作系统:WIN_7/Service Pack 1CPU:X64系统架构:X64语言环境:0804
+> SciTE 目录 => C:\Program Files (x86)\AutoIt3\SciTEAutoIt3Wrapper 用户目录 => C:\Users\lwk\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE 用户目录 => C:\Users\lwk\AppData\Local\AutoIt v3\SciTE
>运行 AU3Check (3.3.14.2) 检查代码.参数: C:\Program Files (x86)\AutoIt3au3 文件: C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3
+>10:57:59 AU3Check 语法检查结束.rc: 0
>运行:C:\Program Files (x86)\AutoIt3\autoit3_x64.exe(3.3.14.2), 脚本: C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3"   
--> 点击 Ctrl+Alt+Break 重新启动, 或 Ctrl+Break 停止脚本执行

1.bmp array0 is 198


1.bmp array1 is 159

+>10:58:06 AutoIt3.exe 结束.rc: 0
+>10:58:06 AutoIt3Wrapper 完成脚本处理.
>Exit code: 0    Time: 7.553
很明显第二次找图的步骤没有运行,我也反复做过几次代码的调整,似乎整个au3在第一步找图找完后,就退出了。。。。
不知道是什么原因呢?

love008 发表于 2016-3-7 13:58:10

你把第9行注释运行看看。

sanfer8889 发表于 2016-3-7 14:44:24

此次测试代码:#include<af_search_pic.au3>
;~ Opt("TrayIconDebug", 1)
Sleep(6000)
search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\1.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
ConsoleWrite(@CRLF & "1.bmp array0 is " & $array & @CRLF & @CRLF)
ConsoleWrite(@CRLF & "1.bmp array1 is " & $array & @CRLF & @CRLF)
;MouseClick("left",$array+20,$array+10,"2") ;点击配置属性
EndIf

search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\4.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
ConsoleWrite(@CRLF & "4.bmp array0 is " & $array & @CRLF & @CRLF)
ConsoleWrite(@CRLF & "4.bmp array1 is " & $array & @CRLF & @CRLF)
MouseClick("left",$array+20,$array+10,"2") ;点击配置,选择Debug还是Release
EndIf我分了2个步骤继续去调试:
1、先把第九行注释了,运行的结果是只有1.bmp的调试输出:
1.bmp array0 is 198
1.bmp array1 is 159
输出窗口内容后面,就没有显示有4.bmp的0和1的输出了。

2、我把整个第一步骤都注释了:#include<af_search_pic.au3>
;~ Opt("TrayIconDebug", 1)
Sleep(6000)
;~ search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\1.bmp")
;~ If $aPosMsg<>"" Then
;~   $array=StringSplit ($aPosMsg,",",2)
;~   ConsoleWrite(@CRLF & "1.bmp array0 is " & $array & @CRLF & @CRLF)
;~   ConsoleWrite(@CRLF & "1.bmp array1 is " & $array & @CRLF & @CRLF)
;~   MouseClick("left",$array+20,$array+10,"2") ;点击配置属性
;~ EndIf

search_pic (0,0, @DesktopWidth, @DesktopHeight,@ScriptDir & "\4.bmp")
If $aPosMsg<>"" Then
$array=StringSplit ($aPosMsg,",",2)
ConsoleWrite(@CRLF & "4.bmp array0 is " & $array & @CRLF & @CRLF)
ConsoleWrite(@CRLF & "4.bmp array1 is " & $array & @CRLF & @CRLF)
MouseClick("left",$array+20,$array+10,"2") ;点击配置,选择Debug还是Release
EndIf运行输出非常妖异:>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3" /UserParams   
+>14:38:27 启动 AutoIt3Wrapper v15.920.938.0 SciTE v3.6.0.0键盘:00000804操作系统:WIN_7/Service Pack 1CPU:X64系统架构:X64语言环境:0804
+> SciTE 目录 => C:\Program Files (x86)\AutoIt3\SciTEAutoIt3Wrapper 用户目录 => C:\Users\lwk\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE 用户目录 => C:\Users\lwk\AppData\Local\AutoIt v3\SciTE
>运行 AU3Check (3.3.14.2) 检查代码.参数: C:\Program Files (x86)\AutoIt3au3 文件: C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3
+>14:38:27 AU3Check 语法检查结束.rc: 0
>运行:C:\Program Files (x86)\AutoIt3\autoit3_x64.exe(3.3.14.2), 脚本: C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Users\lwk\Desktop\autit\MakeProject\configproject.au3"   
--> 点击 Ctrl+Alt+Break 重新启动, 或 Ctrl+Break 停止脚本执行
+>14:38:33 AutoIt3.exe 结束.rc: 0
+>14:38:33 AutoIt3Wrapper 完成脚本处理.
>Exit code: 0    Time: 6.787似乎什么事情都没有发生过,我反复确认过4.bmp是很正常的截图,没有变化过的24位图,肯定界面上是会有的。
脚本目录下面的Source.bmp也是截图成功的


以前也在其它平台上写过很简单的代码的,见到编译器这样无视代码也是不得其解。。。。。{:face (113):}

love008 发表于 2016-3-7 18:36:21

本帖最后由 love008 于 2016-3-8 08:58 编辑

总会找到原因,你要找图的软件哪里可以下载?安装试试。执行还是用了6.7秒,说明程序还是运行了的。

sanfer8889 发表于 2016-3-8 11:15:53

终于搞定了,我重新再做了2.bmp,这次能有动作了,我想的原因是因为WIN7的areo太透明了,截图截得不好影响了判断......
页: [1]
查看完整版本: 继续请教阿福找图的几个问题。。。