protected override void Dispose(bool disposing) { if (disposing && (Interlocked.Exchange(ref this._Disposed, 1) == 0)) { if (this._MouseHook != null) { this._MouseHook.Dispose(); this._MouseHook = null; } if (this._KeyboardHook != null) { this._KeyboardHook.Dispose(); this._KeyboardHook = null; } if (this._InstanceId != null) { bool IsFirstInstance = this._InstanceId.IsNew; this._InstanceId.Dispose(); this._InstanceId = null; if (IsFirstInstance) { Application.RemoveMessageFilter(this); if (this._SelectedWindow != IntPtr.Zero) { RedrawWindow(this._SelectedWindow); this._SelectedWindow = IntPtr.Zero; } } } if ((Interlocked.Exchange(ref this._SettingsFormState, FORM_STATE_DISPOSED) == FORM_STATE_READY) && (this._SettingsForm != IntPtr.Zero)) { NativeMethods.PostMessageW(new HandleRef(this, this._SettingsForm), NativeMethods.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); this._SettingsForm = IntPtr.Zero; } } base.Dispose(disposing); }
private ApplicationManager(string[] e) { #warning move to StartApplication? #if !DEBUG Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException, false); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(this.OnUnhandledException); #endif this._InstanceId = new FileMapping(@"Local\Goletas.ScreenCapture"); if (this._InstanceId.IsNew) { Application.SetCompatibleTextRenderingDefault(false); if ((Configuration.Current.Settings == null) || (Configuration.Current.FileTypes == null)) { throw new InvalidOperationException(); } if (!IsBackgroundMode(e)) { this.ShowSettingsForm(); } Application.AddMessageFilter(this); this._InstanceId.Write(NativeMethods.GetCurrentThreadId()); this._KeyboardHook = new Hook(new LowLevelKeyboardProc(this.OnKeyboardEvent)); this._MouseHook = new Hook(new LowLevelMouseProc(this.OnMouseEvent)); } }