protected override void OnLoad(EventArgs e) { base.OnLoad(e); var settingsFileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "SmartSystemMenu.xml"); if (File.Exists(settingsFileName)) { _settings = SmartSystemMenuSettings.Read(settingsFileName); } #if WIN32 if (Environment.Is64BitOperatingSystem) { string resourceName = "SmartSystemMenu.SmartSystemMenu64.exe"; string fileName = "SmartSystemMenu64.exe"; string directoryName = Path.GetDirectoryName(AssemblyUtils.AssemblyLocation); string filePath = Path.Combine(directoryName, fileName); try { if (!File.Exists(filePath)) { AssemblyUtils.ExtractFileFromAssembly(resourceName, filePath); } _64BitProcess = Process.Start(filePath); } catch { string message = string.Format("Failed to load {0} process!", fileName); MessageBox.Show(message, AssemblyUtils.AssemblyTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); Close(); return; } } _systemTrayMenu = new SystemTrayMenu(); _systemTrayMenu.MenuItemAutoStart.Click += MenuItemAutoStartClick; _systemTrayMenu.MenuItemSettings.Click += MenuItemSettingsClick; _systemTrayMenu.MenuItemAbout.Click += MenuItemAboutClick; _systemTrayMenu.MenuItemExit.Click += MenuItemExitClick; _systemTrayMenu.MenuItemAutoStart.Checked = AutoStarter.IsAutoStartByRegisterEnabled(AssemblyUtils.AssemblyProductName, AssemblyUtils.AssemblyLocation); #endif _windows = EnumWindows.EnumAllWindows(_settings.MenuItems, new string[] { SHELL_WINDOW_NAME }).ToList(); foreach (var window in _windows) { var processName = ""; try { processName = Path.GetFileName(window.Process.GetMainModuleFileName()); } catch { } if (string.IsNullOrEmpty(processName) || _settings.ProcessExclusions.Contains(processName.ToLower())) { continue; } window.Menu.Create(); int menuItemId = window.ProcessPriority.GetMenuItemId(); window.Menu.CheckMenuItem(menuItemId, true); window.Menu.SetMenuItemText(SystemMenu.SC_ALIGN_MONITOR, "Select Monitor: " + Screen.AllScreens.ToList().FindIndex(s => s.Primary)); if (window.AlwaysOnTop) { window.Menu.CheckMenuItem(SystemMenu.SC_TOPMOST, true); } } _getMsgHook = new GetMsgHook(Handle, SystemMenu.SC_DRAG_BY_MOUSE); _getMsgHook.GetMsg += WindowGetMsg; _getMsgHook.Start(); _shellHook = new ShellHook(Handle, SystemMenu.SC_DRAG_BY_MOUSE); _shellHook.WindowCreated += WindowCreated; _shellHook.WindowDestroyed += WindowDestroyed; _shellHook.Start(); _cbtHook = new CBTHook(Handle, SystemMenu.SC_DRAG_BY_MOUSE); _cbtHook.WindowCreated += WindowCreated; _cbtHook.WindowDestroyed += WindowDestroyed; _cbtHook.MoveSize += WindowMoveSize; _cbtHook.MinMax += WindowMinMax; _cbtHook.Start(); _mouseHook = new MouseHook(Handle, SystemMenu.SC_DRAG_BY_MOUSE); _mouseHook.Start(); Hide(); }
static void Main(string[] args) { var settingsFileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "SmartSystemMenu.xml"); var languageFileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Language.xml"); #if WIN32 var windowFileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window.xml"); #else var windowFileName = Path.Combine(AssemblyUtils.AssemblyDirectory, "Window64.xml"); #endif var settings = File.Exists(settingsFileName) && File.Exists(languageFileName) ? SmartSystemMenuSettings.Read(settingsFileName, languageFileName) : new SmartSystemMenuSettings(); var windowSettings = File.Exists(windowFileName) ? WindowSettings.Read(windowFileName) : new WindowSettings(); // Enable High DPI Support if (settings.EnableHighDPI) { SystemUtils.EnableHighDPISupport(); } // Command Line Interface var toggleParser = new ToggleParser(args); if (toggleParser.HasToggle("help")) { var dialog = new MessageBoxForm(); dialog.Message = BuildHelpString(); dialog.Text = "Help"; dialog.ShowDialog(); return; } ProcessCommandLine(toggleParser, settings); if (toggleParser.HasToggle("n") || toggleParser.HasToggle("nogui")) { return; } #if WIN32 var mutexName = "SmartSystemMenuMutex"; #else var mutexName = "SmartSystemMenuMutex64"; #endif _mutex = new Mutex(false, mutexName, out var createNew); if (!createNew) { return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm(settings, windowSettings)); }