private static void Main() { Trace.Listeners.Add(new ReportListener()); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.ThreadException += Application_ThreadException; //todo: It's reccomended that this be set in the manifest, but I can't figure out how to do that successfully with clickonce Windowing.SetProcessDPIAware(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); System.Threading.Thread.CurrentThread.Name = "Main UI " + System.Threading.Thread.CurrentThread.ManagedThreadId; Update.CheckForUpdate(); History = new List <ExtendedScreenshot>(); Preview = new PeekPreview(); Selector = new RegionSelector(); Trace.WriteLine(string.Format("Forcing the creation of windows by accessing their handles on the Main UI thread: {0}, {1}", Preview.Handle, Selector.Handle), string.Format("Program [{0}]", System.Threading.Thread.CurrentThread.Name)); KeyboardHook = new Hook("Global Action Hook"); KeyboardHook.KeyDownEvent += KeyDown; KeyboardHook.KeyUpEvent += KeyUp; TrayIcon = new NotifyIcon() { Icon = ProSnap.Properties.Resources.camera_36x36_icon, Text = "ProSnap", Visible = true, ContextMenuStrip = new ContextMenuStrip() }; //TrayIcon.ContextMenuStrip.Items.Add("Take Screenshot", null, new EventHandler((o, e) => { Thread.Sleep(3000); SpawnActionChain(ActiveShortcutProfile.Shortcuts.FirstOrDefault(s => s.Actions.ActionItems.FirstOrDefault().ActionType == ActionTypes.TakeForegroundScreenshot)); })); TrayIcon.ContextMenuStrip.Items.Add(new ToolStripMenuItem("History", null, (o, e) => (o as ToolStripMenuItem).ShowDropDown()) { Name = "tsmiHistory" }); TrayIcon.ContextMenuStrip.Items.Add("Options", null, (o, e) => Options.Options.ShowOrActivate()); TrayIcon.ContextMenuStrip.Items.Add("Exit", null, (o, e) => { Application.Exit(); DumpTraceReport(); }); TrayIcon.MouseDown += TrayIcon_MouseDown; IconAnimation.WorkerSupportsCancellation = true; IconAnimation.DoWork += IconAnimation_DoWork; Application.Run(); KeyboardHook.isPaused = true; TrayIcon.Visible = false; }
private static void Main() { Trace.Listeners.Add(new ReportListener()); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.ThreadException += Application_ThreadException; //todo: It's reccomended that this be set in the manifest, but I can't figure out how to do that successfully with clickonce Windowing.SetProcessDPIAware(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Thread.CurrentThread.Name = "Main UI " + Thread.CurrentThread.ManagedThreadId; Update.CheckForUpdate(); History = new List<ExtendedScreenshot>(); Preview = new PeekPreview(); Trace.WriteLine("Forcing the creation of PeekPreview by accessing its handle on the Main UI thread: " + Preview.Handle, string.Format("Program [{0}]", Thread.CurrentThread.Name)); KeyboardHook = new Hook("Global Action Hook"); KeyboardHook.KeyDownEvent += KeyDown; KeyboardHook.KeyUpEvent += KeyUp; TrayIcon = new NotifyIcon() { Icon = ProSnap.Properties.Resources.camera_16x16_icon, Text = "ProSnap", Visible = true, ContextMenuStrip = new ContextMenuStrip() }; //TrayIcon.ContextMenuStrip.Items.Add("Take Screenshot", null, new EventHandler((o, e) => { Thread.Sleep(3000); SpawnActionChain(ActiveShortcutProfile.Shortcuts.FirstOrDefault(s => s.Actions.ActionItems.FirstOrDefault().ActionType == ActionTypes.TakeForegroundScreenshot)); })); TrayIcon.ContextMenuStrip.Items.Add(new ToolStripMenuItem("History", null, (o, e) => (o as ToolStripMenuItem).ShowDropDown()) { Name = "tsmiHistory" }); TrayIcon.ContextMenuStrip.Items.Add("Options", null, (o, e) => Options.Options.ShowOrActivate()); TrayIcon.ContextMenuStrip.Items.Add("Exit", null, (o, e) => { Application.Exit(); DumpTraceReport(); }); TrayIcon.MouseDown += TrayIcon_MouseDown; ShowPreviewEvent += Program_ShowPreviewEvent; IconAnimation.WorkerSupportsCancellation = true; IconAnimation.DoWork += IconAnimation_DoWork; AppDomain.CurrentDomain.ProcessExit += (o, e) => KeyboardHook.isPaused = true; Application.Run(); TrayIcon.Visible = false; }