Decipher Posted April 24, 2013 Posted April 24, 2013 (edited) I was helping another user the other day And decided To make a UDF so here it is. Let me know what ya think. expandcollapse popup#include-once #include <GuiListView.au3> Global Const $SW_HIDENA = 2, $SW_HIDENOACTIVE = 2 ; Examples are below. ; #FUNCTION# ==================================================================================================================== ; Name ..........: _ToggleSystemTrayState ; Description ...: Hide/Show System Tray Icons by Name or Set the State for all Icons ; Syntax ........: _ToggleSystemTrayState([$vTrayItems = ""[, $iStartSearchIndex = 0[, $iSystemTrayState = 0[, $iDebug = 0]]]]) ; Parameters ....: $vTrayItems - [optional] A variant value. Default is "". ; $iStartSearchIndex - [optional] An integer value. Default is 0. Set this to -1 to search from end to start. ; $iSystemTrayState - [optional] An integer value. Default is 0. ; $iDebug - [optional] An integer value. Default is 0. Set this to either @SW_SHOW or 1 to see dialogs and debug information. ; Return values .: None ; Author ........: Decipher ; Modified ......: ; Remarks .......: Tested only on XP ; ; $iSystemTrayState can be one of the following: ; @SW_SHOW == ALWAYS_SHOW == 5 ; @SW_HIDE == ALWAYS_HIDE == 0 ; $SW_HIDENA == HIDE WHEN INACTIVE == 2 ; ; $vTrayItems can be a string for a specific icon or an array for multiple icons ; There is no error checking implemented but feel free to change it to your needs. ; ; Related .......: ; Link ..........: ; Example .......: Yes, The examples need to be uncommented to run. Remove the ( ;- ) prefix on the example to be ran. ; =============================================================================================================================== ;;;; Set all icons to hide when inactive. ;;;; ;- _ToggleSystemTrayState($SW_HIDENA) ; Example #1 ;;;; Hide all system tray icons. ;;;; ;- _ToggleSystemTrayState(@SW_HIDE) ; Example #2 ;;;; Show two specific icons. ;;;; ;- Local $aIcons[2] = ["Local Area Connection", "Volume"] ; Example #3 ;- _ToggleSystemTrayState($aIcons, 0, @SW_SHOW) ;;;; Hide a specific icon. ;;;; ;- _ToggleSystemTrayState("Volume", 0, @SW_HIDE) ; Example #4 ;;;; Show all system tray icons. ;;;; ;- _ToggleSystemTrayState(@SW_SHOW) ; Example #5 ;;;; Hide all system tray icons but show the dialogs aka debug mode and log the names of the icons hidden. ;;;; ;- _ToggleSystemTrayState("", 0, @SW_HIDE, 1) ; Example #6 Func _ToggleSystemTrayState($vTrayItems = "", $iStartSearchIndex = 0, $iSystemTrayState = 0, $iDebug = 0) If IsInt($vTrayItems) Then $iSystemTrayState = $vTrayItems $vTrayItems = "" EndIf Local Const $sOPTIONS_DIALOG_PROCESS = "rundll32.exe shell32.dll, Options_RunDLL 1" Local Const $sTASKBAR_PROPERTIES_TITLE = "[TITLE:Taskbar and Start Menu Properties; CLASS:#32770; INSTANCE:1]" Local Const $sCUSTOMIZE_BUTTON = "[ClassnameNN:Button10]", $sSENDKEYS = "!c" Local Const $sTASKBAR_CUSTOMIZE_TITLE = "[TITLE:Customize Notifications; CLASS:#32770; INSTANCE:1]" Local Const $sTRAYICONS_LISTVIEW = "[CLASS:SysListView32; INSTANCE:1]" Local Const $sLISTVIEW_COMBOX_CONTROL = "[CLASS:ComboBox; INSTANCE:1]" Local Const $sTASKBAR_CHILD_OK_BUTTON = "[CLASS:Button; INSTANCE:2]" Local Const $iRUNDLL32 = Run($sOPTIONS_DIALOG_PROCESS) WinWait($sTASKBAR_PROPERTIES_TITLE, "", 2000) Local Const $hTASKBAR_DIALOG = WinGetHandle($sTASKBAR_PROPERTIES_TITLE) WinSetState($hTASKBAR_DIALOG, "", $iDebug) ControlSend($hTASKBAR_DIALOG, "", ControlGetHandle($hTASKBAR_DIALOG, "", $sCUSTOMIZE_BUTTON), $sSENDKEYS) WinWait($sTASKBAR_CUSTOMIZE_TITLE, "", 2000) $hTASKBAR_CHILD_DIALOG = WinGetHandle($sTASKBAR_CUSTOMIZE_TITLE) WinSetState($hTASKBAR_CHILD_DIALOG, "", $iDebug) Local Const $hDIALOG_LISTVIEW = ControlGetHandle($hTASKBAR_CHILD_DIALOG, "", $sTRAYICONS_LISTVIEW) Local $iListViewItem = 0, $hComboBox_Instance = 0, $aTrayIcon[1], $iTrayIcon, $iSkipTask = False, $sTrayItemText If IsArray($vTrayItems) Or $vTrayItems <> "" Then If Not IsArray($vTrayItems) Then $aTrayIcon[0] = $vTrayItems Else $aTrayIcon = $vTrayItems EndIf For $i = 0 To UBound($aTrayIcon, 1) - 1 Step 1 $iTrayIcon = _GUICtrlListView_FindInText($hDIALOG_LISTVIEW, $aTrayIcon[$i], $iStartSearchIndex) If $iDebug Then ConsoleWrite("Tray Icon: " & @TAB & _GUICtrlListView_GetItemText($hDIALOG_LISTVIEW, $iTrayIcon) & @CRLF) EndIf _GUICtrlListView_SetItemFocused($hDIALOG_LISTVIEW, $iTrayIcon) $hComboBox_Instance = ControlGetHandle($hTASKBAR_CHILD_DIALOG, "", $sLISTVIEW_COMBOX_CONTROL) ControlSend($hTASKBAR_CHILD_DIALOG, "", $hDIALOG_LISTVIEW, "{SPACE}") For $iLoopIndex = 1 To 3 Step 1 ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{DOWN}") Next If $iSystemTrayState <> 5 Then ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{UP}") If $iSystemTrayState = 2 Then ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{UP}") EndIf EndIf Next $iSkipTask = True EndIf While WinExists($hTASKBAR_CHILD_DIALOG) If $iSkipTask Then ExitLoop EndIf If $iListViewItem >= _GUICtrlListView_GetItemCount($hDIALOG_LISTVIEW) + 1 Then ExitLoop EndIf $iListViewItem += 1 ControlFocus($hTASKBAR_CHILD_DIALOG, "", $hDIALOG_LISTVIEW) If $iDebug Then $sTrayItemText = _GUICtrlListView_GetItemText($hDIALOG_LISTVIEW, $iListViewItem) If $sTrayItemText <> "" Then ConsoleWrite("Tray Icon: " & @TAB & $sTrayItemText & @CRLF) EndIf EndIf $hComboBox_Instance = ControlGetHandle($hTASKBAR_CHILD_DIALOG, "", $sLISTVIEW_COMBOX_CONTROL) For $i = 1 To 3 Step 1 ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{DOWN}") Next If $iSystemTrayState <> 5 Then ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{UP}") If $iSystemTrayState = 2 Then ControlSend($hTASKBAR_CHILD_DIALOG, "", $hComboBox_Instance, "{UP}") EndIf EndIf ControlSend($hTASKBAR_CHILD_DIALOG, "", $hDIALOG_LISTVIEW, "{DOWN}") WEnd ControlSend($hTASKBAR_CHILD_DIALOG, "", $sTASKBAR_CHILD_OK_BUTTON, "{ENTER}") WinClose($hTASKBAR_DIALOG) If ProcessExists($iRUNDLL32) Then ProcessClose($iRUNDLL32) EndIf EndFunc ;==>_ToggleSystemTrayState Edited May 5, 2013 by Decipher Spoiler
JohnOne Posted April 24, 2013 Posted April 24, 2013 It flashes a window up and just stops not hiding the volume icon Anonymous AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Decipher Posted May 5, 2013 Author Posted May 5, 2013 JohnOne, Do you mind elaborating as to how your implementing the UDF? Are you just running the example? What OS version are you using? The best of my knowledge this function works as advertised when used appropiately. Anonymous Spoiler
JohnOne Posted May 5, 2013 Posted May 5, 2013 Just the example, win 7 32. Some window just appears, then disappears, and none of my system tray icons are affected at all. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Decipher Posted May 5, 2013 Author Posted May 5, 2013 This UDF depends on the dialog's design remain unchanged which might not be the case with version of Windows after XP. I have updated the examples where you can understand how to use them. Spoiler
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