leuce Posted August 6, 2006 Share Posted August 6, 2006 G'day everyone Well, no, there isn't a "ControlExists", but can one mimick such an action fairly easily? See, I need to navigate down a tree view and take screenshots of the leaf nodes. The nodes themselves do not have unique names in the Window Spy, so I have to rely on other methods to tell the script that a downarrow-movement has reached a leaf node. Fortunately, at every leaf node, there is a control (a button) present in the window which is not present when the focus is on a non-leaf item. Now I had wished that I could have told the script to press downarrow until ControlExists... but can you think of any other method which might do the trick? Attached are two screenshots of the tree view. I can also not find any way to determine how many leaf nodes exist in the tree (except counting them by hand), but if I could use ControlExists, then I could tell the script that the end of the tree has been reached if the control keeps on "existing" even though the downarrow is being pressed... because in the tree, the leaf nodes never follow each other directly (there is always at least one (sometimes two) non-leaf between the leaf nodes). Thanks in advance Samuel Link to comment Share on other sites More sharing options...
leuce Posted August 6, 2006 Author Share Posted August 6, 2006 O, wait, I can easily determine the end of the end of the tree, because the last node always contains the visible window text "version info". But I would still have to figure out a way to know when to take the screenshots (and I don't want to take screenshots of everything). Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted August 6, 2006 Moderators Share Posted August 6, 2006 ControlCommand() and IsEnabled wouldn't work? Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted August 6, 2006 Moderators Share Posted August 6, 2006 (edited) Decided to make a _ControlExists() UDF... Opt('WinTitleMatchMode', 4) If _ControlExists('classname=SciTEWindow', '', 'Scintilla2') Then MsgBox(64, 'Info:', 'Control exist') If Not _ControlExists('classname=SciTEWindow', '', 'Something') Then MsgBox(64, 'Info:', 'Control does not exist') Func _ControlExists($hWin, $sText = '', $hCID = '') If $hCID = '' Then Return SetError(1, 0, 0) If IsString($hWin) Then $hWin = WinGetHandle($hWin) $hCID = ControlGetHandle($hWin, '', $hCID) If $hCID = '' Then SetError(2, 0, 0) Local $hCtrlWnd, $sClassList = WinGetClassList($hWin) Local $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF) For $iCount = UBound($sSplitClass) - 1 To 1 Step - 1 Local $nCount = 0 While 1 $nCount += 1 $hCtrlWnd = ControlGetHandle($hWin, '', $sSplitClass[$iCount] & $nCount) If $hCtrlWnd = '' Then ExitLoop If $hCID = $hCtrlWnd Then Return 1 WEnd Next Return SetError(3, 0, 0) EndFunc Edited August 6, 2006 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now