littlebigman Posted July 18, 2023 Posted July 18, 2023 (edited) Hello, I need to restore/maximize an app running in the systray, and click on one of its buttons. The following does find the process, but the app isn't displayed: If ProcessExists ( "blah.exe" ) then ConsoleWrite("Found" & @CRLF) ;NOTHING WinSetState("[TITLE:mytitle; CLASS:myclass]", "",@SW_RESTORE ) ;NOTHING WinSetState("[CLASS:myclass]", "",@SW_RESTORE ) ;NOTHING WinSetState("[CLASS:myclass]", "",@SW_MAXIMIZE ) ;NOTHING WinActivate("[TITLE:mytitle; CLASS:myclass]", "") Else ConsoleWrite("Not found") EndIf Is this UDF still the recommended way to work with apps in the systray? Thank you. Edited July 18, 2023 by littlebigman
sylremo Posted July 19, 2023 Posted July 19, 2023 Here is my take:WinExist to check whether the GUI actually exists: - If it exists and WinActivate/WinSetState does nothing, then consider adding #RequireAdmin. - If not, you might have to trigger the GUI creation by clicking the tray icon. maybe?
littlebigman Posted July 19, 2023 Author Posted July 19, 2023 Thanks, I'll give it a try. The UDF must have this line commented out: #include <SysTray_UDF.au3> ;https://www.autoitscript.com/forum/topic/13704-systray_udf/ ;error: $WM_GETTEXT previously declared as a 'Const'. ;Const $WM_GETTEXT = 13 ; Included in GUIConstants Restoring/maximizing an app running in the systray seems a bit involved: ;Systray_test.au3 ; -- Example 5 -- ; Left-click Feedreader's icon on system tray ; Press hide inactive icon's button part is from Valik's refresh system tray script! $oldMatchMode = Opt("WinTitleMatchMode", 4) $oldChildMode = Opt("WinSearchChildren", 1) $class = "classname=Shell_TrayWnd" $hControl = ControlGetHandle($class, "", "Button2") ; get tray position and move there. Helps if Auto Hide tray option is used. $posTray = WinGetPos(_FindTrayToolbarWindow ()) MouseMove($posTray[0], $posTray[1]) $index = _SysTrayIconIndex ("feedreader.exe"); Change this to some other application if needed If $index <> -1 Then $pos = _SysTrayIconPos ($index) If $pos = -1 Then ; ***** Moved by CatchFish ***** ; If XP and the Hide Inactive Icons mode is active If $hControl <> "" And ControlCommand($class, "", $hControl, "IsVisible", "") Then ControlClick($class, "", $hControl) Sleep(250); Small delay to allow the icons to be drawn EndIf ; ****************************** $pos = _SysTrayIconPos ($index) If $pos = -1 Then Exit ; ** A real error this time;) EndIf MouseMove($pos[0], $pos[1]) Sleep(1000) MouseClick("left") EndIf ConsoleWrite(@CRLF & @CRLF & "Pos[0]: " & $pos[0] & "$pos[1]: " & $pos[1]) ; Restore Opt settings Opt("WinTitleMatchMode", $oldMatchMode) Opt("WinSearchChildren", $oldChildMode)
littlebigman Posted July 20, 2023 Author Posted July 20, 2023 Getting closer: The mouse right-clicks the icon and the pop-up menu is displayed, but then It doesn't hit the down arrow + Enter to restore the window. Maybe focus must be put on the icon: Const $MYAPP = "blah.exe" Local $index = _SysTrayIconIndex ($MYAPP) If $index <> -1 Then $pos = _SysTrayIconPos ($index) ;_ArrayDisplay($pos) MouseMove($pos[0], $pos[1]) Sleep(1000) MouseClick("right") Sleep(1000) ;~ Send("{DOWN}") ;Doesn't click ;~ Sleep(1000) ;~ Send("{ENTER}") EndIf
Solution littlebigman Posted July 20, 2023 Author Solution Posted July 20, 2023 Kludgy, but it works by using the Windows key + "b", and the app's index number: Const $MYAPP = "blah.exe" ConsoleWrite(StringFormat("Index: %s" & @CRLF,_SysTrayIconIndex ($MYAPP))) Local $index = _SysTrayIconIndex ($MYAPP) Send('{LWINDOWN}b{LWINUP}') Sleep(500) Send('{RIGHT ' & $index & '}{ENTER}') Sleep(500) WinActivate("[TITLE:blah; CLASS:blah]")
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