Jump to content
Sign in to follow this  

Control handle for SysTreeView32

Recommended Posts

Hi Friends,

I want to expand and click on some items on a tree view control. The AutoIT window info tool identifies the control as [CLASS:SysTreeView32; INSTANCE:1] but I failed to get the control handle to use with GuiTreeView methods. 

Please see the code below. On execution it always fails with ControlGetHandle method.

Please help.

#include <Process.au3>
#Include <GuiTreeView.au3>

;Execute group policy editor
If Not WinExists("Local Group Policy Editor") Then
    _RunDOS ( 'gpedit.msc') 
WinwaitActive("Local Group Policy Editor")
;Select 'Administartive Template' from the tree view
$nTreeView = ControlGetHandle ( "Local Group Policy Editor", "", "[CLASS:SysTreeView32; INSTANCE:1]" )
If @error = 0 Then MsgBox(0,"Error", "Couldn't get tree view control handle.")
ControlTreeView  ( "Local Group Policy Editor", "", "[CLASS:SysTreeView32; INSTANCE:1]" , "Expand", "#0" )
If @error = 0 Then MsgBox(0,"Error", "Couldn't expand tree view.")

Share this post

Link to post
Share on other sites

@error = 0 means there was no error, and if the function fails the return is 0, and @error is set to something other than 0. Your error check is wrong for both ControlGetHandle and for ControlTreeview. 

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post

Link to post
Share on other sites

I'm extremely sorry for making such a stupid mistake and to post it here.  :(

Thank you so much for your help BrewManNH.

$nTreeView = ControlGetHandle ( "Local Group Policy Editor", "", "[CLASS:SysTreeView32; INSTANCE:1]" )
If @error <> 0 Then MsgBox(0,"Error", "Couldn't get tree view control handle.")
ControlTreeView  ( "Local Group Policy Editor", "", "[CLASS:SysTreeView32; INSTANCE:1]" , "Expand", "#0" )
If @error <> 0 Then MsgBox(0,"Error", "Couldn't expand tree view.")

Share this post

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By antonioj84
      ;Hi there I am trying to to search a specific path c:\Documents and settings\rogers\Local Settings ;the code below work but can someone point how to define the path directly, instead of searching the folder then click to select and so on ; this code below work, it finds each folder click until Local settings $hWnd5 = WinGetHandle($Title,"") Sleep(300) $hlist = ControlGetHandle($hWnd5, "", "SysListView322") $listid = _GUICtrlListView_FindText($hlist,"Documents and Settings" ) _GUICtrlListView_ClickItem($hlist, $listid, "left", False, 2) Sleep(100) $hlist = ControlGetHandle($hWnd5, "", "SysListView322") $listid = _GUICtrlListView_FindText($hlist,"rogers" ) _GUICtrlListView_ClickItem($hlist, $listid, "left", False, 2) Sleep(100) $hlist = ControlGetHandle($hWnd5, "", "SysListView322") $listid = _GUICtrlListView_FindText($hlist,"Local Settings" ) _GUICtrlListView_ClickItem($hlist, $listid, "left", False, 1) **************************************************************************************************************************************************************** ;This code below does Not work some ideas ;$spath = "C:\" ;$sgettext = ControlTreeView($Title,"","SysTreeView322", "select", $spath) ;$spath = "C:\ | Documents and Settings" ;$sgettext = ControlTreeView($Title,"","SysTreeView322", "select", $spath) ;$spath = "Documents and Settings | rogers" ;$sgettext = ControlTreeView($Title,"","SysTreeView322", "select", $spath) ;$spath = "Documents and Settings | rogers| Local Settings" ;$sgettext = ControlTreeView($Title,"","SysTreeView322", "select", $spath) ;ConsoleWrite($spath &@CRLF) ;$Selectall = ControlListView($hWnd5, "", "SysListView322", $sgettext) ;$Finditem = ControlListView($hWnd5, "", "SysListView322", "Finditem", "Local Settings") ;$Select = ControlListView($hWnd5, "", "SysListView322", "Select",$Finditem) ; consolewrite($Select)                                                             

    • By tremolux66
      I'm automating a commercial app that will copy files/folders from an optical disc to a folder on a hard drive, and am unable to check an item in a SysTreeView32 control in the app's main window. The disc and its top-level folders are displayed as a simple tree, and I've written a test script that probes and manipulates the control by calling ControlTreeView(). The script cannot, on its own, check the desired item in the TreeView, but it can check the item with some manual intervention. I need to know if there's something missing, or if a different approach is needed.
      The operations currently being tested are:
      Waiting until the contents of the TreeView control appear before proceeding (the app can take a long time to display the control contents), and Checking the first item's checkbox (i.e., the disc itself), thus selecting the entire disc contents for copying. The test script can complete the first operation successfully, but not the second: there is a side-effect of the first that apparently causes the second one to fail.
      When the control's contents eventually become visible, they look like this; note the position of the scrollbar:

      The wait is done by repeatedly selecting the first item until @error=0 using the following code fragment (note: the code has been edited for brevity and to remove certain information):
      ; Wait for the DM window to become active ; -- _WinWaitActivate() is from AU3 Recorder-generated code $hWnd1 = _WinWaitActivate($sDMtitle,"") ; Wait for the SysTreeViewList32 control to display its first item $sCtrlAdvMode = "[CLASS:SysTreeView32; INSTANCE:1]" $i = 0 $iRetVal = ControlTreeView($hWnd1,"",$sCtrlAdvMode,"Select","#0") $iAtError = @error While $iAtError <> 0 $i += 1 If $i > 20 Then ExitLoop Sleep(5000) $iRetVal = ControlTreeView($hWnd1,"",$sCtrlAdvMode,"Select","#0") $iAtError = @error WEnd If $i > 20 Then ConsoleWrite("Select: Unable to select 1st item after 20 tries" & @CRLF) This works - the script successfully loops until the contents are visible, but when the item selection finally succeeds, the control contents scroll horizontally, hiding the checkboxes:

      The script then tries to check the first item by calling ControlTreeView() from the following code fragment (again, edited for brevity, etc.):
      ; Check the first item $iRetVal = ControlTreeView($hWnd1,"",$sCtrlAdvMode,"Check","#0") If @error <> 0 Then ConsoleWrite("Check: Unable to check 1st item, return=" & $iRetVal & ", @error=" & @error & ", @extended=" & @extended & @CRLF) $iRetVal = ControlTreeView($hWnd1,"",$sCtrlAdvMode,"IsChecked","#0") ConsoleWrite("IsChecked: return=" & $iRetVal & ", @error=" & @error & ", @extended=" & @extended & @CRLF) The Check call always returns @error=1, and the IsChecked call returns without error, but with a value of False. (The boxes remain unchecked on the screen as well.)
      HOWEVER: With some experimentation I discovered that if I put a pause in the test script so that I can manually scroll the TreeView to make the checkboxes visible, then the Check call works - the boxes in the control are all checked, and the IsChecked call returns True.
      Any suggestions for making this work under program control (no manual intervention)? The application needs to be completely automated.
      Note: I have tried another method for the wait-loop (getting the first item's checkbox value), hoping it would achieve the desired result without scrolling the tree. However, the IsChecked call returns with @error=0 (and False) on the first call, long before the tree was visible.
  • Create New...