public DefaultTaskbarWindowService(IAppSettings settings) { _hookInstance = this; Settings = settings; ActivePlacement = settings.Placement; // install a win event hook to track taskbar resize/movement hookDelegate = new WinEventHook.WinEventDelegate(WinEventProc); var winHook = WinEventHook.SetHook(WinEventHook.EVENT_OBJECT_LOCATIONCHANGE, hookDelegate); Application.ApplicationExit += (s, e) => { if (winHook != IntPtr.Zero) { WinEventHook.RemoveHook(winHook); winHook = IntPtr.Zero; foreach (var f in GetWindows()) { f.Close(); f.RestoreTaskbar(); } } }; }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // create a clock window for each secondary taskbar taskbars = TaskbarUtils.ListTaskbars().Where(x => !x.IsPrimary).ToList(); if (taskbars.Count > 0) { // add a clock to each secondary taskbar var viewModel = new ViewModels.ClockViewModel(); foreach (var taskbar in taskbars) { var f = new ClockWindow(taskbar, viewModel); f.Show(); } // install a win event hook to track taskbar resize/movement var hook = WinEventHook.SetHook(WinEventHook.EVENT_OBJECT_LOCATIONCHANGE, WinEventProc); Application.ApplicationExit += (s, e) => { WinEventHook.RemoveHook(hook); }; Application.Run(); } else { MessageBox.Show("SecondaryTaskbarClock", "No secondary taskbars found. Application will terminate."); } }