找回密码
 加入
搜索
查看: 8092|回复: 18

[AU3基础] 请教API以及窗口操控函数的问题【已解决】

  [复制链接]
发表于 2016-3-13 12:38:54 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2016-3-16 19:16 编辑

新手请教大神老师们:下面这段API自定义函数在AU3中有吗?没有的话怎么改变成AU3中可用的自定义函数呢?
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Func GetText(Arg_hwnd)
Dim S_TextLen
S_TextLen = SendMessage(Arg_hwnd, &HE, 0, 0)
S_strText = Space(S_TextLen)
Call SendMessage(Arg_hwnd, &HD, S_TextLen+1, S_strText)
GetText = S_strText
EndFunc

另外,下面这两个窗口函数在按键精灵中比较常用,可以层层递进得到子窗口或子控件的句柄
父句柄 = Plugin.Window.Find(窗口类名,窗口标题);根据窗口类名或标题返回窗口句柄
子句柄 = Plugin.Window.FindEx(父句柄, 0, 子类名, 0);根据父窗口句柄和子窗口(或控件)的类名得到子窗口或控件的句柄
在AU3中好像是分别对应于WinGetHandle及ControlGetHandle吧?
但直接改成AU3代码
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiToolbar.au3>
#include <ScreenCapture.au3>
#include <GuiListView.au3>

Dim $biaoti,$H0,$H1,$H2
$biaoti="基本信息"
Opt("WinTitleMatchMode")
$H0= WinGetHandle($biaoti)
msgbox(0,"", $H0)
$H1 = ControlGetHandle($H0,"","MDIClient")
msgbox(0,"", $H1)
$H2 = ControlGetHandle($H1,"","FNWND380")
msgbox(0,"", $H2)

只有$H0能得到;$H1,$H2均为空.....这是怎么回事呢?
发表于 2016-3-13 14:34:30 | 显示全部楼层
WinGetText
_WinAPI_GetParent
_WinAPI_EnumChildWindows

评分

参与人数 1金钱 +10 收起 理由
cashiba + 10

查看全部评分

发表于 2016-3-13 15:13:12 | 显示全部楼层
ControlGetHandle是au3经典语句,按键精灵查找子窗口方式比较痛苦。"MDIClient"  处应该这样用:
1.ID方式: "[ID:254]"
2.Advance mode方式:"[CLASS:Edit; INSTANCE:1]"

评分

参与人数 1金钱 +10 收起 理由
cashiba + 10

查看全部评分

 楼主| 发表于 2016-3-13 16:41:09 | 显示全部楼层
本帖最后由 cashiba 于 2016-3-13 17:00 编辑

谢谢afan超版和love008老师哈,有些问题在按键里一直没找到解决办法,所以才试着学习AI。按键的语法接近VB,AI的语法不知道是哪个体系,一时还有点不适应....

对AI里的控件属性:

还没理解透切。
ID - 内部控件 ID. 是 windows 赋给每个控件的内部数字标识符. 通常是识别控件的最好方法. 除了 AutoIt 窗口信息工具之外, 其它应用程序如某些给盲人使用的读屏软件或者其它使用 Microsoft API 写的工具也可能会允许你获取控件 ID.
TEXT - 控件文本. 如按钮的文本: "下一步[&N]".
CLASS - 内部控件类名. 如:"Edit" 或 "Button"
CLASSNN - AutoIt 的早先版本中使用的 ClassnameNN 值 , 例如 "Edit1"
NAME - 内部 .NET 结构的 WinForms 名称(如果有)
REGEXPCLASS - 使用 正则表达式 的控件类名.
X \ Y \ W \ H - 控件的位置和大小.
INSTANCE - 当多个属性时, 按指定属性的序号匹配(序号基于 1 计算).

尤其是
1、控件ID,跟句柄有点分不清,不知道有没有什么函数或命令是返回ID的,像返回句柄一样?为啥控件属性里没有句柄这一概念呢?
2、另外一个就是INSTANCE,这个取值1、2...是根据什么来定的呢?
3、class跟classNN实际上是一样,跟所使用的AUTOIT的版本有关吧?

新手,见笑了哈
 楼主| 发表于 2016-3-13 16:52:50 | 显示全部楼层

有没有AUTOIT编写的像上图那样以ID(不是句柄)和类名构成的反映窗口和控件层次结构的窗口探测软件呢?

本帖子中包含更多资源

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

×
 楼主| 发表于 2016-3-13 23:22:28 | 显示全部楼层
#include <Array.au3>
;#include <WinAPISys.au3>
Local $aData =_WinAPI_EnumChildWindows(66712)
_ArrayDisplay($aData, '_WinAPI_EnumChildWindows')

出现错误:
C:\Documents and Settings\Administrator\My Documents\GetCtrlinfo1.au3(35,45) : 错误: _WinAPI_EnumChildWindows(): 未定义的函数.
Local $aData =_WinAPI_EnumChildWindows(66712)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Administrator\My Documents\GetCtrlinfo1.au3 - 1 错误, 0 警告
 楼主| 发表于 2016-3-13 23:24:32 | 显示全部楼层
#include <Array.au3>
#include <WinAPISys.au3>
Local $aData =_WinAPI_EnumChildWindows(66712)
_ArrayDisplay($aData, '_WinAPI_EnumChildWindows')

仍然出现错误:
G:\autoit3\Include\WinAPIInternals.au3(581,16) : 错误: 表达式错误 (非法字符)
        Return $bTest ?
        ~~~~~~~~~~~~~~^
G:\autoit3\Include\WinAPISys.au3(1143,48) : WARNING: $STR_STRIPLEADING: 使用前并未进行声明.
                If StringStripWS($sModule, $STR_STRIPLEADING +
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
G:\autoit3\Include\WinAPISys.au3(1143,68) : WARNING: $STR_STRIPTRAILING: 使用前并未进行声明.
                If StringStripWS($sModule, $STR_STRIPLEADING + $STR_STRIPTRAILING)
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
G:\autoit3\Include\WinAPISys.au3(1143,48) : 错误: $STR_STRIPLEADING: 未声明的全局变量.
                If StringStripWS($sModule, $STR_STRIPLEADING +
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
G:\autoit3\Include\WinAPISys.au3(1143,68) : 错误: $STR_STRIPTRAILING: 未声明的全局变量.
                If StringStripWS($sModule, $STR_STRIPLEADING + $STR_STRIPTRAILING)
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Administrator\My Documents\GetCtrlinfo1.au3 - 3 错误, 2 警告
 楼主| 发表于 2016-3-13 23:25:32 | 显示全部楼层
这是咋回事?
发表于 2016-3-14 10:46:49 | 显示全部楼层
回复 8# cashiba

换3.3.14.2版试试.
发表于 2016-3-14 10:53:34 | 显示全部楼层
回复 5# cashiba



当然有,如探测远程桌面连接的"连接"控件,可以获取这些值

本帖子中包含更多资源

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

×
发表于 2016-3-14 11:07:57 | 显示全部楼层
回复 4# cashiba

1.窗口句柄用ControlGetHandle获取,控件句柄用ControlGetHandle获取.ID用AutoIt 窗口信息工具获取.
2.编写微软标准窗口时,会自动生成INSTANCE值,前面的语句为小值.
3.版本.

评分

参与人数 2威望 +3 金钱 +110 贡献 +3 收起 理由
cashiba + 10
afan + 3 + 100 + 3 热心+

查看全部评分

 楼主| 发表于 2016-3-14 18:06:10 | 显示全部楼层
回复  cashiba

换3.3.14.2版试试.
love008 发表于 2016-3-14 10:46
今天换台电脑,没出现报错,版本跟昨天使用的不一样。确实是版本问题吧。觉得AU3前面include那么多函数有些不便,就做成一个函数库,统一自动索引多好,新手真是望而生畏阿
 楼主| 发表于 2016-3-14 18:13:28 | 显示全部楼层
回复  cashiba

1.窗口句柄用ControlGetHandle获取,控件句柄用ControlGetHandle获取.ID用AutoIt 窗口信息 ...
love008 发表于 2016-3-14 11:07
也就是说只能通过工具获得ID和instance,用函数或命令语句获取比较麻烦是吧?问题是有些子窗口里的控件无法用窗口信息工具精准定位,只能框个大窗口,无法框到里面的控件上。昨天好像看到AFan班长做的一个软件,比该工具定位要灵活些,只是还不大会用。以后再用用看
发表于 2016-3-14 21:55:35 | 显示全部楼层
回复 13# cashiba


    哈哈,多向afan 请教,不断提高!
 楼主| 发表于 2016-3-15 06:52:46 | 显示全部楼层
afan版长的作品之一:
Au3.WProbe 窗口信息探测器[160112更新0.6.5]
http://www.autoitx.com/forum.php ... 7882&highlight=
厉害啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-18 11:25 , Processed in 0.082349 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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