using System; using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropServices; // The 'windowHandle' parameter will contain the window handle for the: // - Active window when run by hotkey // - Trigger target when run by a Trigger rule // - TitleBar Button owner when run by a TitleBar Button // - Jump List owner when run from a Taskbar Jump List // - Currently focused window if none of these match public static class DisplayFusionFunction { [DllImport("user32.dll", PreserveSig = true, SetLastError = false, CharSet = CharSet.Unicode)] private static extern IntPtr FindWindow(string lpClassName, IntPtr lpWindowName); [DllImport("user32.dll", PreserveSig = true, SetLastError = false, CharSet = CharSet.Unicode)] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, IntPtr ZeroOnly); [DllImport("user32.dll", PreserveSig = true, SetLastError = false, CharSet = CharSet.Unicode)] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, IntPtr lParam); [DllImport("user32.dll", PreserveSig = true, SetLastError = false)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool EnumWindows(EnumWindowCallback callPtr, IntPtr lParam); private delegate bool EnumWindowCallback(IntPtr hwnd, IntPtr lParam); private const uint WM_COMMAND = 0x0111; public static void Run(IntPtr windowHandle) { //change this variable to the name of the icon profile you would like to load string iconProfile = "Default"; //create a dictionary to store the icon size messages and the names of the sizes Dictionary iconSizes = new Dictionary { {"Small", 28752}, {"Medium", 28750}, {"Large", 28751} }; //try to get the shell window IntPtr shell = FindShellWindow(); //if we couldn't find the shell window, exit the script if(shell == IntPtr.Zero) return; //send a message to the shell window to change the icon size to medium SendMessage(shell, WM_COMMAND, iconSizes["Medium"], IntPtr.Zero); BFS.DisplayFusion.LoadDesktopIconsProfile(iconProfile); } private static IntPtr FindShellWindow() { //try to find the shell window. it's either a child of Progman, or tucked away in some WorkerW IntPtr progman = FindWindow("Progman", IntPtr.Zero); IntPtr shell = FindWindowEx(progman, IntPtr.Zero, "SHELLDLL_DefView", IntPtr.Zero); if(shell != IntPtr.Zero) return shell; //enumerate through the windows until we find a WorkerW with SHELLDLL_DefView as it's child EnumWindows(delegate(IntPtr hwnd, IntPtr lParam) { //not a WorkerW if(!BFS.Window.GetClass(hwnd).Equals("WorkerW", StringComparison.OrdinalIgnoreCase)) return true; //see if this WorkerW contains the shell window shell = FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", IntPtr.Zero); //if it doesn't continue enemerating if(shell == IntPtr.Zero) return true; //if we got this far, we found the shell window. stop enumerating. return false; }, IntPtr.Zero); return shell; } }