您的位置:首页 > 编程语言 > Qt开发

QT中安装不使用dll的全局钩子

2009-12-15 20:43 561 查看
/**********************************************************
不用调用dll就可以执行的全局钩子示例:
只留下F12做为程序退出,屏蔽键盘和鼠标,测试时请注意
********************************************************/
#ifndef HH_H
#define HH_H
#include <QApplication>
#include <Windows.h>
HHOOK keyHook=NULL;
HHOOK mouseHook=NULL;
//声明卸载函数,以便调用
void unHook();
//键盘钩子过程
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{

//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
if(pkbhs->vkCode==VK_F12)
{
void unHook();
qApp->quit();
}
return 1;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递

}
//鼠标钩子过程
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{

return 1;

}
//卸载钩子
void unHook()
{
UnhookWindowsHookEx(keyHook);
UnhookWindowsHookEx(mouseHook);

}
//安装钩子,调用该函数即安装钩子
void setHook()
{
//这两个底层钩子,不要DLL就可以全局
//                         底层键盘钩子
keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);
//                          底层鼠标钩子
mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: