2 回答
TA贡献2080条经验 获得超4个赞
是啊,放在动态连接库里就没问题了。
其他可选方法:
1,使用 RegisterHotkey
2,使用API函数GetAsyncKeyState,与 TIMER 结合使用,如下:
if(GetAsyncKeyState(VK_F2) < 0)
{
}
TA贡献1776条经验 获得超12个赞
全局钩子是必须用DLL导出函数做的!
但是线程钩子是可以做在程序里的!
当全局钩子触发的时候,系统去DLL里寻找相关的触发函数!
而不是在程序内部寻找的!所以假如你把钩子函数写在
自己的程序内部,只能在你的程序是活动窗口的时候,消息才
被触发的!但是你让程序失去输入焦点,钩子函数就会失效的!
我很理解LZ的想法,我当初做全局钩子,也是不想要个DLL库的,觉得
那很不美观的!但是Windows就是这样,她规定了的!没办法改的!
假如你想捕捉很少的键盘消息,可以用注册热键的方法的!
注册函数BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk);
当你注册个热键的时候,热键一触发,就会给你设定的窗口发送消息的!
参数:
hWnd是接受热键触发消息的窗口
id:是热键的标识符,为了使热键不冲突!
fsModifoers是热键控键的组成部分!比如说你想把热键设置成
ALT+S,那fsModifoers就是ALT部分,她总共有3个标识符
MOD_ALT
MOD_SHIFT
MOD_WIN
vk是除了控制键其他的键!
假如想截获多个控制键,比如ALT+SHIFT+S fsModifoers就可以写成
MOD_ALT|MOD_SHIFT, vk写成s;
- 2 回答
- 0 关注
- 219 浏览
添加回答
举报