线程键盘钩子(局部键盘钩子)的问题

walker1222 2012-10-01 11:25:07
想写游戏的改键。 先看源码(以记事本这一进程为例) (在记事本上按键A,应该显示成为其它。。)

HWND hwnd = ::FindWindow("Notepad",0); //找到记事本窗口句柄
DWORD PID=GetWindowThreadProcessId(hwnd,&PID); // 得到记事本进程ID

问题来了
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL,PID);

我要实现的是局部钩子,而不是全局的dll回调函数。(我就是不想用dll. 还没学这个。)


第三个参数,MSDN上写的意思,我理解为:要关联的这个线程,如果是全局钩子的话填dll的实例,如果是由本程序创建出来的线程则填NULL。 问题是这个进程(记事本进程)不是我创建出来的。。而我也不是全局钩子。。
(第三个参数 填 AfxGetApp()->m_hInstance 的话, 运行时错误)

说得有点乱了。 看了网上的代码,大家都是用dll来实现的。 可以不用dll来实现吗。

请问下,我的思路是不是错了? 这种情况不能用局部钩子吗?如果可以该怎么用?

...全文
447 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
walker1222 2012-11-03
  • 打赏
  • 举报
回复
引用 1 楼 agoago_2009 的回复:
看你的需求,必须得用全局钩子,钩子函数做在DLL中
不一定要全局哟,也可以远程只绑定一个线程。 不过也是要DLL
glcs 2012-10-11
  • 打赏
  • 举报
回复
跨进程的钩子,需要写在DLL里面。
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(“yourdllname.dll"), targetThreadId);


不过这种HOOK可以改变按键?要改变按键,是否拦截消息更靠谱?
欧阳春晖 2012-10-10
  • 打赏
  • 举报
回复
应该是写本程序的实例句柄
Gloveing 2012-10-01
  • 打赏
  • 举报
回复
看你的需求,必须得用全局钩子,钩子函数做在DLL中

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧