找回密码
 加入
搜索
查看: 10423|回复: 12

[AU3基础] 如何向后台窗口发送相对坐标点击和按键

  [复制链接]
发表于 2012-5-10 16:52:56 | 显示全部楼层 |阅读模式
希望能够在执行自动化操作的时候,用户依然能够处理别的事情,所以要对后台窗口进行自动化操作。注意,此窗口不能捕获到窗口里的控件。

希望各位大牛能给出一个例子,小弟不胜感激
发表于 2012-5-10 16:59:30 | 显示全部楼层
Local $text = WinGetClassList("所需操作的窗口标题", "")
msgbox(0,"控件列表",$text)

一般这样可以列出很多控件出来,你在之后要用的时候在后面加1,2,3就行了。
比如有5个Button控件,你就可以尝试去点
controlclick("标题","内容","Button1")
controlclick("标题","内容","Button2")
controlclick("标题","内容","Button3")
controlclick("标题","内容","Button4")
controlclick("标题","内容","Button5")
我也是菜鸟,见笑了!
发表于 2012-5-10 17:04:00 | 显示全部楼层
关于自动化接触AU3的新手总会思考这个问题,我原来没有想出答案,现在也想不通
发表于 2012-5-10 17:04:03 | 显示全部楼层
关于自动化接触AU3的新手总会思考这个问题,我原来没有想出答案,现在也想不通
 楼主| 发表于 2012-5-10 17:10:36 | 显示全部楼层
Local $text = WinGetClassList("所需操作的窗口标题", "")
msgbox(0,"控件列表",$text)

一般这样可以列 ...
xlj310 发表于 2012-5-10 16:59


窗口没有控件啊(可能因为是自定义的窗口),就是一个窗体,总之我用au3info是没有能捕获控件
发表于 2012-5-10 17:19:41 | 显示全部楼层
本帖最后由 地平线 于 2012-5-10 18:05 编辑

回复 5# gunziyang
能说明白是什么窗口,哪一类控件吗?或者截个图看看。最近在用_SendMessage和_WinAPI,有点心得,或许能给你点意见。
 楼主| 发表于 2012-5-10 18:15:44 | 显示全部楼层
回复  gunziyang
能说明白是什么窗口,哪一类控件吗?或者截个图看看。最近在用_SendMessage和_WinAPI,有 ...
地平线 发表于 2012-5-10 17:19


oracle 8i客户端的卸载程序
发表于 2012-5-10 19:09:46 | 显示全部楼层
本帖最后由 地平线 于 2012-5-10 19:15 编辑

回复 7# gunziyang
oracle 8i客户端的卸载程序

没用过也没见过这东西。下面的例子给你参考一下。顺便,彗星小助手也是个不错的工具。
#Include <Array.au3>
#Include <WinAPIEx.au3>
#include <SendMessage.au3>
Dim $hwnd
Const $class='ATL:005E9100'  ;类名
Const $name='金山卫士 3.5 '  ;标题
$hwnd = _WinAPI_FindWindow($class,$name)
;MsgBox(0,"",$hwnd)
Opt('MustDeclareVars', 1)
Global $Data = _WinAPI_EnumChildWindows($hwnd,FALSE )
_ArrayDisplay($Data, '_WinAPI_Enum')  ;所有子窗口或控件的句柄列表

Const $WM_RBUTTONDOWN = 0x204  ;右键按下
Const $WM_RBUTTONUP = 0x205  ;右键松开
Const $WM_LBUTTONDOWN = 0x0201  ;左键按下
Const $WM_LBUTTONUP = 0x0202  ;左键松开
_SendMessage($Data[1][0],0x0201,0,0)  ;点击指定控件
_SendMessage($Data[1][0],0x0202,0,0)
 楼主| 发表于 2012-5-10 21:46:08 | 显示全部楼层
回复  gunziyang

没用过也没见过这东西。下面的例子给你参考一下。顺便,也是个不错的工具。
地平线 发表于 2012-5-10 19:09



金山卫士我没有,我把你这例子用在Firefox上不成功(也没见有啥输出),能不能给个Firefox的例子

我在Firefox上的代码如下:
#Include <Array.au3>

#Include <WinAPIEx.au3>

#include <SendMessage.au3>

Dim $hwnd

Const $class='MozillaWindowClass'  ;类名

Const $name='Mozilla Firefox '  ;标题

$hwnd = _WinAPI_FindWindow($class,$name)

;MsgBox(0,"",$hwnd)

Opt('MustDeclareVars', 1)

Global $Data = _WinAPI_EnumChildWindows($hwnd,FALSE )

_ArrayDisplay($Data, '_WinAPI_Enum')  ;所有子窗口或控件的句柄列表



Const $WM_RBUTTONDOWN = 0x204  ;右键按下

Const $WM_RBUTTONUP = 0x205  ;右键松开

Const $WM_LBUTTONDOWN = 0x0201  ;左键按下

Const $WM_LBUTTONUP = 0x0202  ;左键松开

_SendMessage($Data[1][0],0x0201,0,0)  ;点击指定控件

_SendMessage($Data[1][0],0x0202,0,0)
发表于 2012-5-10 23:10:07 | 显示全部楼层
张嘴比张睛要舒服的都
发表于 2012-5-10 23:20:04 | 显示全部楼层
本帖最后由 地平线 于 2012-5-10 23:46 编辑

回复 9# gunziyang
我不清楚你最后要达到的目标是什么。那只是我提供的一个方法,但并不是万能的。
最后一句应该是:
If IsArray($Data) Then
        _ArrayDisplay($Data, '_WinAPI_Enum')  ;所有子窗口的句柄列表
EndIf
只有当$Data是数组类型时才输出列表,FireFox的话用msgbox输出是0。
PS:话说FireFox的那个是网页来的吧,没有控件。
 楼主| 发表于 2012-5-11 08:07:28 | 显示全部楼层
回复  gunziyang
我不清楚你最后要达到的目标是什么。那只是我提供的一个方法,但并不是万能的。
最后一 ...
地平线 发表于 2012-5-10 23:20


我的目的就是给后台窗口发送点击和按键啊

Firefox本身并不是网页吧
发表于 2012-5-11 12:43:14 | 显示全部楼层
我的目的就是给后台窗口发送点击和按键啊
Firefox本身并不是网页吧

这个我就不懂了,还是请教大神们吧。或者换其他方法。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-16 22:09 , Processed in 0.084859 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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