Beispiel #1
0
        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);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        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_DRAG_BY_MOUSE:
                    {
                        var isChecked = window.Menu.IsMenuItemChecked(SystemMenu.SC_DRAG_BY_MOUSE);
                        window.Menu.CheckMenuItem(SystemMenu.SC_DRAG_BY_MOUSE, !isChecked);
                    }
                    break;

                    case SystemMenu.SC_OPEN_FILE_IN_EXPLORER:
                    {
                        try
                        {
                            var process = Process.Start("explorer.exe", "/select, " + window.Process.GetMainModuleFileName());
                            Window.ForceForegroundWindow(process.MainWindowHandle);
                        }
                        catch
                        {
                        }
                    }
                    break;

                    case SystemMenu.SC_MINIMIZE_OTHER_WINDOWS:
                    case SystemMenu.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 == SystemMenu.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 == SystemMenu.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 SystemMenu.SC_TOPMOST:
                    {
                        var isChecked = window.Menu.IsMenuItemChecked(SystemMenu.SC_TOPMOST);
                        window.Menu.CheckMenuItem(SystemMenu.SC_TOPMOST, !isChecked);
                        window.MakeTopMost(!isChecked);
                    }
                    break;

                    case SystemMenu.SC_SEND_TO_BOTTOM:
                    {
                        window.SendToBottom();
                    }
                    break;

                    case SystemMenu.SC_AERO_GLASS:
                    {
                        var isChecked = window.Menu.IsMenuItemChecked(SystemMenu.SC_AERO_GLASS);
                        var version   = Environment.OSVersion.Version;
                        if (version.Major == 6 && (version.Minor == 0 || version.Minor == 1))
                        {
                            window.AeroGlassForVistaAndSeven(!isChecked);
                            window.Menu.CheckMenuItem(SystemMenu.SC_AERO_GLASS, !isChecked);
                        }
                        else if (version.Major >= 6)
                        {
                            window.AeroGlassForEightAndHigher(!isChecked);
                            window.Menu.CheckMenuItem(SystemMenu.SC_AERO_GLASS, !isChecked);
                        }
                    }
                    break;

                    case SystemMenu.SC_ROLLUP:
                    {
                        var isChecked = window.Menu.IsMenuItemChecked(SystemMenu.SC_ROLLUP);
                        window.Menu.CheckMenuItem(SystemMenu.SC_ROLLUP, !isChecked);
                        if (!isChecked)
                        {
                            window.RollUp();
                            window.Menu.UncheckMenuItems(
                                SystemMenu.SC_SIZE_640_480,
                                SystemMenu.SC_SIZE_720_480,
                                SystemMenu.SC_SIZE_720_576,
                                SystemMenu.SC_SIZE_800_600,
                                SystemMenu.SC_SIZE_1024_768,
                                SystemMenu.SC_SIZE_1152_864,
                                SystemMenu.SC_SIZE_1280_768,
                                SystemMenu.SC_SIZE_1280_800,
                                SystemMenu.SC_SIZE_1280_960,
                                SystemMenu.SC_SIZE_1280_1024,
                                SystemMenu.SC_SIZE_1440_900,
                                SystemMenu.SC_SIZE_1600_900,
                                SystemMenu.SC_SIZE_1680_1050,
                                SystemMenu.SC_SIZE_DEFAULT,
                                SystemMenu.SC_SIZE_CUSTOM);
                        }
                        else
                        {
                            window.UnRollUp();
                        }
                    }
                    break;


                    case SystemMenu.SC_SIZE_DEFAULT:
                    {
                        window.Menu.UncheckSizeMenu();
                        window.Menu.CheckMenuItem(SystemMenu.SC_SIZE_DEFAULT, true);
                        window.ShowNormal();
                        window.RestoreSize();
                        window.Menu.UncheckMenuItems(SystemMenu.SC_ROLLUP);
                    }
                    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;
                    }

                    for (int i = 0; i < _settings.MenuItems.StartProgramItems.Count; i++)
                    {
                        if (lowOrder - SystemMenu.SC_START_PROGRAM == i)
                        {
                            var processStartInfo = new ProcessStartInfo();
                            processStartInfo.FileName         = _settings.MenuItems.StartProgramItems[i].FileName;
                            processStartInfo.WorkingDirectory = Path.GetDirectoryName(_settings.MenuItems.StartProgramItems[i].FileName);
                            processStartInfo.Arguments        = _settings.MenuItems.StartProgramItems[i].Arguments;
                            Process.Start(processStartInfo);
                            break;
                        }
                    }
                }
            }
        }
Beispiel #3
0
        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;
                    }
                }
            }
        }