Récemment, j'ai eu besoin pour un script de lister tous les contrôles présents dans une ou plusieurs fenêtre afin de récupérer des informations (ID, Instance, taille, emplacement ....).
Voici donc le résultat :
► Afficher le texte
Code : Tout sélectionner
#Include <WinAPI.au3>
; Example ######################################################################################################
#Include <Array.au3>
Local $list = _WinGetControlList(WinGetHandle("[ACTIVE]") )
If $list = 0 Then Exit MsgBox(0, "Controls list" , "No control found for " & WinGetTitle("[ACTIVE]") )
_ArrayDisplay($list, "Controls list", Default, 0, "|", "CLASS|ClassnameNN|Advanced Mode|Handle|Text|ID|Position in window|Size|Position in screen|Visible")
; ##############################################################################################################
Func _WinGetControlList($sTitle, $sText = "")
Local $n = 0, $iCount
Local $aControlPos, $iInstance, $aScreenPos
Local $sClassList = WinGetClassList($sTitle, $sText)
If $sClassList = "" Then Return SetError(1, 0, 0)
Local $aResult = StringRegExp($sClassList, "(\N+)", 3)
If NOT IsArray($aResult) Then Return SetError(1, 0, 0)
Redim $aResult[UBound($aResult)][10]
Local $aClasses = StringRegExp($sClassList, "(?s)(?:\A|\R)(\N+)(?=\R)(?!(?:\R\N+)*\R\1\R)", 3)
For $i = 0 To UBound($aClasses) - 1
StringRegExpReplace($sClassList, "\Q" & $aClasses[$i] & "\E\R", "")
$iCount = @extended
For $iInstance = 1 To $iCount
$aResult[$n][0] = $aClasses[$i] ; Class
$aResult[$n][1] = $aClasses[$i] & $iInstance ; ClassnameNN
$aResult[$n][2] = "[CLASS:" & $aClasses[$i] & "; INSTANCE:" & $iInstance& "]" ; Advanced mode
$aResult[$n][3] = ControlGetHandle($sTitle, $sText, $aResult[$n][2]) ; Handle
$aResult[$n][4] = ControlGetText($sTitle, $sText, $aResult[$n][3] ) ; Text
$aResult[$n][5] = _WinAPI_GetDlgCtrlID($aResult[$n][3]) ; ID
$aControlPos = ControlGetPos($sTitle, $sText, $aResult[$n][3])
If IsArray($aControlPos) Then
$aResult[$n][6] = "X=" & $aControlPos[0] & " ; Y=" & $aControlPos[1] ; Position X,Y (in the Window)
$aResult[$n][7] = "W=" & $aControlPos[2] & " ; H=" & $aControlPos[3] ; Width and Height
EndIf
$aScreenPos = WinGetpos($aResult[$n][2])
If IsArray($aScreenPos) Then
$aResult[$n][8] = "X=" & $aScreenPos[0] & " ; Y=" & $aScreenPos[1] ; Position X,Y (relative to screen)
EndIf
$aResult[$n][9] = ControlCommand($sTitle, $sText, $aResult[$n][3], "IsVisible") ; Visible
$n += 1
Next
Next
Return $aResult
EndFunc