ptrex Posted March 15, 2006 Share Posted March 15, 2006 I need the view of someone more experienced in AutoIT GUI developer than I am, to solve my problem. I am using the ANYGUI.au3 to add a CTRL to a window. This is working fine, so far; My problem starts here. I need to monitor wether the 'Windows Explorer' exists and than add the button, so far so good. But I need to know as well if a second instance of the 'Windows Explorer' is opened or not. And add a button to that 2nd instance. When swithing between the 2 (or more ...) 'Explorer Windows', the button should appear all the time. Look here for the code example to a button the the Windows File Explorer : #include <ANYGUI.au3> #include <guiconstants.au3> Opt("WinTitleMatchMode", 4) Opt("GUIOnEventMode", 1) While 1 $appWindow = WinGetHandle("classname=ExploreWClass") ;WinWaitActive("",$appWindow) If WinExists($appWindow) Then $Targetwindow = _GuiTarget($appWindow,"","FolderView",40960); mode 1 set so all '_Targetadd(s) go to this window $btn = _TargetaddButton ( "New Button", 740, 3, 80, 30,"","",$Targetwindow); GUICtrlSetOnEvent($btn[0], "Clicked") GUISetState(@SW_SHOW) EndIf sleep(500) WEnd Func Clicked() $test=GUICtrlRead("Edit3") MsgBox(0,"TEST","OK "&$test) EndFunc The only solution I found is to put the script in a tight loop, to monitor wether the window exists and or the window is active. BUT !! This tight loop locks up the windows which basically prevents anything else from happening. Is there a solution to my problem ? For example only monitor when an event happenes or something like that, rather than a tight loop ? Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New Link to comment Share on other sites More sharing options...
GaryFrost Posted March 15, 2006 Share Posted March 15, 2006 I need the view of someone more experienced in AutoIT GUI developer than I am, to solve my problem. I am using the ANYGUI.au3 to add a CTRL to a window. This is working fine, so far; My problem starts here. I need to monitor wether the 'Windows Explorer' exists and than add the button, so far so good. But I need to know as well if a second instance of the 'Windows Explorer' is opened or not. And add a button to that 2nd instance. When swithing between the 2 (or more ...) 'Explorer Windows', the button should appear all the time. Look here for the code example to a button the the Windows File Explorer : #include <ANYGUI.au3> #include <guiconstants.au3> Opt("WinTitleMatchMode", 4) Opt("GUIOnEventMode", 1) While 1 $appWindow = WinGetHandle("classname=ExploreWClass") ;WinWaitActive("",$appWindow) If WinExists($appWindow) Then $Targetwindow = _GuiTarget($appWindow,"","FolderView",40960); mode 1 set so all '_Targetadd(s) go to this window $btn = _TargetaddButton ( "New Button", 740, 3, 80, 30,"","",$Targetwindow); GUICtrlSetOnEvent($btn[0], "Clicked") GUISetState(@SW_SHOW) EndIf sleep(500) WEnd Func Clicked() $test=GUICtrlRead("Edit3") MsgBox(0,"TEST","OK "&$test) EndFunc The only solution I found is to put the script in a tight loop, to monitor wether the window exists and or the window is active. BUT !! This tight loop locks up the windows which basically prevents anything else from happening. Is there a solution to my problem ? For example only monitor when an event happenes or something like that, rather than a tight loop ? I see a problem with the above code if I understand it correctly, for each time thru the loop it will create a new button the window if it exists. You might want to think about using winlist, populate a hold array, each loop, populate another array with latest list, check against hold, see if new window exists, if it does add a button to it. Just some quick thoughts Gary SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
CyberSlug Posted March 15, 2006 Share Posted March 15, 2006 (edited) Ugly code but the idea is that one a new window appears, you add its handle to the list. Then you keep checking the list... However, handles are never removed from the list unless all explorer windows are closed: expandcollapse popup#include <ANYGUI.au3> #include <guiconstants.au3> Opt("WinTitleMatchMode", 4) Opt("GUIOnEventMode", 1) Global $handleList = "" While 1 $appWindow = WinGetHandle("classname=ExploreWClass") If @error Then $handleList = "";no Explorer windows found, so clear the list sleep(500) ContinueLoop EndIf ;; CHECK WHETHER $handleList is up to date;; ;;;;ToolTip("DEBUG: " & $handleList & " " & $appWindow) ;If $appWindow is not in our list, add it If Not StringInStr($handleList, "|" & $appWindow) Then $handleList = $handleList & "|" & $appWindow Addbutton($appWindow) Else ;;MsgBox(4096,"debug","present") EndIf ;If $handleList has no-longer-existing enteries, remove them ;Doesn't work, possibly due to syntax or handle-string conversion issues #cs $rebuiltList = "" $array = StringSplit($handleList, "|") For $i = 1 to $array[0] If WinExists("handle=" & $array[$i]) Then $rebuiltList = $rebuiltList & "|" & $array[$i] Next $handleList = $rebuiltList #ce sleep(500) WEnd Func Clicked() $test=GUICtrlRead("Edit3") MsgBox(0,"TEST","OK "&$test) EndFunc Func AddButton($winhandle) Local $Targetwindow, $btn $Targetwindow = _GuiTarget($winhandle,"","FolderView",40960); mode 1 set so all '_Targetadd(s) go to this window $btn = _TargetaddButton ( "New Button", 740, 3, 80, 30,"","",$Targetwindow); GUICtrlSetOnEvent($btn[0], "Clicked") GUISetState(@SW_SHOW) EndFunc Edit: Similar to gafrost's idea. Edited March 15, 2006 by CyberSlug Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
ptrex Posted March 15, 2006 Author Share Posted March 15, 2006 @Gafrost, @cyberslug It never came up to me, to put everything in an Array ?! But I ran Cyberslug's example and it seems to do what it needs to do. I will work further on this route, to get my job done. Thanks a lot !!!!!!! Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New 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