• 9776阅读
  • 4回复

[提问]在QT中使用windows的hook [复制链接]

上一主题 下一主题
离线三少爷
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-05
关键词: QT4window
求各位帮忙:
是这样的,我的程序需要对计算机的鼠标和键盘进行禁止操作,不是仅针对这个程序,而是全局的。所以考虑了下,需要用到windows的鼠标和键盘hook。试了一个基本程序,出现了几个编译错误。代码如下;
  1. #include <QtGui/QApplication>
  2. #include "mainwindow.h"
  3. #include <Windows.h>
  4. #include <iostream>
  5. using namespace std;
  6. HHOOK key_keep=NULL;
  7. HWND window_hwhd=NULL;
  8. HHOOK mouse_keep=NULL;
  9. LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam  )
  10. { return 1; }
  11. LRESULT CALLBACK KeyboardProc( int nCode,  WPARAM wParam, LPARAM lParam )
  12. {
  13.     if(VK_SPACE==wParam||(VK_F4==wParam&&(lParam>>29)&1))
  14.         { return 1; }
  15.     else if(VK_F2==wParam)
  16.         {
  17.             //::SendMessage(window_hwhd,WM_CLOSE,0,0);
  18.         }
  19.     else if(VK_F3==wParam)
  20.     { UnhookWindowsHookEx(mouse_keep); }
  21.     else
  22.         return CallNextHookEx(key_keep,nCode,wParam,lParam);
  23. }
  24. int main(int argc, char *argv[])
  25. {
  26.     QApplication a(argc, argv);
  27.     MainWindow w;
  28.     w.show();
  29.     window_hwhd=w.winId();
  30.     mouse_keep=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
  31.     key_keep= SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
  32.     return a.exec();
  33. }
代码是网上找到的,mainWindow类里面没有添加其他东西。编译会出现连接错误:

window.open('http://www.qtcn.org/bbs/attachment/Mon_1206/17_131481_8b07c7a299e6d64.jpg?45');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >
是不是需要在PRO文件中添加什么?还是代码哪里有错误?还有可不可以将hook的相关函数定义在类文件中,比如mainWindow中?这个我试了下,提示在SetWindowsHookEx中MouseProc缺少参数
如果上面的代码不对,应该改哪里呢??
急求~~~~谢谢大家
离线sbtree
只看该作者 1楼 发表于: 2012-06-05
看上去似乎缺少user32.lib
windows 7 + VC++2008 + Qt4.5.2
离线duduqq

只看该作者 2楼 发表于: 2012-06-05
在.Pro文件中添加
LIBS += -luser32
试试
离线lejcey

只看该作者 3楼 发表于: 2012-06-05
在源文件中添加一行:
#pragma comment(lib ,"user32.lib")
离线三少爷
只看该作者 4楼 发表于: 2012-06-06
谢谢大家,确实,添加了#pragma comment(lib ,"user32.lib")就好了~
快速回复
限100 字节
 
上一个 下一个