Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 在Windows CE中注册全局热键_C#_Windows Mobile_Windows Ce - Fatal编程技术网

C# 在Windows CE中注册全局热键

C# 在Windows CE中注册全局热键,c#,windows-mobile,windows-ce,C#,Windows Mobile,Windows Ce,我搜索一个方法来注册一个全局热键,这样我可以在按下该键时触发一个方法 它需要与Windows CE和Windows Mobile>=5一起使用 [编辑:当应用程序被隐藏和/或表单没有焦点时,它也需要工作]您可以使用coredll中定义的函数。在devbuzz论坛上,您可以找到一篇名为:的帖子,其中显示了一个实现 另一种方法是运行一个单独的线程,并以可接受的睡眠时间在循环中调用GetAsyncKeyState应该独立于键盘焦点。您可以使用RegisterHotKey功能 注意:此API是Micro

我搜索一个方法来注册一个全局热键,这样我可以在按下该键时触发一个方法

它需要与Windows CE和Windows Mobile>=5一起使用

[编辑:当应用程序被隐藏和/或表单没有焦点时,它也需要工作]

您可以使用coredll中定义的函数。在devbuzz论坛上,您可以找到一篇名为:的帖子,其中显示了一个实现


另一种方法是运行一个单独的线程,并以可接受的睡眠时间在循环中调用
GetAsyncKeyState
应该独立于键盘焦点。

您可以使用RegisterHotKey功能


注意:此API是Microsoft提供的完整Windows CE操作系统包的一部分。特定平台的功能由原始设备制造商(OEM)决定,某些设备可能不支持此API。

如果RegisterHotKey由于某种原因无法完成您想要的功能,请输入一个。钩子不是“官方”支持的,但对于键盘来说,它们工作得很好。

也尝试过这个,但当应用程序在后台运行时,它不起作用。
GetAsyncKeyState
是一个可疑的选择。例如,它无法看到是否同时按下了组合中的多个键,从而导致意外触发。至少在桌面窗口上,它还有其他问题,例如,检查热键的代码不会被识别为应用程序可以从当前前台程序窃取焦点的地方。我觉得奇怪的是,
RegisterHotkey
不起作用。它是为全局热键设计的,当你的应用程序没有焦点时,它就可以工作。如果
RegisterHotkey
可以工作,我会避免这种情况。如果出于某种原因无法使用注册表快捷键,这只是最后一种手段。如果这是一个桌面应用程序,我会投反对票,但我对WinCE了解不够,不知道是否有必要。当然,他应该试试RegisterHotKey。我不确定你对SetWindowsHook的最初厌恶是什么,但我已经为Windows CE设备开发了十多年,我知道我会走哪条路。低级键盘挂钩的问题是,所有键盘输入都需要通过它,并且可能会因线程响应不快而延迟。有一个例子完全让我受挫,那就是一个游戏愚蠢地使用了高优先级,而另一个程序却缺少了低级别的键盘钩子。这导致输入延迟数秒。我自己也用过LL键盘钩子,但只有在
RegisterHotkey
不是选项的情况下才使用。在桌面上,这当然是一个问题,也是一个很好的观点。嵌入式设备几乎总是运行一个或两个核心应用程序,并且通常只用于一个目的,因此所有键盘输入都很可能以您的应用程序为目标。