【发布时间】:2011-11-04 01:01:51
【问题描述】:
我想为我正在开发的媒体播放器提供一个选项,以使媒体键即使在最小化时也能正常工作。在没有焦点的情况下在 C# 中捕获和处理这些关键事件的最佳方法是什么?有可能吗?
【问题讨论】:
-
我很高兴你将其作为一个选项 - 我讨厌傲慢的应用程序像这样接管系统范围的资源。
我想为我正在开发的媒体播放器提供一个选项,以使媒体键即使在最小化时也能正常工作。在没有焦点的情况下在 C# 中捕获和处理这些关键事件的最佳方法是什么?有可能吗?
【问题讨论】:
我认为没有简单的方法可以做到这一点,但this (Using Window Messages to Implement Global System Hooks in C#) 项目可能会有所帮助。 我在下面添加了代码
_GlobalHooks.Keyboard.KeyboardEvent += (w, l) =>
{
this.LblMouse.Text = "KEY: " + w.ToInt32().ToString("X8") + " " + l.ToInt32().ToString("X8");
};
_GlobalHooks.Keyboard.Start();
到 GlobalHookTest 的 Form1 的构造函数,并且能够监控所有的键盘事件。
【讨论】:
您可以做到这一点,但只能通过一些全局挂钩 - 有关源代码和详细信息,请参阅
编辑:
注意某些媒体密钥会被转换为APP_COMMAND Windows 消息 - 所以您也应该考虑挂钩这些消息。
如果您想让媒体播放器在按下(媒体)键时自动启动,请参阅链接here。
【讨论】:
对于这个问题,我实施了这个解决方案:
【讨论】:
使用全局键盘挂钩 (Processing Global Mouse and Keyboard Hooks in C#)
只需在启动您的应用程序/表单时创建钩子。您可以为全局键向上、向下和按下事件设置 KeyEventHandlers。然后您可以检查它是否是您要查找的组合键。
【讨论】: