Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2563551
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: WINDOWS

2013-08-31 13:37:11

    新建一个对话框工程,在OnInitDialog()接口中加入简单设置”鼠标钩子“和”键盘钩子“代码:
    

点击(此处)折叠或打开

  1. BOOL CHookDlg::OnInitDialog()
  2. {
  3.     CDialog::OnInitDialog();

  4.     // Set the icon for this dialog. The framework does this automatically
  5.     // when the application's main window is not a dialog
  6.     SetIcon(m_hIcon, TRUE);            // Set big icon
  7.     SetIcon(m_hIcon, FALSE);        // Set small icon
  8.     
  9.     // TODO: Add extra initialization here
  10.     hwnd = m_hWnd;
  11.     hk_mouse = SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());
  12.     hk_keyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId());
  13.     
  14.     return TRUE; // return TRUE unless you set the focus to a control
  15. }
    变量和接口定义:

点击(此处)折叠或打开

  1. // CHookDlg message handlers
  2. HWND hwnd;
  3. HHOOK hk_mouse;
  4. HHOOK hk_keyboard;

  5. LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam)
  6. {
  7.     UnhookWindowsHookEx(hk_mouse);    ///< 这样“钩子”就失效了
  8.     return 1;
  9. }

  10. LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
  11. {
  12.     if (VK_SPACE == wParam || /*VK_RETURN == wParam ||*/
  13.      (VK_F4 == wParam && (1 == (lParam >> 29) & 1)))    ///< “钩”空格键和Alt+F4
  14.     {
  15.         return 1;
  16.     }
  17.     else if (VK_ESCAPE == wParam)
  18.     {
  19.         ///< 向窗口发送关闭消息
  20.         SendMessage(hwnd, WM_CLOSE, wParam, lParam);
  21.         ///< 卸载钩子
  22.         UnhookWindowsHookEx(hk_mouse);
  23.         UnhookWindowsHookEx(hk_keyboard);
  24.     }
  25.     else
  26.     {
  27.         return CallNextHookEx(hk_keyboard,code,wParam,lParam);
  28.     }
  29. }
    至于编写对当前操作系统所有线程都起作用的钩子程序,可以练习练习;那一块需要了解动态链接库的操作等等;后面我想测试一个程序,获得登录qq时的密码......试试...

阅读(3822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~