[Ex] Liste des contrôles dans une fenêtre donnée
Posté : ven. 23 nov. 2012 22:24
par jguinch
Bonsoir
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 :
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