mfc中如果不用dll,主程序中直接用SetWindowsHookEx截获其他指定的应用程序的键盘操作应该如何设置参数。

 我来答
Unkn0wName
2012-11-01 · TA获得超过106个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:133万
展开全部


安装鼠标钩子

  •         用到的函数有:

  SetWindowsHookExA()       //设置钩子

  GetModuleHandle()           //获取模块句柄

  UnhookWindowsHookEx()    //关闭钩子

  SetDlgItemText()              //设置控件文本

  用到的结构体有:

  KBDLLHOOKSTRUCT




  • 步骤一:在XXXXXDlg.cpp顶端定义

#define WH_KEYBOARD_LL     13

  

typedef struct tagKBDLLHOOKSTRUCT {

  

  DWORD   vkCode;

  

  DWORD   scanCode;

  

  DWORD   flags;

  

  DWORD   time;

  

  DWORD   dwExtraInfo;

  

} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;



HHOOK 键盘;

HWND hwnd;


LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

{

  //这些就是HOOK代码

  LRESULT lResult = CallNextHookEx(键盘, nCode, wParam, lParam);

  //PMSG pmsg = (PMSG)lParam;

  //这时候pmsg->message就是消息了

  CString I;

  I.Format(_T("键盘状态:%d"),wParam);

  SetDlgItemText(hwnd,IDC_EDIT3,I);

  KBDLLHOOKSTRUCT* 指针=(KBDLLHOOKSTRUCT*)lParam;

  I.Format(_T("键代码:%d"),指针->vkCode);

  SetDlgItemText(hwnd,IDC_EDIT4,I);

  return FALSE;

}




  • 步骤二:代码写:

  hwnd=m_hWnd;

  //键盘事件的响应步骤是:

  //键盘驱动->系统键盘消息处理->当前进程消息处理->当前窗口消息处理

  //WH_KEYBOARD_LL插在系统键盘消息处理前

       //而WH_KEYBOARD则插在当前进程消息处理前.

  //因此如果你WH_KEYBOARD hook正确而WH_KEYBOARD_LL hook得不到想要得结果,那么唯一可能就是你把一些不该过滤的键盘消息给过滤掉了。

  键盘 = SetWindowsHookExA(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),NULL);





  • 步骤三:在类视图XXXXXXDlg->消息->WM_DESTROY写:

  UnhookWindowsHookEx(键盘);

追问
谢谢你。
不过我怎么觉得这样并不能拦截到其他应用程序的键盘操作呢,我想问的是如何拦截其他程序,不是当前窗口的,能实现吗?
追答
这就是全局拦截其他进程的
SetWindowsHookExA 注意这两句

GetModuleHandle(NULL)

这是拦截全局的 就是其他进程

参考资料: MSDN

peacexf
2012-11-01 · TA获得超过293个赞
知道小有建树答主
回答量:476
采纳率:100%
帮助的人:409万
展开全部
直接用达不到全局的效果的。所以,直接用不行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤独J潮流
2015-08-31 · TA获得超过366个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:235万
展开全部
SetWindowsHookEx(
WH_KEYBOARD, \\钩子类型,键盘钩子
MyFuncation, \\回调函数地址
NULL, \\实例句柄,设置为空,代表回调函数地址在本模块内
0); \\线程ID,设为0代表监事所有线程

然后在回调函数里面判断当前线程是否是你要截获的进程,是就进行操作,不是就把消息传下去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式