Page 1 sur 1
[..] Détection des ascenseurs dans une fenêtre
Posté : ven. 06 sept. 2013 09:17
par Ebola
Bonjour
La question peut paraitre bête, mais aucune fonction n'aborde le sujet clairement
Je souhaite bien détecter la présence d'ascenseurs (verticla ou horizontal), mais dans une fenêtre lambda, pas dans une GUI créée en AutoIT
J'ai parcouru ddivers forum ou les scrollbars sont abordées pour être manipulées après création, mais moi je ne veux rien créer, juste savoir s'il y'en a
Merci pour toute aide
Re: [..] Détection des ascenseurs dans une fenêtre
Posté : ven. 06 sept. 2013 11:08
par TopXm
Hello
En fait, ça n'est pas aussi simple car dans la plupart des cas, la Scrollbar que tu vois fait partie d'un autre contrôle,
du coup quand tu listes le contenu des divers contrôles de ta fenêtre, tu n'auras pas la ScrollBar. Regarde par exemple,
dans la fenêtre d'aide de Scite, tu vois deux ScrollBars :
http://pix.toile-libre.org/upload/origi ... 458079.png
et pourtant, la 1ere ScrollBar fait partie de la Treeview et la seconde de la classe Internet Explorer_Server.
Perso, je me suis fait une fonction ( "_GuiCtrlGetGroupAndInfos" ) mais je présume qu'elle ne te conviendra pas.
Néanmoins tu peux toujours regarder par ici :
http://www.autoitscript.fr/forum/viewto ... 480#p80480
La fonction se nomme "_GuiCtrlGetGroupAndInfos". Si tu as besoin de plus d'informations, n'hésite pas
++

Re: [..] Détection des ascenseurs dans une fenêtre
Posté : ven. 06 sept. 2013 14:25
par mikell
Une fonction de listage des controles de la fenêtre ferait effectivement du bien, dans ce cas ce genre de truc pourrait marcher
Code : Tout sélectionner
#include <WinAPI.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
Opt("WinTitleMatchMode", -2)
;; $hWnd = WinGetHandle("test")
$hWnd = ControlGetHandle("test", "", "[CLASS:Edit; INSTANCE:1]")
$style = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
If BitAND($style, $WS_VSCROLL) = $WS_VSCROLL Then msgbox(0,"", "ok" )
Re: [..] Détection des ascenseurs dans une fenêtre
Posté : ven. 06 sept. 2013 15:05
par Ebola
Il est impossible de piocher l'existence ou non de $WS_VSCROLL, j'ai essayé, je vois bien les autres style, mais rien sur les barres
J'ai bien tenté ton UDF TopXm, mais l'include Ex est introuvable chez moi ?!
Re: [..] Détection des ascenseurs dans une fenêtre
Posté : dim. 08 sept. 2013 20:04
par mikell
C'est l'include WinAPIEx.au3
Sinon le problème est quasiment insoluble
Ce code
► Afficher le texte
Code : Tout sélectionner
#include <WinAPIEx.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
Opt("WinTitleMatchMode", -2)
Global $ok = 0, $control = ""
$hWndtest = WinGetHandle("scite") ; exemple
$Data = _WinAPI_GetWindowLong($hWndtest, $GWL_STYLE)
$wstyle = '0x' & Hex($Data, 8)
If BitAND($wstyle, $WS_VSCROLL) = $WS_VSCROLL Then $ok = 1
$list = _WinAPI_EnumChildWindows($hWndtest)
For $i = 1 to $list[0][0]
$Data = _WinAPI_GetWindowLong($list[$i][0], $GWL_STYLE)
$wstyle = '0x' & Hex($Data, 8)
If BitAND($wstyle, $WS_VSCROLL) = $WS_VSCROLL Then
$ok = 1
$control &= $list[$i][1] &@crlf
EndIf
Next
If $ok = 1 Then
msgbox(0,"", "ok" &@crlf& $control)
Else
msgbox(0,"", "pas ok" )
EndIf
va marcher quelquefois en arrivant à détecter vscroll dans les controles internes de la fenêtre, mais sur beaucoup de fenêtres ça ne marchera pas (IE, Mozilla etc)