C++Builder实现鼠标钩子
来源:互联网 发布:子域名查询工具3.0 编辑:程序博客网 时间:2024/05/16 00:28
DLL中的代码:
#define WM_KEY_HOOK WM_USER+200 //自定义消息
extern "C" {
__declspec(dllexport) BOOL APIENTRY StartHook(); //安装键盘钩子
__declspec(dllexport) BOOL APIENTRY EndHook(); //删除键盘钩子
LRESULT WINAPI KeyProc(int nCode,WPARAM wparam,LPARAM lparam);
}
HHOOK hHook=NULL; //鼠标钩子函数句柄
HINSTANCE hInstance=NULL; //DLL实例句柄
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
hInstance=hinst;
return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) BOOL APIENTRY StartHook()
{
hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyProc,hInstance,0);
return (bool)hHook;
}
__declspec(dllexport) BOOL APIENTRY EndHook()
{
if(hHook&&UnhookWindowsHookEx(hHook))
hHook=NULL;
return (bool)hHook;
}
__declspec(dllexport) LRESULT WINAPI KeyProc(int nCode,WPARAM wparam,LPARAM lparam) {
HWND hwnd;
hwnd=FindWindow(NULL,"键盘钩子测试");
KBDLLHOOKSTRUCT *keyMSG=(KBDLLHOOKSTRUCT *)lparam;
if(nCode==HC_ACTION && (WM_KEYDOWN == wparam || wparam == WM_SYSKEYDOWN))
{
DWORD dwMsg = 1;
dwMsg += keyMSG->scanCode << 16;
dwMsg += keyMSG->flags << 24;
SendMessage(hwnd,WM_KEY_HOOK,(WPARAM)(dwMsg), lparam);
}
return CallNextHookEx(hHook,nCode,wparam,lparam); //继续传递鼠标消息
}
测试程序中的代码:
头文件中:自定义消息类型和消息映射函数
#define WM_KEY_HOOK WM_USER+200 //自定义消息
void __fastcall OnKeyHook(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_KEY_HOOK, TMessage, OnKeyHook);
END_MESSAGE_MAP(TForm);
源码中:
首先,声明需要调用外部方法,用于安装和卸载钩子(按钮事件触发):
extern "C" {
BOOL APIENTRY StartHook(); //安装鼠标钩子
BOOL APIENTRY EndHook(); //删除钩子
}
再实现OnKeyHook方法:
void __fastcall TForm1::OnKeyHook(TMessage &Msg)
{
AnsiString str;
//获取最前端窗口的句柄
HWND hwnd = GetForegroundWindow();
char windowTitle[50] = {0};
GetWindowText(hwnd,windowTitle,sizeof(windowTitle));
AnsiString result = AnsiString(windowTitle[0]);
str += windowTitle;
str += ":按下按键[" ;
char key[20]={0};
GetKeyNameText(Msg.WParam, key, 20);//根据鼠标信息获取按键名
str += key;
str += "]";
Memo1->Lines->Add(str);
}
源码云盘地址:http://pan.baidu.com/s/1bn2Yi67
- C++Builder实现鼠标钩子
- java鼠标钩子实现
- QT实现鼠标钩子
- Delphi实现全局鼠标钩子
- C#实现鼠标、键盘钩子
- C++Builder DBGrid鼠标滚轮
- C#的键盘鼠标钩子(转)
- C/S模式下鼠标钩子
- 实现鼠标钩子遇到的一个问题
- 利用鼠标钩子实现桌面画图
- 用钩子函数实现鼠标动作录制
- 鼠标钩子 键盘钩子
- 鼠标钩子
- C实现的键盘钩子
- 如何限制鼠标区域(c++builder)
- .NET 实现线程键盘鼠标钩子和全局鼠标键盘钩子
- .NET 实现线程键盘鼠标钩子和全局鼠标键盘钩子
- 使用全局鼠标钩子实现右键双击粘贴操作
- C#之VS自带RDLC报表学习
- Testing Round #12 597ABC题解
- Web Service 教程
- WinPcap笔记(8):分析数据包(2)
- Redis中的排序
- C++Builder实现鼠标钩子
- CodeForces CF 360E Levko and Game 贪心+SPFA
- Python3.5安装numpy,SciPy后,出现ImportError
- max-min fairness 最大最小公平算法
- B. Rebranding
- ubuntu14.04.3 LTS中的atime, ctime, mtime的含义
- 纳兰性德词全集
- linux网络编程
- 11,递归函数