private void WindowGetMsg(object sender, WndProcEventArgs e) { var message = e.Message.ToInt64(); if (message == WM_SYSCOMMAND) { //string dbgMessage = string.Format("WM_SYSCOMMAND, Form, Handle = {0}, WParam = {1}", e.Handle, e.WParam); //System.Diagnostics.Trace.WriteLine(dbgMessage); var window = _windows.FirstOrDefault(w => w.Handle == e.Handle); if (window != null) { var lowOrder = e.WParam.ToInt64() & 0x0000FFFF; switch (lowOrder) { case MenuItemId.SC_MAXIMIZE: { window.Menu.UncheckSizeMenu(); } break; case MenuItemId.SC_MINIMIZE_TO_SYSTEMTRAY: { window.MinimizeToSystemTray(); } break; case MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY: { bool r = window.Menu.IsMenuItemChecked(MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY); window.Menu.CheckMenuItem(MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY, !r); window.SetStateMinimizeToTrayAlways(!r); } break; case MenuItemId.SC_SUSPEND_TO_SYSTEMTRAY: { window.MinimizeToSystemTray(); Thread.Sleep(100); window.Suspend(); } break; case MenuItemId.SC_INFORMATION: { var infoForm = new InfoForm(window.GetWindowInfo(), _settings.Language); infoForm.Show(window.Win32Window); } break; case MenuItemId.SC_SAVE_SCREEN_SHOT: { var bitmap = WindowUtils.PrintWindow(window.Handle); var dialog = new SaveFileDialog { OverwritePrompt = true, ValidateNames = true, Title = _settings.Language.GetValue("save_screenshot_title"), FileName = _settings.Language.GetValue("save_screenshot_filename"), DefaultExt = _settings.Language.GetValue("save_screenshot_default_ext"), RestoreDirectory = false, Filter = _settings.Language.GetValue("save_screenshot_filter") }; if (dialog.ShowDialog(window.Win32Window) == DialogResult.OK) { var fileExtension = Path.GetExtension(dialog.FileName).ToLower(); var imageFormat = fileExtension == ".bmp" ? ImageFormat.Bmp : fileExtension == ".gif" ? ImageFormat.Gif : fileExtension == ".jpeg" ? ImageFormat.Jpeg : fileExtension == ".png" ? ImageFormat.Png : fileExtension == ".tiff" ? ImageFormat.Tiff : ImageFormat.Wmf; bitmap.Save(dialog.FileName, imageFormat); } } break; case MenuItemId.SC_COPY_WINDOW_TEXT: { var text = window.ExtractText(); if (!string.IsNullOrEmpty(text)) { Clipboard.SetText(text); } } break; case MenuItemId.SC_COPY_WINDOW_TITLE: { var text = window.GetWindowText(); if (!string.IsNullOrEmpty(text)) { Clipboard.SetText(text); } } break; case MenuItemId.SC_COPY_FULL_PROCESS_PATH: { var path = window.Process?.GetMainModuleFileName(); if (!string.IsNullOrEmpty(path)) { Clipboard.SetText(path); } } break; case MenuItemId.SC_CLEAR_CLIPBOARD: { Clipboard.Clear(); } break; case MenuItemId.SC_DRAG_BY_MOUSE: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_DRAG_BY_MOUSE); window.Menu.CheckMenuItem(MenuItemId.SC_DRAG_BY_MOUSE, !isChecked); } break; case MenuItemId.SC_OPEN_FILE_IN_EXPLORER: { try { SystemUtils.RunAs("explorer.exe", "/select, " + window.Process.GetMainModuleFileName(), true, UserType.Normal); } catch { } } break; case MenuItemId.SC_MINIMIZE_OTHER_WINDOWS: case MenuItemId.SC_CLOSE_OTHER_WINDOWS: { EnumWindows((IntPtr handle, int lParam) => { if (handle != IntPtr.Zero && handle != Handle && handle != window.Handle && WindowUtils.IsAltTabWindow(handle)) { if (lowOrder == MenuItemId.SC_CLOSE_OTHER_WINDOWS) { PostMessage(handle, WM_CLOSE, 0, 0); } else { PostMessage(handle, WM_SYSCOMMAND, MenuItemId.SC_MINIMIZE, 0); } } return(true); }, 0); } break; case MenuItemId.SC_TOPMOST: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_TOPMOST); window.Menu.CheckMenuItem(MenuItemId.SC_TOPMOST, !isChecked); window.MakeTopMost(!isChecked); } break; case MenuItemId.SC_HIDE_FOR_ALT_TAB: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_HIDE_FOR_ALT_TAB); window.Menu.CheckMenuItem(MenuItemId.SC_HIDE_FOR_ALT_TAB, !isChecked); window.HideForAltTab(!isChecked); } break; case MenuItemId.SC_SEND_TO_BOTTOM: { window.SendToBottom(); } break; case MenuItemId.SC_AERO_GLASS: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_AERO_GLASS); window.AeroGlass(!isChecked); window.Menu.CheckMenuItem(MenuItemId.SC_AERO_GLASS, !isChecked); } break; case MenuItemId.SC_ROLLUP: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_ROLLUP); window.Menu.CheckMenuItem(MenuItemId.SC_ROLLUP, !isChecked); if (!isChecked) { window.RollUp(); window.Menu.UncheckSizeMenu(); } else { window.UnRollUp(); } } break; case MenuItemId.SC_SIZE_DEFAULT: { window.Menu.UncheckSizeMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_SIZE_DEFAULT, true); window.ShowNormal(); window.RestoreSize(); window.Menu.UncheckMenuItems(MenuItemId.SC_ROLLUP); } break; case MenuItemId.SC_SIZE_CUSTOM: { var sizeForm = new SizeForm(window, _settings); var result = sizeForm.ShowDialog(window.Win32Window); if (result == DialogResult.OK) { window.ShowNormal(); if (_settings.Sizer == WindowSizerType.WindowWithMargins) { window.SetSize(sizeForm.WindowWidth, sizeForm.WindowHeight, sizeForm.WindowLeft, sizeForm.WindowTop); } else if (_settings.Sizer == WindowSizerType.WindowWithoutMargins) { var margins = window.GetSystemMargins(); window.SetSize(sizeForm.WindowWidth + margins.Left + margins.Right, sizeForm.WindowHeight + margins.Top + margins.Bottom, sizeForm.WindowLeft, sizeForm.WindowTop); } else { window.SetSize(sizeForm.WindowWidth + (window.Size.Width - window.ClientSize.Width), sizeForm.WindowHeight + (window.Size.Height - window.ClientSize.Height), sizeForm.WindowLeft, sizeForm.WindowTop); } window.Menu.UncheckSizeMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_SIZE_CUSTOM, true); window.Menu.UncheckMenuItems(MenuItemId.SC_ROLLUP); } } break; case MenuItemId.SC_TRANS_DEFAULT: { window.Menu.UncheckTransparencyMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_TRANS_DEFAULT, true); window.RestoreTransparency(); } break; case MenuItemId.SC_TRANS_CUSTOM: { var opacityForm = new TransparencyForm(window, _settings); var result = opacityForm.ShowDialog(window.Win32Window); if (result == DialogResult.OK) { window.SetTransparency(opacityForm.WindowTransparency); window.Menu.UncheckTransparencyMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_TRANS_CUSTOM, true); } } break; case MenuItemId.SC_ALIGN_DEFAULT: { window.Menu.UncheckAlignmentMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_ALIGN_DEFAULT, true); window.RestorePosition(); } break; case MenuItemId.SC_ALIGN_CUSTOM: { var positionForm = new PositionForm(window, _settings.Language); var result = positionForm.ShowDialog(window.Win32Window); if (result == DialogResult.OK) { window.ShowNormal(); window.SetPosition(positionForm.WindowLeft, positionForm.WindowTop); window.Menu.UncheckAlignmentMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_ALIGN_CUSTOM, true); } } break; case MenuItemId.SC_TRANS_100: case MenuItemId.SC_TRANS_90: case MenuItemId.SC_TRANS_80: case MenuItemId.SC_TRANS_70: case MenuItemId.SC_TRANS_60: case MenuItemId.SC_TRANS_50: case MenuItemId.SC_TRANS_40: case MenuItemId.SC_TRANS_30: case MenuItemId.SC_TRANS_20: case MenuItemId.SC_TRANS_10: case MenuItemId.SC_TRANS_00: SetTransparencyMenuItem(window, (int)lowOrder); break; case MenuItemId.SC_PRIORITY_REAL_TIME: case MenuItemId.SC_PRIORITY_HIGH: case MenuItemId.SC_PRIORITY_ABOVE_NORMAL: case MenuItemId.SC_PRIORITY_NORMAL: case MenuItemId.SC_PRIORITY_BELOW_NORMAL: case MenuItemId.SC_PRIORITY_IDLE: SetPriorityMenuItem(window, (int)lowOrder); break; case MenuItemId.SC_ALIGN_TOP_LEFT: case MenuItemId.SC_ALIGN_TOP_CENTER: case MenuItemId.SC_ALIGN_TOP_RIGHT: case MenuItemId.SC_ALIGN_MIDDLE_LEFT: case MenuItemId.SC_ALIGN_MIDDLE_CENTER: case MenuItemId.SC_ALIGN_MIDDLE_RIGHT: case MenuItemId.SC_ALIGN_BOTTOM_LEFT: case MenuItemId.SC_ALIGN_BOTTOM_CENTER: case MenuItemId.SC_ALIGN_BOTTOM_RIGHT: case MenuItemId.SC_ALIGN_CENTER_HORIZONTALLY: case MenuItemId.SC_ALIGN_CENTER_VERTICALLY: SetAlignmentMenuItem(window, (int)lowOrder); break; } var moveToSubMenuItem = (int)lowOrder - MenuItemId.SC_MOVE_TO; if (window.Menu.MoveToMenuItems.ContainsKey(moveToSubMenuItem)) { var monitorHandle = window.Menu.MoveToMenuItems[moveToSubMenuItem]; window.MoveToMonitor(monitorHandle); } var windowSizeItem = _settings.MenuItems.WindowSizeItems.FirstOrDefault(x => x.Id == lowOrder); if (windowSizeItem != null) { SetSizeMenuItem(window, (int)lowOrder, windowSizeItem); } for (int i = 0; i < _settings.MenuItems.StartProgramItems.Count; i++) { if (lowOrder - MenuItemId.SC_START_PROGRAM == i) { try { var item = _settings.MenuItems.StartProgramItems[i]; var arguments = item.Arguments; var argumentParameters = arguments.GetParams(item.BeginParameter, item.EndParameter); var allParametersInputed = true; var processPath = window.Process?.GetMainModuleFileName() ?? string.Empty; foreach (var parameter in argumentParameters) { var parameterName = parameter.TrimStart(item.BeginParameter).TrimEnd(item.EndParameter); if (string.Compare(parameterName, StartProgramMenuItem.PARAMETER_PROCESS_ID, true) == 0) { arguments = arguments.Replace(parameter, window.Process?.Id.ToString() ?? string.Empty); continue; } if (string.Compare(parameterName, StartProgramMenuItem.PARAMETER_PROCESS_NAME, true) == 0) { arguments = arguments.Replace(parameter, Path.GetFileName(processPath)); continue; } if (string.Compare(parameterName, StartProgramMenuItem.PARAMETER_WINDOW_TITLE, true) == 0) { arguments = arguments.Replace(parameter, window.GetWindowText()); continue; } var parameterForm = new ParameterForm(parameterName, _settings.Language); var result = parameterForm.ShowDialog(window.Win32Window); if (result == DialogResult.OK) { arguments = arguments.Replace(parameter, parameterForm.ParameterValue); } else { allParametersInputed = false; break; } } if (allParametersInputed) { SystemUtils.RunAs(item.FileName, arguments, item.ShowWindow, item.RunAs, item.UseWindowWorkingDirectory ? Path.GetDirectoryName(processPath) : null); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } break; } } var isSaveItemChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_SAVE_SELECTED_ITEMS); if (lowOrder == MenuItemId.SC_SAVE_SELECTED_ITEMS) { isSaveItemChecked = !isSaveItemChecked; window.Menu.CheckMenuItem(MenuItemId.SC_SAVE_SELECTED_ITEMS, isSaveItemChecked); window.RefreshState(); var windowClassName = window.GetClassName(); var processPath = window.Process?.GetMainModuleFileName() ?? string.Empty; if (!string.IsNullOrEmpty(windowClassName) && !string.IsNullOrEmpty(processPath)) { var states = _windowSettings.Find(windowClassName, processPath); if (states.Any()) { _windowSettings.Remove(windowClassName, processPath); } if (isSaveItemChecked) { _windowSettings.Items.Add((WindowState)window.State.Clone()); } #if WIN32 var fileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window.xml"); #else var fileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window64.xml"); #endif WindowSettings.Save(fileName, _windowSettings); } } else if (isSaveItemChecked && lowOrder != MenuItemId.SC_MOVE && lowOrder != MenuItemId.SC_MINIMIZE && lowOrder != MenuItemId.SC_MAXIMIZE && lowOrder != MenuItemId.SC_RESTORE && lowOrder != MenuItemId.SC_RESIZE && lowOrder != MenuItemId.SC_CLOSE) { window.RefreshState(); var windowClassName = window.GetClassName(); var processPath = window.Process?.GetMainModuleFileName() ?? string.Empty; if (!string.IsNullOrEmpty(windowClassName) && !string.IsNullOrEmpty(processPath)) { var states = _windowSettings.Find(windowClassName, processPath); if (states.Any()) { _windowSettings.Remove(windowClassName, processPath); } _windowSettings.Items.Add((WindowState)window.State.Clone()); #if WIN32 var fileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window.xml"); #else var fileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window64.xml"); #endif WindowSettings.Save(fileName, _windowSettings); } } } } }
private void WindowGetMsg(object sender, WndProcEventArgs e) { long message = e.Message.ToInt64(); if (message == NativeConstants.WM_SYSCOMMAND) { //string dbgMessage = string.Format("WM_SYSCOMMAND, Form, Handle = {0}, WParam = {1}", e.Handle, e.WParam); //System.Diagnostics.Trace.WriteLine(dbgMessage); Window window = _windows.FirstOrDefault(w => w.Handle == e.Handle); if (window != null) { long lowOrder = e.WParam.ToInt64() & 0x0000FFFF; switch (lowOrder) { case NativeConstants.SC_MAXIMIZE: { window.Menu.UncheckSizeMenu(); } break; case MenuItemId.SC_MINIMIZE_TO_SYSTEMTRAY: { window.MinimizeToSystemTray(); } break; case MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY: { bool r = window.Menu.IsMenuItemChecked(MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY); window.Menu.CheckMenuItem(MenuItemId.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY, !r); } break; case MenuItemId.SC_SUSPEND_TO_SYSTEMTRAY: { window.MinimizeToSystemTray(); window.Suspend(); } break; case MenuItemId.SC_INFORMATION: { var infoForm = new InfoForm(window.GetWindowInfo(), _settings); infoForm.Show(window.Win32Window); } break; case MenuItemId.SC_SAVE_SCREEN_SHOT: { var bitmap = window.PrintWindow(); var dialog = new SaveFileDialog { OverwritePrompt = true, ValidateNames = true, Title = _settings.LanguageSettings.GetValue("save_screenshot_title"), FileName = _settings.LanguageSettings.GetValue("save_screenshot_filename"), DefaultExt = _settings.LanguageSettings.GetValue("save_screenshot_default_ext"), RestoreDirectory = false, Filter = _settings.LanguageSettings.GetValue("save_screenshot_filter") }; if (dialog.ShowDialog(window.Win32Window) == DialogResult.OK) { var fileExtension = Path.GetExtension(dialog.FileName).ToLower(); var imageFormat = fileExtension == ".bmp" ? ImageFormat.Bmp : fileExtension == ".gif" ? ImageFormat.Gif : fileExtension == ".jpeg" ? ImageFormat.Jpeg : fileExtension == ".png" ? ImageFormat.Png : fileExtension == ".tiff" ? ImageFormat.Tiff : ImageFormat.Wmf; bitmap.Save(dialog.FileName, imageFormat); } } break; case MenuItemId.SC_COPY_TEXT_TO_CLIPBOARD: { var text = window.ExtractText(); if (text != null) { Clipboard.SetText(text); } } break; case MenuItemId.SC_DRAG_BY_MOUSE: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_DRAG_BY_MOUSE); window.Menu.CheckMenuItem(MenuItemId.SC_DRAG_BY_MOUSE, !isChecked); } break; case MenuItemId.SC_OPEN_FILE_IN_EXPLORER: { try { SystemUtils.RunAsDesktopUser("explorer.exe", "/select, " + window.Process.GetMainModuleFileName()); } catch { } } break; case MenuItemId.SC_MINIMIZE_OTHER_WINDOWS: case MenuItemId.SC_CLOSE_OTHER_WINDOWS: { foreach (var process in Process.GetProcesses()) { try { if (process.MainWindowHandle != IntPtr.Zero && process.MainWindowHandle != Handle && process.MainWindowHandle != window.Handle) { if (process.ProcessName.ToLower() == "explorer") { foreach (var handle in process.GetWindowHandles().Where(x => x != window.Handle).ToList()) { var builder = new StringBuilder(1024); NativeMethods.GetClassName(handle, builder, builder.Capacity); var className = builder.ToString().Trim(); if (className == "CabinetWClass" || className == "ExplorerWClass") { if (lowOrder == MenuItemId.SC_CLOSE_OTHER_WINDOWS) { NativeMethods.PostMessage(handle, NativeConstants.WM_CLOSE, 0, 0); } else { NativeMethods.PostMessage(handle, NativeConstants.WM_SYSCOMMAND, NativeConstants.SC_MINIMIZE, 0); } } } } else { if (lowOrder == MenuItemId.SC_CLOSE_OTHER_WINDOWS) { NativeMethods.PostMessage(process.MainWindowHandle, NativeConstants.WM_CLOSE, 0, 0); } else { NativeMethods.PostMessage(process.MainWindowHandle, NativeConstants.WM_SYSCOMMAND, NativeConstants.SC_MINIMIZE, 0); } } } } catch { } } } break; case MenuItemId.SC_TOPMOST: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_TOPMOST); window.Menu.CheckMenuItem(MenuItemId.SC_TOPMOST, !isChecked); window.MakeTopMost(!isChecked); } break; case MenuItemId.SC_SEND_TO_BOTTOM: { window.SendToBottom(); } break; case MenuItemId.SC_AERO_GLASS: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_AERO_GLASS); var version = Environment.OSVersion.Version; if (version.Major == 6 && (version.Minor == 0 || version.Minor == 1)) { window.AeroGlassForVistaAndSeven(!isChecked); window.Menu.CheckMenuItem(MenuItemId.SC_AERO_GLASS, !isChecked); } else if (version.Major >= 6) { window.AeroGlassForEightAndHigher(!isChecked); window.Menu.CheckMenuItem(MenuItemId.SC_AERO_GLASS, !isChecked); } } break; case MenuItemId.SC_ROLLUP: { var isChecked = window.Menu.IsMenuItemChecked(MenuItemId.SC_ROLLUP); window.Menu.CheckMenuItem(MenuItemId.SC_ROLLUP, !isChecked); if (!isChecked) { window.RollUp(); window.Menu.UncheckMenuItems( MenuItemId.SC_SIZE_640_480, MenuItemId.SC_SIZE_720_480, MenuItemId.SC_SIZE_720_576, MenuItemId.SC_SIZE_800_600, MenuItemId.SC_SIZE_1024_768, MenuItemId.SC_SIZE_1152_864, MenuItemId.SC_SIZE_1280_768, MenuItemId.SC_SIZE_1280_800, MenuItemId.SC_SIZE_1280_960, MenuItemId.SC_SIZE_1280_1024, MenuItemId.SC_SIZE_1440_900, MenuItemId.SC_SIZE_1600_900, MenuItemId.SC_SIZE_1680_1050, MenuItemId.SC_SIZE_DEFAULT, MenuItemId.SC_SIZE_CUSTOM); } else { window.UnRollUp(); } } break; case MenuItemId.SC_SIZE_DEFAULT: { window.Menu.UncheckSizeMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_SIZE_DEFAULT, true); window.ShowNormal(); window.RestoreSize(); window.Menu.UncheckMenuItems(MenuItemId.SC_ROLLUP); } break; case MenuItemId.SC_SIZE_CUSTOM: { var sizeForm = new SizeForm(window, _settings); sizeForm.Show(window.Win32Window); } break; case MenuItemId.SC_TRANS_DEFAULT: { window.Menu.UncheckTransparencyMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_TRANS_DEFAULT, true); window.RestoreTransparency(); } break; case MenuItemId.SC_TRANS_CUSTOM: { var opacityForm = new TransparencyForm(window, _settings); opacityForm.Show(window.Win32Window); } break; case MenuItemId.SC_ALIGN_DEFAULT: { window.Menu.UncheckAlignmentMenu(); window.Menu.CheckMenuItem(MenuItemId.SC_ALIGN_DEFAULT, true); window.RestorePosition(); } break; case MenuItemId.SC_ALIGN_CUSTOM: { var positionForm = new PositionForm(window, _settings); positionForm.Show(window.Win32Window); } break; case MenuItemId.SC_SIZE_640_480: SetSizeMenuItem(window, MenuItemId.SC_SIZE_640_480, 640, 480); break; case MenuItemId.SC_SIZE_720_480: SetSizeMenuItem(window, MenuItemId.SC_SIZE_720_480, 720, 480); break; case MenuItemId.SC_SIZE_720_576: SetSizeMenuItem(window, MenuItemId.SC_SIZE_720_576, 720, 576); break; case MenuItemId.SC_SIZE_800_600: SetSizeMenuItem(window, MenuItemId.SC_SIZE_800_600, 800, 600); break; case MenuItemId.SC_SIZE_1024_768: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1024_768, 1024, 768); break; case MenuItemId.SC_SIZE_1152_864: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1152_864, 1152, 864); break; case MenuItemId.SC_SIZE_1280_768: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1280_768, 1280, 768); break; case MenuItemId.SC_SIZE_1280_800: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1280_800, 1280, 800); break; case MenuItemId.SC_SIZE_1280_960: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1280_960, 1280, 960); break; case MenuItemId.SC_SIZE_1280_1024: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1280_1024, 1280, 1024); break; case MenuItemId.SC_SIZE_1440_900: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1440_900, 1440, 900); break; case MenuItemId.SC_SIZE_1600_900: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1600_900, 1600, 900); break; case MenuItemId.SC_SIZE_1680_1050: SetSizeMenuItem(window, MenuItemId.SC_SIZE_1680_1050, 1680, 1050); break; case MenuItemId.SC_TRANS_100: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_100, 100); break; case MenuItemId.SC_TRANS_90: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_90, 90); break; case MenuItemId.SC_TRANS_80: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_80, 80); break; case MenuItemId.SC_TRANS_70: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_70, 70); break; case MenuItemId.SC_TRANS_60: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_60, 60); break; case MenuItemId.SC_TRANS_50: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_50, 50); break; case MenuItemId.SC_TRANS_40: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_40, 40); break; case MenuItemId.SC_TRANS_30: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_30, 30); break; case MenuItemId.SC_TRANS_20: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_20, 20); break; case MenuItemId.SC_TRANS_10: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_10, 10); break; case MenuItemId.SC_TRANS_00: SetTransparencyMenuItem(window, MenuItemId.SC_TRANS_00, 0); break; case MenuItemId.SC_PRIORITY_REAL_TIME: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_REAL_TIME, Priority.RealTime); break; case MenuItemId.SC_PRIORITY_HIGH: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_HIGH, Priority.High); break; case MenuItemId.SC_PRIORITY_ABOVE_NORMAL: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_ABOVE_NORMAL, Priority.AboveNormal); break; case MenuItemId.SC_PRIORITY_NORMAL: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_NORMAL, Priority.Normal); break; case MenuItemId.SC_PRIORITY_BELOW_NORMAL: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_BELOW_NORMAL, Priority.BelowNormal); break; case MenuItemId.SC_PRIORITY_IDLE: SetPriorityMenuItem(window, MenuItemId.SC_PRIORITY_IDLE, Priority.Idle); break; case MenuItemId.SC_ALIGN_TOP_LEFT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_TOP_LEFT, WindowAlignment.TopLeft); break; case MenuItemId.SC_ALIGN_TOP_CENTER: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_TOP_CENTER, WindowAlignment.TopCenter); break; case MenuItemId.SC_ALIGN_TOP_RIGHT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_TOP_RIGHT, WindowAlignment.TopRight); break; case MenuItemId.SC_ALIGN_MIDDLE_LEFT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_MIDDLE_LEFT, WindowAlignment.MiddleLeft); break; case MenuItemId.SC_ALIGN_MIDDLE_CENTER: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_MIDDLE_CENTER, WindowAlignment.MiddleCenter); break; case MenuItemId.SC_ALIGN_MIDDLE_RIGHT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_MIDDLE_RIGHT, WindowAlignment.MiddleRight); break; case MenuItemId.SC_ALIGN_BOTTOM_LEFT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_BOTTOM_LEFT, WindowAlignment.BottomLeft); break; case MenuItemId.SC_ALIGN_BOTTOM_CENTER: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_BOTTOM_CENTER, WindowAlignment.BottomCenter); break; case MenuItemId.SC_ALIGN_BOTTOM_RIGHT: SetAlignmentMenuItem(window, MenuItemId.SC_ALIGN_BOTTOM_RIGHT, WindowAlignment.BottomRight); break; } var moveToSubMenuItem = (int)lowOrder - MenuItemId.SC_MOVE_TO; if (window.Menu.MoveToMenuItems.ContainsKey(moveToSubMenuItem)) { var monitorHandle = window.Menu.MoveToMenuItems[moveToSubMenuItem]; window.MoveToMonitor(monitorHandle); } for (int i = 0; i < _settings.MenuItems.StartProgramItems.Count; i++) { if (lowOrder - MenuItemId.SC_START_PROGRAM == i) { try { SystemUtils.RunAsDesktopUser(_settings.MenuItems.StartProgramItems[i].FileName, _settings.MenuItems.StartProgramItems[i].Arguments); } catch { } break; } } } } }
private void WindowGetMsg(object sender, WndProcEventArgs e) { long message = e.Message.ToInt64(); if (message == NativeConstants.WM_SYSCOMMAND) { //string dbgMessage = string.Format("WM_SYSCOMMAND, Form, Handle = {0}, WParam = {1}", e.Handle, e.WParam); //System.Diagnostics.Trace.WriteLine(dbgMessage); Window window = _windows.FirstOrDefault(w => w.Handle == e.Handle); if (window != null) { long lowOrder = e.WParam.ToInt64() & 0x0000FFFF; switch (lowOrder) { case NativeConstants.SC_MAXIMIZE: { window.Menu.UncheckSizeMenu(); } break; case SystemMenu.SC_MINIMIZE_TO_SYSTEMTRAY: { window.MinimizeToSystemTray(); } break; case SystemMenu.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY: { bool r = window.Menu.IsMenuItemChecked(SystemMenu.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY); window.Menu.CheckMenuItem(SystemMenu.SC_MINIMIZE_ALWAYS_TO_SYSTEMTRAY, !r); } break; case SystemMenu.SC_INFORMATION: { var infoForm = new InfoForm(window); infoForm.Show(window.Win32Window); } break; case SystemMenu.SC_SAVE_SCREEN_SHOT: { var bitmap = window.PrintWindow(); var dialog = new SaveFileDialog { OverwritePrompt = true, ValidateNames = true, Title = "Save Window Screenshot", FileName = "WindowScreenshot", DefaultExt = "bmp", RestoreDirectory = false, Filter = "Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif|JPEG Image (.jpeg)|*.jpeg|Png Image (.png)|*.png|Tiff Image (.tiff)|*.tiff|Wmf Image (.wmf)|*.wmf" }; if (dialog.ShowDialog(window.Win32Window) == DialogResult.OK) { var fileExtension = Path.GetExtension(dialog.FileName).ToLower(); var imageFormat = fileExtension == ".bmp" ? ImageFormat.Bmp : fileExtension == ".gif" ? ImageFormat.Gif : fileExtension == ".jpeg" ? ImageFormat.Jpeg : fileExtension == ".png" ? ImageFormat.Png : fileExtension == ".tiff" ? ImageFormat.Tiff : ImageFormat.Wmf; bitmap.Save(dialog.FileName, imageFormat); } } break; case SystemMenu.SC_COPY_TEXT_TO_CLIPBOARD: { var text = window.ExtractText(); if (text != null) { Clipboard.SetText(text); } } break; case SystemMenu.SC_TOPMOST: { bool r = window.Menu.IsMenuItemChecked(SystemMenu.SC_TOPMOST); window.Menu.CheckMenuItem(SystemMenu.SC_TOPMOST, !r); window.MakeTopMost(!r); } break; case SystemMenu.SC_ROLLUP: { bool r = window.Menu.IsMenuItemChecked(SystemMenu.SC_ROLLUP); window.Menu.CheckMenuItem(SystemMenu.SC_ROLLUP, !r); if (!r) { window.RollUp(); } else { window.UnRollUp(); } } break; case SystemMenu.SC_SIZE_DEFAULT: { window.Menu.UncheckSizeMenu(); window.Menu.CheckMenuItem(SystemMenu.SC_SIZE_DEFAULT, true); window.ShowNormal(); window.RestoreSize(); } break; case SystemMenu.SC_SIZE_CUSTOM: { var sizeForm = new SizeForm(window); sizeForm.Show(window.Win32Window); } break; case SystemMenu.SC_TRANS_DEFAULT: { window.Menu.UncheckTransparencyMenu(); window.Menu.CheckMenuItem(SystemMenu.SC_TRANS_DEFAULT, true); window.RestoreTransparency(); } break; case SystemMenu.SC_TRANS_CUSTOM: { var opacityForm = new TransparencyForm(window); opacityForm.Show(window.Win32Window); } break; case SystemMenu.SC_ALIGN_DEFAULT: { window.Menu.UncheckAlignmentMenu(); window.Menu.CheckMenuItem(SystemMenu.SC_ALIGN_DEFAULT, true); window.RestorePosition(); } break; case SystemMenu.SC_ALIGN_CUSTOM: { var positionForm = new PositionForm(window); positionForm.Show(window.Win32Window); } break; case SystemMenu.SC_ALIGN_MONITOR: { var screenForm = new ScreenForm(window); screenForm.Show(window.Win32Window); } break; case SystemMenu.SC_SIZE_640_480: SetSizeMenuItem(window, SystemMenu.SC_SIZE_640_480, 640, 480); break; case SystemMenu.SC_SIZE_720_480: SetSizeMenuItem(window, SystemMenu.SC_SIZE_720_480, 720, 480); break; case SystemMenu.SC_SIZE_720_576: SetSizeMenuItem(window, SystemMenu.SC_SIZE_720_576, 720, 576); break; case SystemMenu.SC_SIZE_800_600: SetSizeMenuItem(window, SystemMenu.SC_SIZE_800_600, 800, 600); break; case SystemMenu.SC_SIZE_1024_768: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1024_768, 1024, 768); break; case SystemMenu.SC_SIZE_1152_864: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1152_864, 1152, 864); break; case SystemMenu.SC_SIZE_1280_768: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1280_768, 1280, 768); break; case SystemMenu.SC_SIZE_1280_800: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1280_800, 1280, 800); break; case SystemMenu.SC_SIZE_1280_960: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1280_960, 1280, 960); break; case SystemMenu.SC_SIZE_1280_1024: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1280_1024, 1280, 1024); break; case SystemMenu.SC_SIZE_1440_900: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1440_900, 1440, 900); break; case SystemMenu.SC_SIZE_1600_900: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1600_900, 1600, 900); break; case SystemMenu.SC_SIZE_1680_1050: SetSizeMenuItem(window, SystemMenu.SC_SIZE_1680_1050, 1680, 1050); break; case SystemMenu.SC_TRANS_100: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_100, 100); break; case SystemMenu.SC_TRANS_90: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_90, 90); break; case SystemMenu.SC_TRANS_80: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_80, 80); break; case SystemMenu.SC_TRANS_70: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_70, 70); break; case SystemMenu.SC_TRANS_60: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_60, 60); break; case SystemMenu.SC_TRANS_50: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_50, 50); break; case SystemMenu.SC_TRANS_40: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_40, 40); break; case SystemMenu.SC_TRANS_30: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_30, 30); break; case SystemMenu.SC_TRANS_20: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_20, 20); break; case SystemMenu.SC_TRANS_10: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_10, 10); break; case SystemMenu.SC_TRANS_00: SetTransparencyMenuItem(window, SystemMenu.SC_TRANS_00, 0); break; case SystemMenu.SC_PRIORITY_REAL_TIME: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_REAL_TIME, Priority.RealTime); break; case SystemMenu.SC_PRIORITY_HIGH: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_HIGH, Priority.High); break; case SystemMenu.SC_PRIORITY_ABOVE_NORMAL: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_ABOVE_NORMAL, Priority.AboveNormal); break; case SystemMenu.SC_PRIORITY_NORMAL: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_NORMAL, Priority.Normal); break; case SystemMenu.SC_PRIORITY_BELOW_NORMAL: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_BELOW_NORMAL, Priority.BelowNormal); break; case SystemMenu.SC_PRIORITY_IDLE: SetPriorityMenuItem(window, SystemMenu.SC_PRIORITY_IDLE, Priority.Idle); break; case SystemMenu.SC_ALIGN_TOP_LEFT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_TOP_LEFT, WindowAlignment.TopLeft); break; case SystemMenu.SC_ALIGN_TOP_CENTER: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_TOP_CENTER, WindowAlignment.TopCenter); break; case SystemMenu.SC_ALIGN_TOP_RIGHT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_TOP_RIGHT, WindowAlignment.TopRight); break; case SystemMenu.SC_ALIGN_MIDDLE_LEFT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_MIDDLE_LEFT, WindowAlignment.MiddleLeft); break; case SystemMenu.SC_ALIGN_MIDDLE_CENTER: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_MIDDLE_CENTER, WindowAlignment.MiddleCenter); break; case SystemMenu.SC_ALIGN_MIDDLE_RIGHT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_MIDDLE_RIGHT, WindowAlignment.MiddleRight); break; case SystemMenu.SC_ALIGN_BOTTOM_LEFT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_BOTTOM_LEFT, WindowAlignment.BottomLeft); break; case SystemMenu.SC_ALIGN_BOTTOM_CENTER: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_BOTTOM_CENTER, WindowAlignment.BottomCenter); break; case SystemMenu.SC_ALIGN_BOTTOM_RIGHT: SetAlignmentMenuItem(window, SystemMenu.SC_ALIGN_BOTTOM_RIGHT, WindowAlignment.BottomRight); break; } } } }