有人可以帮我为我的应用程序设置全局键盘钩子吗?
我想设置热键(例如 Ctrl + S ),可以在不关注实际表格时使用。
答案 0 :(得分:7)
Paul的帖子链接到两个答案,一个告诉你如何实现一个钩子,另一个告诉你调用RegisterHotKey。您不需要像Ctrl + S热键那样简单地安装钩子,所以请改为调用RegisterHotKey。
答案 1 :(得分:2)
或者您可以使用C#的MessageFilter。当应用程序进程中的任何控件/表单都有焦点时,它应该可以正常工作。
示例代码:
class KeyboardMessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == ((int)Helper.WindowsMessages.WM_KEYDOWN))
{
switch ((int)m.WParam)
{
case (int)Keys.Escape:
// Do Something
return true;
case (int)Keys.Right:
// Do Something
return true;
case (int)Keys.Left:
// Do Something
return true;
}
}
return false;
}
}
而不仅仅是在你的应用程序中添加一个新的MessageFilter:
Application.AddMessageFilter(new KeyboardMessageFilter());