我试图用一些键绑定(F1-F12)来创建一个程序,它将在聚焦时(特别是在游戏运行时)拿起按键。键盘钩子没有使用DLL?
无论如何检测这些按键而不使用全局钩子?我正在编程的语言(真正的工作室)没有创建一个DLL(全局钩子需要)的手段,再加上,我希望它与Mac(这是realstudio所做的)跨平台。
我试图用一些键绑定(F1-F12)来创建一个程序,它将在聚焦时(特别是在游戏运行时)拿起按键。键盘钩子没有使用DLL?
无论如何检测这些按键而不使用全局钩子?我正在编程的语言(真正的工作室)没有创建一个DLL(全局钩子需要)的手段,再加上,我希望它与Mac(这是realstudio所做的)跨平台。
虽然正如klartex所说,低级别的键盘/鼠标钩子不需要DLL(与所有其他类型的钩子不同),但是对于你想要完成的任务来说,任何类型的钩子肯定是矫枉过正的。
所有你需要的是RegisterHotKey
function,它允许用户注册的任意键(或键的组合),其为全系统的热键。这可以满足您即使在应用程序焦点不清的情况下也能够按下按键的要求。
作为奖励,RegisterHotKey
不需要DLL,也不像系统范围的钩子那样“沉重”。挂钩对性能有负面影响;你不应该看到RegisterHotKey
。
一旦通过调用该函数注册了一个热键,就可以在应用程序的窗口过程中处理WM_HOTKEY
messages。完成之后,请确保您拨打UnregisterHotKey
function以取消注册您的应用程序以处理该热键。
这里唯一需要注意的文件中提到:
F12键保留在任何时候都调试器使用,所以它不应该被注册为热键。即使在您未调试应用程序时,F12也会保留以防内核模式调试程序或即时调试程序驻留。
但是,如果您要安装低级键盘挂钩,同样的问题将适用。 F12只是不是一个好的候选热键,不管应用程序如何。如果你绝对必须使用它,风险自负。
有了这个,你应该能够无DLL在Windows钩子的键盘:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985%28v=vs.85%29.aspx
RegisterHotKey
不需要DLL。
你使用什么编程语言?如果这会有所帮助,我可以用一些示例代码更新我的答案。 – 2011-12-19 13:36:03