jiataifeng 发表于 2008-5-13 21:46:39

有没有办法列举某一窗口上的所有控件呢?

有没有办法列举某一窗口上的所有控件呢?也就是找到某一窗口的所有控件。


有替代的办法。
AutoItSetOption("WinDetectHiddenText", 1)

+
wingettext()

[ 本帖最后由 jiataifeng 于 2008-5-16 19:35 编辑 ]

cai_super 发表于 2008-5-14 10:02:54


你去搜索以下“窗口手术师” 的源代码,就知道了

jiataifeng 发表于 2008-5-14 10:33:53

谢谢回复。不过没有找到源代码。
楼上能传一下吗

cai_super 发表于 2008-5-14 12:53:42

源代码在 http://www.au3.net.cn/ShowPost.asp?ThreadID=1991 。但好像下不了了
关键的函数在线下面,返回窗口标题为$title的所有控件的数组。

Func _GetClasses($title)
;Get array of each control
    Local$buttonCount = 0, $editCount = 0, $staticCount = 0, $i
    Local $classes = StringSplit(WinGetClassList($title) , @LF)
    Local$classIDs[$classes+1]
        Local $count
    $classIDs = $classes
    For $i = 1 to $classes
      Select
      Case $classes[$i] = "Button"
                $buttonCount = $buttonCount + 1
                $classIDs[$i] = $classes[$i] & $buttonCount
      Case $classes[$i] = "Edit"
      $editCount = $editCount + 1
      $classIDs[$i] = $classes[$i] & $editCount
      $classes[$i] = "Input"
      Case $classes[$i] = "Static"
      $staticCount = $staticCount + 1
      $classIDs[$i] = $classes[$i] & $staticCount
                $classes[$i] = "Label"
   Case Else
      If StringStripWS($classes[$i],3) <> "" Then
                        $back = _Name2Link($classes[$i],$count)
                        If $back = 0 Then
                                ReDim $count
                                $count = $classes[$i]
                                $count = 1
                                $classIDs[$i] = $classes[$i] & 1
                        Else
                                $classIDs[$i] = $count[$back] & ($count[$back]+1)
                                $count[$back] +=1
                        EndIf
                EndIf
      EndSelect
          Next
          Local $classIDs2
          For $i = 1 to $classIDs
                If StringStripWS($classIDs[$i],3) <> "" Then
                        ReDim $classIDs2
                        $classIDs2 = $classIDs[$i]
                EndIf
          Next

;Display the results
    Local $output = ""
    For $i = 1 to UBound($classIDs2) -1
                $output = $output & $classIDs2[$i] & @LF
    Next
    Return $output
EndFunc

[ 本帖最后由 cai_super 于 2008-5-14 13:04 编辑 ]

jiataifeng 发表于 2008-5-14 19:20:22

谢谢你!谢谢你!

vv3509 发表于 2008-5-27 11:58:01

下下来研究
学习学习
页: [1]
查看完整版本: 有没有办法列举某一窗口上的所有控件呢?