请教如何获取控件编辑框中的文本[已解决]
本帖最后由 cashiba 于 2016-3-17 19:52 编辑如上图,请问有什么函数可以得到其中所有类名为"EDIT"的控件的编辑框中的文本?
#include<WinAPISys.au3>
_WinAPI_EnumChildWindows ( $hWnd [, $bVisible = True] )
目前采取的办法:_WinAPI_EnumChildWindows得到所有的子窗体的句柄和类名,然后用for...next循环过滤后的生成一个符合条件的只含"EDIT"的新数组....
再用
ControlGetText("标题", "文本", 控件ID)
得到"EDIT"框中的文本。
但是很奇怪,得不到结果{:face (319):}
请大神和老师们提点一下,万谢!
之前在按键里用类似下面形式的函数可以取得文本值,不知道ControlGetText的原型是不是也是这个
Func GetText($Arg_hwnd)
Dim $S_TextLen,$S_strText
$S_TextLen = SendMessage($Arg_hwnd, &HE, 0, 0)
$S_strText = Space($S_TextLen)
SendMessage($Arg_hwnd, &HD, $S_TextLen+1, $S_strText)
return $S_strText
EndFunc 目标程序是什么 LZ应该贴出你的代码,这样光解释没有实际测试代码也是白搭 本帖最后由 cashiba 于 2016-3-16 19:03 编辑
LZ应该贴出你的代码,这样光解释没有实际测试代码也是白搭
afan 发表于 2016-3-16 16:26 http://www.autoitx.com/images/common/back.gif
谢谢两位版长!刚接触Au,代码写得少,也很简单。但是还卡在构造数组上了{:face (229):}
#include <WindowsConstants.au3>
#include <stringConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>
#include <Array.au3>
Dim $biaoti,$H0,$H1,$H2
$biaoti="信息平台"
Opt("WinTitleMatchMode")
$H0= WinGetHandle($biaoti)
ConsoleWrite($H0 & @CRLF);
$H1= ControlGetHandle($H0,"","")
ConsoleWrite($H1 & @CRLF);
$H2= ControlGetHandle($H1,"","")
ConsoleWrite($H2 & @CRLF);
Local $HsArr =_WinAPI_EnumChildWindows($H2,0)
If IsArray($HsArr) Then _ArrayDisplay($HsArr, '_WinAPI_EnumChildWindows')
以上运行正常,结果如下:
>运行:C:\Program Files\AutoIt3\autoit3.exe(3.3.14.2), 脚本: C:\Program Files\AutoIt3\autoit3.exe "C:\Documents and Settings\Administrator\My Documents\GetCtrlinfo5.au3"
--> 点击 Ctrl+Alt+Break 重新启动, 或 Ctrl+Break 停止脚本执行
0x000500F4
0x00060126
0x0004028C
+>08:11:50 AutoIt3.exe 结束.rc: 0
+>08:11:50 AutoIt3Wrapper 完成脚本处理.
>Exit code: 0 Time: 3.312
下面打算从数组$HsArr中(见上图)过滤出"EDIT"类名的控件形成新数组$HsBrr,可惜对AU数组不熟,一直报错
dim $n=0
dim $HsBrr[$n]
for $i=0 to ubound($Hsarr,1)-1
if $HsArr[$i] ="Edit" then
;redim preserve $HsBrr[$n]
$HsBrr[$n]=H$HsArr[$i]
$HsBrr[$n]=$HsArr[$i]
$n =$n+1
EndIf
next
_ArrayDisplay($Hsbrr, '_WinAPI_EnumChildWindows')
最后是根据数组$HsBrr中的句柄和类名得到编辑框文本
for $i=0 to ubound($Hsbrr,1)-1
$sText = ControlGetText($Hsbrr[$i], "", $Hsbrr[$i]);显示编辑控件的文本.
ConsoleWrite($sText & @CRLF)
$sText=""
next 新数组创建Dim $n = 0
Dim $HsBrr
For $i = 0 To UBound($Hsarr) - 1
If $HsArr[$i] = "Edit" Then
;redim preserve $HsBrr[$n]
$HsBrr[$n] = $HsArr[$i]
$HsBrr[$n] = $HsArr[$i]
$n += 1
EndIf
Next
If $n > 0 Then ReDim $HsBrr[$n]
_ArrayDisplay($HsBrr, '_WinAPI_EnumChildWindows') 本帖最后由 cashiba 于 2016-3-17 10:02 编辑
private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_GETTEXT = &HD
const WM_GETTEXTLENGTH=&HE
Func GetText($Arg_hwnd)
Dim $S_TextLen,$S_strText
$S_TextLen = SendMessage($Arg_hwnd, WM_GETTEXTLENGTH,0, 0)
$S_strText = Space($S_TextLen)
SendMessage($Arg_hwnd, WM_GETTEXT, $S_TextLen+1, $S_strText)
return $S_strText
EndFunc新手不知道如何使用dllcall,请问如何修改一下,改成AU3中可用的函数呢?报错大概是&HE、&HD未定义,怎么改呢? 新数组创建
afan 发表于 2016-3-16 21:42 http://www.autoitx.com/images/common/back.gif经测试成功,谢谢aFan版主费心!以前VB构造动态数组,需要preserve保留数据,而且只能改变第二维,第一维不能变。AU3中数组讲得都不多,也没见到动态、静态数组的说法。还得慢慢适应...
页:
[1]