public static IntPtr HotKeyHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { const int WM_HOTKEY = 0x0312; switch (msg) { case WM_HOTKEY: //switch (wParam.ToInt32()) //{ //case 0: //case 1: var k = new Hotkey( (lParam.ToInt32() >> 16), (lParam.ToInt32() & MOD_ALT) > 0, (lParam.ToInt32() & MOD_SHIFT) > 0, (lParam.ToInt32() & MOD_CONTROL) > 0 ); var a = (lParam.ToInt32() & MOD_ALT) > 0; var b = (lParam.ToInt32() & MOD_SHIFT) > 0; var c = (lParam.ToInt32() & MOD_CONTROL) > 0; if (Hotkeys.ContainsKey(k)) { Hotkeys[k].Callback.Invoke(); } handled = true; // TODO: Find a way to not always capture the hotkey break; //}break; } return(IntPtr.Zero); }
private void ProcessHotkey(int hotkeyId) { if (Hotkeys.ContainsKey(hotkeyId)) { Hotkeys[hotkeyId].Action(); } }
/// <summary> /// Used to register a hotkey /// </summary> /// <param name="hotkey">A <c>Hotkey</c> object. See <see cref="Hotkey"/></param> /// <returns></returns> public bool AddHotkey(Hotkey hotkey) { if (Hotkeys.ContainsKey(hotkey.HotkeyId)) { return(false); } var registered = WinApi.RegisterHotKey(WindowHandle, hotkey.HotkeyId, hotkey.Modifiers, hotkey.VirtualKey); if (registered) { Hotkeys.Add(hotkey.HotkeyId, hotkey); } return(registered); }
/// <summary> /// Starts rendering cycle and waits for shutdown /// </summary> public static void Start() { var pf = Environment.OSVersion.Platform; var isUnix = pf == PlatformID.Unix || pf == PlatformID.MacOSX || (int)pf == 128; // unix/macosx/mono linux var provider = isUnix ? (INativeConsoleProvider) new UnixNativeConsoleProvider() : new WindowsNativeConsoleProvider(); if (Provider != null) { throw new ArgumentException("Already started"); } Provider = provider; provider.Clear(_background); provider.KeyPressed += (o, e) => { if (CanChangeFocus && e.Info.Key == ConsoleKey.Tab && e.Info.Modifiers == 0) { _prevent = true; FocusNext(); _prevent = false; Refresh(); return; } if (CanChangeFocus && e.Info.Key == ConsoleKey.Tab && e.Info.Modifiers == ConsoleModifiers.Shift) // Can not intercept CTRL in Linux { _prevent = true; FocusNextWindow(); _prevent = false; Refresh(); return; } _prevent = true; if ( Hotkeys.ContainsKey(new ConsoleKeyInfo('\0', e.Info.Key, e.Info.Modifiers.HasFlag(ConsoleModifiers.Shift), e.Info.Modifiers.HasFlag(ConsoleModifiers.Alt), false))) { Hotkeys[e.Info](); } else { Focused?.OnKeyPressedInternal(e.Info); } _prevent = false; Refresh(); }; provider.SizeChanged += (o, e) => { _prevent = true; foreach (var window in Windows) { window.OnSizeChangedInternal(); } _prevent = false; Refresh(); }; _prevent = true; FocusNextWindow(); _prevent = false; Refresh(); }