Beispiel #1
0
        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;
        }
Beispiel #2
0
        /// <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;
            }
        }
Beispiel #3
0
        private void Dispose(Boolean disposing)
        {
            if (this.isDisposed)
            {
                return;
            }

            this.UnregisterHotKey();

            if (disposing)
            {
                this.globalAtom.Dispose();
                this.globalAtom = null;
            }
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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));
        }