Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中处理全局热键处理的最佳方法?_C#_Global_Hotkeys - Fatal编程技术网

在c#中处理全局热键处理的最佳方法?

在c#中处理全局热键处理的最佳方法?,c#,global,hotkeys,C#,Global,Hotkeys,可能重复: 我希望在我的新应用程序中有多个全局热键(从windows中的任何位置控制应用程序),并且我在web上找到的所有给定源/解决方案似乎都提供了一种跛行解决方案(要么只针对一个g.热键的解决方案,要么在运行时在屏幕上造成恼人的鼠标延迟的解决方案) 这里有没有人知道有什么资源可以帮助我实现这一目标,我可以从中学习? 有什么事吗 谢谢!:) 如果您没有使用.net 3.5。我将通过使用p/Invoke为每个热键调用RegisterHotKey(),然后使用NativeForm(假设您使用的

可能重复:

我希望在我的新应用程序中有多个全局热键(从windows中的任何位置控制应用程序),并且我在web上找到的所有给定源/解决方案似乎都提供了一种跛行解决方案(要么只针对一个g.热键的解决方案,要么在运行时在屏幕上造成恼人的鼠标延迟的解决方案)

这里有没有人知道有什么资源可以帮助我实现这一目标,我可以从中学习? 有什么事吗

谢谢!:)


如果您没有使用.net 3.5。

我将通过使用p/Invoke为每个热键调用RegisterHotKey(),然后使用NativeForm(假设您使用的是WinForms)来通知WM_热键消息来处理此问题。这将使大多数热键代码保持在一个位置。

我发现的最好的解决方案是


请注意,如何将不同的lambda设置为不同的热键

您能举个简单的例子吗?您使用的是WinForms还是WPF?-1键盘挂钩不是全局热键的好选择。其他任何东西都不符合规范:“从windows中的任何位置控制应用程序”,因此请提供更好的洞察力[sic]或删除您的评论,请无论哪个窗口有焦点,它都能工作,所以它符合规范。不存在提升的窗口,只需向下滚动到注释,好吗?更不用说同一个热键可能会被当前活动窗口覆盖,使您的“oh so”全局热键无效。不幸的是,尽管它可以工作,但它会取消其他应用程序的键输入。所以注册“a”意味着其他应用程序将无法使用“a”。这是你想要的吗?对于WPF解决方案,您可以查看我的答案:[在此处输入链接描述][1][1]:是否可以让此类使用鼠标按钮(Keys.LButton和Keys.RButton)?我尝试过使用同一个类,但只能使用键盘键。
Hotkey hk = new Hotkey();

hk.KeyCode = Keys.1;
hk.Windows = true;
hk.Pressed += delegate { Console.WriteLine("Windows+1 pressed!"); };

hk.Register(myForm);