chishingchan 发表于 2019-9-23 09:53:17

【已解决】关于 WinGetClassList 的返回数据

本帖最后由 chishingchan 于 2019-9-23 10:28 编辑

$Title = "标题名称"
Local $hWnd = WinWait($Title, "", 10)
WinActivate($hWnd)
Local $sClassList = WinGetClassList($hWnd)
MsgBox(64,"类列表",$sClassList)


请问:如何让 WinGetClassList(或其他) 显示 NN 序列?即 Button1、...、Button7、Static1、...、Startic7。谢谢!

参考图:


chishingchan 发表于 2019-9-23 09:56:44

是不是每个窗口的类列表的控件名称NN必须是由1开始并递增?

afan 发表于 2019-9-23 10:02:32

chishingchan 发表于 2019-9-23 09:56
是不是每个窗口的类列表的控件名称NN必须是由1开始并递增?
是的,就是以1开始递增

chishingchan 发表于 2019-9-23 11:01:02

本帖最后由 chishingchan 于 2019-9-23 11:02 编辑

afan 发表于 2019-9-23 10:02
是的,就是以1开始递增
a大,可否帮忙编写脚本,像上面的例子输出为
Button1
...
Button7
Static1
...
Static7
注:Button 和 Static 的字眼不能在脚本上直接明示

afan 发表于 2019-9-23 11:12:00

本帖最后由 afan 于 2019-9-23 11:19 编辑

chishingchan 发表于 2019-9-23 11:01
a大,可否帮忙编写脚本,像上面的例子输出为
Button1
...

$Title = "标题名称"
Local $hWnd = WinWait($Title, "", 10)
WinActivate($hWnd)
$sClassList = _WinGetClassListNum($hWnd)
MsgBox(64,"类列表", $sClassList)
Func _WinGetClassListNum($hWnd)
        Local $sClassList = WinGetClassList($hWnd)
        Local $aC = StringRegExp($sClassList, '\V+', 3)
        If @error Then Return SetError(1, 0, '')
        Local $sOut = '', $ix
        For $ii = 0 To UBound($aC) - 1
                If IsDeclared($aC[$ii]) Then ContinueLoop
                Assign($aC[$ii], 0)
                $ix = 0
                Do
                        $ix += 1
                        If Not ControlGetHandle($hWnd, '', $aC[$ii] & $ix) Then ExitLoop
                        $sOut &= $aC[$ii] & $ix & @LF
                Until 0
        Next
        Return $sOut
EndFunc   ;==>_WinGetClassListNum
页: [1]
查看完整版本: 【已解决】关于 WinGetClassList 的返回数据