第九章 keyhookdll windows程序设计王艳平版
来源:互联网 发布:洛瑞体测数据 编辑:程序博客网 时间:2024/05/21 12:42
// KeyHookLib.h文件
// 定义函数修饰宏,方便引用本DLL工程的导出函数
#ifdef KEYHOOKLIB_EXPORTS
#define KEYHOOKLIB_API __declspec(dllexport)
#else
#define KEYHOOKLIB_API __declspec(dllimport)
#endif
// 自定义与主程序通信的消息
#define HM_KEY WM_USER + 101
// 声明要导出的函数
BOOL KEYHOOKLIB_API WINAPI SetKeyHook(BOOL bInstall,
DWORD dwThreadId = 0, HWND hWndCaller = NULL);
EXPORTS
SetKeyHook
SECTIONS
YCIShared Read Write Shared
////////////////////////////////////////////////
// KeyHookLib.cpp文件
#include <windows.h>
#define KEYHOOKLIB_EXPORTS
#include "KeyHookLib.h"
// 共享数据段
#pragma data_seg("YCIShared")
HWND g_hWndCaller = NULL; // 保存主窗口句柄
HHOOK g_hHook = NULL; // 保存钩子句柄
#pragma data_seg()
// 一个通过内存地址取得模块句柄的帮助函数
HMODULE WINAPI ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
// 键盘钩子函数
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode < 0 || nCode == HC_NOREMOVE)
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
if(lParam & 0x40000000) // 消息重复就交给下一个hook链
{
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
// 通知主窗口。wParam参数为虚拟键码, lParam参数包含了此键的信息
::PostMessage(g_hWndCaller, HM_KEY, wParam, lParam);
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
// 安装、卸载钩子的函数
BOOL WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)
{
BOOL bOk;
g_hWndCaller = hWndCaller;
if(bInstall)
{
g_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyHookProc,
ModuleFromAddress(KeyHookProc), dwThreadId);
bOk = (g_hHook != NULL);
}
else
{
bOk = ::UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}
return bOk;
}
- 第九章 keyhookdll windows程序设计王艳平版
- 第九章 DLL windows程序设计 王艳平版
- 第九章 hook windows程序设计 王艳平版
- 第九章 HOOK程序测试 windows程序设计 王艳平版
- 第九章 HOOKDLL windows程序设计王艳平版
- 第九章 DLL文件 windows程序设计 王艳平版
- 第九章 导入表程序 windows程序设计 王艳平版
- 第九章 keyhook windows程序设计王艳平版
- 第三章 windows程序设计 王艳平版
- windows程序设计 王艳平版
- 第三章 同步 Windows程序设计 王艳平版
- 第三章 互锁 windows程序设计王艳平版
- 第三章 事件 windows程序设计 王艳平版
- 第三章 线程局部存储 windows程序设计 王艳平版
- 第三章查找文件 windows程序设计王艳平版
- 第四章 绘图 windows程序设计 王艳平版
- 第四章定时器 windows程序设计王艳平版
- 第四章 时钟 windows程序设计 王艳平版
- mysql 字符集設置
- easyUI合并DataGrid单元格
- Chapter 3.数组和指针
- C# 中 string 的最大长度
- 黑马程序员_ JAVA学习日记—JAVA中的多线程
- 第九章 keyhookdll windows程序设计王艳平版
- Javascript validating form input using RE
- 黑马程序员——关于HashSet的思考
- POJ2253—Dijkstra算法的变体的应用
- mongodb的java驱动与spring的整合
- 2012年8月IHE测试大会Gsps总结
- windows剪贴板
- windows 批处理脚本(bat)将快捷方式加入启动菜单的方法
- 什么是Dojo?与Jquery宏观对比,结果如何?