private GlobalHotKey(IntPtr windowHandle, [NotNull] GlobalAtom globalAtom, HotKeyModifier hotKeyModifier, UInt32 virtualKeyCode) { if (globalAtom == null) { throw new ArgumentNullException(nameof(globalAtom)); } this.WindowHandle = windowHandle; this.globalAtom = globalAtom; this.HotKeyModifier = hotKeyModifier; this.VirtualKeyCode = virtualKeyCode; }
/// <summary> /// Unregisters this hot key instance. /// </summary> /// <remarks> /// If this instance was created be supplying the <see cref="GlobalAtom"/> manually, it is not automaticall freed. /// </remarks> /// <exception cref="Win32Exception">If the function fails, a <see cref="Win32Exception"/> containing the reason is thrown.</exception> /// <exception cref="ObjectDisposedException">Is thrown if <see cref="Unregister"/> was successfully called already.</exception> public void Unregister() { this.CheckDisposed(); try { this.UnregisterHotKey(); } finally { this.globalAtom.Delete(); this.globalAtom = null; } }
private void Dispose(Boolean disposing) { if (this.isDisposed) { return; } this.UnregisterHotKey(); if (disposing) { this.globalAtom.Dispose(); this.globalAtom = null; } }
public GlobalHotkey CreateHotkey(string hotkeyName) { var globalAtom = new GlobalAtom($"{Application.ProductName}_{hotkeyName}"); try { var hotkey = new GlobalHotkey(Form, globalAtom.Id); Hotkeys.Add(globalAtom, hotkey); return(hotkey); } catch { globalAtom.Dispose(); throw; } }
private static GlobalHotKey RegisterCore(IntPtr windowHandle, HotKeyModifier hotKeyModifier, UInt32 virtualKeyCode) { if (hotKeyModifier == HotKeyModifier.None) { throw new ArgumentException(String.Empty, nameof(hotKeyModifier)); } var globalAtomName = Guid.NewGuid().ToString(); var globalAtom = (GlobalAtom)GlobalAtom.CreateNew(globalAtomName); var registerHotKeyResult = NativeMethods.RegisterHotKey(windowHandle, globalAtom.Id, (UInt32)hotKeyModifier, virtualKeyCode); var lastWin32Error = Marshal.GetLastWin32Error(); if (!registerHotKeyResult) { // It is possible that the next line throws... globalAtom.Delete(); throw new Win32Exception(lastWin32Error); } return(new GlobalHotKey(windowHandle, globalAtom, hotKeyModifier, virtualKeyCode)); }