找回密码
 加入
搜索
查看: 7834|回复: 14

[系统综合] [已解决]请教如何用controlclick双击该窗口中的指定文件

 火.. [复制链接]
发表于 2010-2-25 15:17:37 | 显示全部楼层 |阅读模式
本帖最后由 cnergao 于 2010-2-27 10:42 编辑

问题已经解决!谢谢各位提供有用的信息和帮助。答案在15楼




我现在用
                WinWait("打开")
                ControlListView("打开", "", "SysListView321", "Select", $j) ;选中图片
                ControlSend("打开", "", "Button2", "{ENTER}") ;按回车键打开这段代码来完成上面的打开操作。
问题是:运行时间久了有时候速度一卡。没有选中图片之前就按回车键了。然后程序就停在“打开”窗口这个位置不动了。
我现在想换种思路。 如下:
WinWait("打开")
controlclick("打开","","SysListView321","left",2);双击直接打开。
现在的需要解决的问题是。如何才能确定要双击的文件名。即文件位置(文件很多,文件名也不同,不要相同文件名)
请问有什么办法?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-2-25 16:35:20 | 显示全部楼层
WinWait("打开")
ControlListView("打开", "", "SysListView321", "Select", $j) ;选中图片
ControlSend("打开", "", "Button2", "{ENTER}") ;按回车键打开

选中图片之后,调用GUICtrlRead读取文件名框的信息。 不等于$j的时候, 重新执行选取操作。
发表于 2010-2-25 17:47:28 | 显示全部楼层
你可以换个思路,不要去双击指定文件,而去直接在文件名那个input里面写上(当然程序自己去做这个步骤)指定的文件名就好了,同样,如果文件路径不对也没关系,直接在文件名那个input里面写上指定文件的完整路径加文件名就好了。。
 楼主| 发表于 2010-2-25 22:45:51 | 显示全部楼层
你可以换个思路,不要去双击指定文件,而去直接在文件名那个input里面写上(当然程序自己去做这个步骤)指定 ...
sanmoking 发表于 2010-2-25 17:47


这个思路也是可行的。不过我的文件名不一样。有些没规律。有些有规律。有规律的文件名还好写。没规律太多的时候就不好写上去了。。
就是因为这样,我才用ControlListView("打开", "", "SysListView321", "Select", $j) ;
这条语句不受名称影响。只有位置标志。
 楼主| 发表于 2010-2-25 22:50:22 | 显示全部楼层
这个手动操作的时候是可以双击直接打开的。我想是不是可以写条语句来完成这个操作?如果可以的话速度和准确率该没有什么问题。我上面的哪几条语句。速度一快,就不准了。整个程序傻了。停在“打开”窗口不动了
发表于 2010-2-25 23:02:54 | 显示全部楼层
这是操作什么的,必须用这种模拟操作吗?
 楼主| 发表于 2010-2-25 23:15:54 | 显示全部楼层
上传图片,是需要这种模拟操作
发表于 2010-2-25 23:26:56 | 显示全部楼层
本帖最后由 afan 于 2010-2-26 11:21 编辑

回复 7# cnergao


    先 _FileListToArray 读取此目录的文件名到数组,再如 3#所说操作
发表于 2010-2-26 09:48:32 | 显示全部楼层
回复  cnergao


    先 _FileListToArray 读取此目录的文件名到数组,再如 2#所说操作
afan 发表于 2010-2-25 23:26



    我觉得还是直接在文件名的input里面写上文件名比较精确。。。当然 先 _FileListToArray 读取此目录的文件名到数组
发表于 2010-2-26 11:18:18 | 显示全部楼层
怎么会有这么多稀奇古怪的操作....
发表于 2010-2-26 11:22:02 | 显示全部楼层
我觉得还是直接在文件名的input里面写上文件名比较精确。。。当然 先 _FileListToArray 读取此目 ...
sanmoking 发表于 2010-2-26 09:48



    没错,我看错了楼。。。
发表于 2010-2-26 11:31:21 | 显示全部楼层
没错,我看错了楼。。。
afan 发表于 2010-2-26 11:22



    是不是工作太晚,眼睛累坏了,不好使了?
发表于 2010-2-26 11:39:13 | 显示全部楼层
是不是工作太晚,眼睛累坏了,不好使了?
gapkiller 发表于 2010-2-26 11:31



    回帖时忘了看楼,只记得有只熊在那扭...
 楼主| 发表于 2010-2-26 14:48:54 | 显示全部楼层
结合各位的思路。我再调整了一下。
                WinWait("打开")
                ControlSetText("打开","","Edit1",$FileList[$n]);先读取文件数到数组
                ControlClick("打开", "", "Button2", "left");点击“打开”窗口上的打开按钮
这样做一下调整后速度快多了。中间的sleep 全省掉了。。

不过还有一个问题。可不可以全弄成后台操作?因为这个操作要不停的跳出窗口。
 楼主| 发表于 2010-2-27 10:35:00 | 显示全部楼层
本帖最后由 cnergao 于 2010-2-27 14:13 编辑

最后确定的代码:供大家参考修改。有不足的地方请提出。谢谢。
       
        第一种:        WinWait($title3)
                While WinExists($title3)
                        ControlSetText($title3, "", "Edit1", $FileList[$n]);在输入框中输入要打开的文件名
                        $z = ControlGetText($title3, "", "Edit1")
                        If $z == $FileList[$n] Then
                                ControlClick($title3, "", "Button2", "left");点击打开按钮
                        EndIf
                WEnd

经这种好象也会停住。死循环.

第二种:                WinWait($title3)
                                Do
                        ControlSetText($title3, "", "Edit1", $FileList[$n])
                        ControlClick($title3, "", "Button2", "left")
                Until Not WinExists($title3)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 03:09 , Processed in 0.108746 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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