生活的天平本不平衡,只有通过努力改变其偏向。

钩子的类型和实现

2008-02-04
  1. BOOL CMouseDlg::OnInitDialog()
  2. {
  3. CDialog::OnInitDialog();
  4. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  5. ASSERT(IDM_ABOUTBOX <0xF000);
  6. CMenu* pSysMenu = GetSystemMenu(FALSE);
  7. if (pSysMenu != NULL)
  8. {
  9. CString strAboutMenu;
  10. strAboutMenu.LoadString(IDS_ABOUTBOX);
  11. if (!strAboutMenu.IsEmpty())
  12. {
  13. pSysMenu->AppendMenu(MF_SEPARATOR);
  14. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  15. }
  16. }
  17. SetIcon(m_hIcon, TRUE);//Set big icon
  18. SetIcon(m_hIcon, FALSE);//Set small icon
  19. //TOD Add extra initialization here
  20. CWnd * pwnd=GetDlgItem(IDC_EDIT1);
  21. //取得编辑框的类指针
  22. m_hook.starthook(pwnd->GetSafeHwnd());
  23. //取得编辑框的窗口句柄并安装钩子
  24. return TRUE;
  25. //return TRUE unless you set the focus to a control
  26. }
  27. (7)链接DLL库,即把..\Mousehook\debug\Mousehook.lib加入到项目设置链接标签中;
    (8)编译项目生成可执行文件;
    (9)把Mousehook.DLL拷贝到..\mouse\debug目录中;
    (10)先运行几个可执行程序,然后运行Mouse.exe程序,把鼠标在不同窗口中移动,在Mouse.exe程序窗口中的编辑框内将显示出鼠标所在的应用程序主窗口的标题。
作者:lonkil | 分类目录:编程开发 | 标签:

4 条评论

  1. Tr0j4n 说道:

    大哥不怎么上IM吗?有些问题想当面请教。还有这篇文章数据补补全啊,好让我学习你的这个类

  2. lonkil 说道:

    这篇文章在我改版的时候,可能有一部分数据丢了,感觉数据不全了。

  3. Tr0j4n 说道:

    这个m_hook是个什么控件的成员变量?还有个问题,我一直搞不清ASSERT()在什么时候使用,很多时候都觉得可用可不用,效果没什么差别,解释下好吗?

    • lonkil 说道:

      m_hook是一个钩子的类。

      ASSERT是断言,在MFC的Debug版本的情况下才可以使用。如果条件符合会弹出一个让你“继续”,“终止”,这样的对话框。帮助你定位出错的位置。