iXX Posted October 9, 2010 Share Posted October 9, 2010 Hi! I am tryin to send keys to an program in tray icon, but it don't accept Send or ControlSend command. But in old program "Grider" (3.3.8) I can use something like "send event (or command?)" by some other way - it use some W parameter and L parameter ... and this works! (Sending just keyboard keys is not working in Girder too). So, is in the AutoIt some similar feature? THNX, iXX Link to comment Share on other sites More sharing options...
iXX Posted October 14, 2010 Author Share Posted October 14, 2010 No one knows? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted October 14, 2010 Moderators Share Posted October 14, 2010 iXX, I think it more a case of no-one having any idea what you are talking abot! How can you send keys to a tray icon? Do you have to right click on it first to open a menu? If so, then I have some code to do that - and to move around the menu. Please explain in more detail what exactly you are trying to do and we will see how we can help. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
iXX Posted October 14, 2010 Author Share Posted October 14, 2010 OK, I am trying to control program in system tray. Right click to it's icon shows menu:I want to control item "Disable Wallpaper Slideshow" and "Enable Wallpaper Slideshow". I tryed this code:WinActivate("[TITLE:Wallpaper Slideshow LT]")WinWaitActive("[TITLE:Wallpaper Slideshow LT]")ControlSend("[TITLE:Wallpaper Slideshow LT]", "", "", "!D")This sometimes works, but - who knows why - just sometimes (~80% probability?).Second item (Enable Wallpaper Slideshow) don't work at all with this:WinActivate("[TITLE:Wallpaper Slideshow LT]")WinWaitActive("[TITLE:Wallpaper Slideshow LT]")ControlSend("[TITLE:Wallpaper Slideshow LT]", "", "", "!E")As I sed, Girder command (not sending keystrokes) works perfectly always:So, maybe this is little clearer explenation?And, sorry for my bad english... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted October 14, 2010 Moderators Share Posted October 14, 2010 iXX, I have never seen or used any form of message to activate a systray icon context menu. But others might have - so do not despair. However, this code will right-click on the tray icon - all you have to do is enter the tooltip text for the particular icon you want. expandcollapse popup#Include <GuiToolBar.au3> Global $hSysTray_Handle, $iSystray_ButtonNumber Global $sToolTipTitle = "" ; <<<<<<<<<<<<<<<< Enter some tooltip text for the icon you want here $iSystray_ButtonNumber = Get_Systray_Index($sToolTipTitle) If $iSystray_ButtonNumber = 0 Then MsgBox(16, "Error", "Icon not found in system tray") Exit Else Sleep(500) _GUICtrlToolbar_ClickButton($hSysTray_Handle, $iSystray_ButtonNumber, "right") EndIf Exit ;............ Func Get_Systray_Index($sToolTipTitle) ; Find systray handle $hSysTray_Handle = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]') If @error Then MsgBox(16, "Error", "System tray not found") Exit EndIf ; Get systray item count Local $iSystray_ButCount = _GUICtrlToolbar_ButtonCount($hSysTray_Handle) If $iSystray_ButCount = 0 Then MsgBox(16, "Error", "No items found in system tray") Exit EndIf ; Look for wanted tooltip For $iSystray_ButtonNumber = 0 To $iSystray_ButCount - 1 If StringInStr(_GUICtrlToolbar_GetButtonText($hSysTray_Handle, $iSystray_ButtonNumber), $sToolTipTitle) > 0 Then ExitLoop Next If $iSystray_ButtonNumber = $iSystray_ButCount Then Return 0 ; Not found Else Return $iSystray_ButtonNumber ; Found EndIf EndFunc I have used Send("{UP}") and ("{ENTER}") very successfully to manoeuvre my way around a menu opened in this way and to select an item within it - but I would add a Sleep(250) or so before Send("{ENTER}") just to be on the safe side. As your menu appears to have Accelerator keys, you could also try Send "!e" or "!d". I hope this helps. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
iXX Posted October 14, 2010 Author Share Posted October 14, 2010 Yes, this script works!, shows proper menu. Now seems to be easy to complete what I need... Thank you!But: By using Girder as mentioned, I am able to switch this two funkcions of program without any menu appeared!And this is what I asking for: Can AutoIt do this in the same (or similar) way? I mean: hiddenly?And that is the question. Maybe is here someone with experiences with this piece of old software, to fully understand... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted October 14, 2010 Moderators Share Posted October 14, 2010 iXX, Stick around for a while, I have asked someone who understands these things better than I do (not difficult!) to take a look. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Mat Posted October 14, 2010 Share Posted October 14, 2010 But: By using Girder as mentioned, I am able to switch this two funkcions of program without any menu appeared! And this is what I asking for: Can AutoIt do this in the same (or similar) way? I mean: hiddenly? And that is the question. Maybe is here someone with experiences with this piece of old software, to fully understand... The ultimate answer is always yes. AutoIt has access to all the winapi, and ultimately the computer memory itself, so anything is possible. Implementing it is another story. What you refer to in your first post with W and L is a standard windows message. One of the most common is WM_COMMAND. This is used to trigger events for all controls, as well as menus and accelerators. Luclily for you, a similar question has just been asked here, so I have everything ready to test (unfortunately the method I tried didn't work in that test ) You've done the hard bit... getting the command ID for the menu item. All you need to do is send the message using _SendMessage: #include<SendMessage.au3> #include<WindowsConstants.au3> $hWnd = WinGetHandle("[TITLE:Wallpaper Slideshow LT]") $CmdID = 32777 _SendMessage($hWnd, $WM_COMMAND, $CmdID) Does that do it? I tried to test it (difficult without the actual sample) and this worked perfectly: #include<SendMessage.au3> #include<WindowsConstants.au3> #include<GUIMenu.au3> ; Create a window to emulate yours $hGUI = GUICreate("Wallpaper Slideshow LT") ; Create a menu for is $hMenu = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_AddMenuItem($hMenu, 'test', 32777) ; This is the item you are trying to get (same cmd id) ; We register the message so that we can respond to the message GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Click the menu item!! $hWnd = WinGetHandle("[TITLE:Wallpaper Slideshow LT]") $CmdID = 32777 _SendMessage($hWnd, $WM_COMMAND, $CmdID) Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) Switch $iwParam ; iwParam holds the Cmd ID of the clicked item. Case 32777 ; The item was clicked ConsoleWrite('hit' & @CRLF) EndSwitch EndFunc ;==>WM_COMMAND AutoIt Project Listing Link to comment Share on other sites More sharing options...
iXX Posted October 14, 2010 Author Share Posted October 14, 2010 YES!This is it! And works! Seems to AutoIt is able to do everything! Well done! I am happy! Link to comment Share on other sites More sharing options...
Mat Posted October 14, 2010 Share Posted October 14, 2010 YES!This is it! And works! Seems to AutoIt is able to do everything! Well done! I am happy! Wow... It worked first time did it? that makes a nice change from what I've been having recently where nothing's been working like I think it should.Glad to see it sorted (and also glad to see you making the change to AutoIt ) AutoIt Project Listing Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted October 14, 2010 Moderators Share Posted October 14, 2010 Mat, Thank you so much! iXX, Worth the wait, I hope you will agree! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area 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