请教API以及窗口操控函数的问题【已解决】
本帖最后由 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均为空.....这是怎么回事呢? WinGetText
_WinAPI_GetParent
_WinAPI_EnumChildWindows ControlGetHandle是au3经典语句,按键精灵查找子窗口方式比较痛苦。"MDIClient"处应该这样用:
1.ID方式: ""
2.Advance mode方式:"" 本帖最后由 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的版本有关吧?
新手,见笑了哈{:face (239):}
有没有AUTOIT编写的像上图那样以ID(不是句柄)和类名构成的反映窗口和控件层次结构的窗口探测软件呢? #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 警告 #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 警告 这是咋回事?{:face (229):} 回复 8# cashiba
换3.3.14.2版试试. 回复 5# cashiba
当然有,如探测远程桌面连接的"连接"控件,可以获取这些值 回复 4# cashiba
1.窗口句柄用ControlGetHandle获取,控件句柄用ControlGetHandle获取.ID用AutoIt 窗口信息工具获取.
2.编写微软标准窗口时,会自动生成INSTANCE值,前面的语句为小值.
3.版本. 回复cashiba
换3.3.14.2版试试.
love008 发表于 2016-3-14 10:46 http://www.autoitx.com/images/common/back.gif今天换台电脑,没出现报错,版本跟昨天使用的不一样。确实是版本问题吧。觉得AU3前面include那么多函数有些不便,就做成一个函数库,统一自动索引多好,新手真是望而生畏阿{:face (340):} 回复cashiba
1.窗口句柄用ControlGetHandle获取,控件句柄用ControlGetHandle获取.ID用AutoIt 窗口信息 ...
love008 发表于 2016-3-14 11:07 http://www.autoitx.com/images/common/back.gif也就是说只能通过工具获得ID和instance,用函数或命令语句获取比较麻烦是吧?问题是有些子窗口里的控件无法用窗口信息工具精准定位,只能框个大窗口,无法框到里面的控件上。昨天好像看到AFan班长做的一个软件,比该工具定位要灵活些,只是还不大会用。以后再用用看{:face (271):} 回复 13# cashiba
哈哈,多向afan 请教,不断提高! afan版长的作品之一:
Au3.WProbe 窗口信息探测器
http://www.autoitx.com/forum.php?mod=viewthread&tid=17882&highlight=厉害啊{:face (88):}
页:
[1]
2