Windows全局钩子dll(键盘)
2013-08-19 18:27
120 查看
// dllHookkb.cpp : Defines the entry
point for the DLL application.
//
#include "stdafx.h"
#include "dllHookkb.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
#pragma
data_seg("YCIShared2010")
HWND g_hWndCaller = NULL;
HHOOK g_hHook = NULL;
#pragma data_seg()
BOOL APIENTRY DllMain( HMODULE
hModule,
DWORD
ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
// This is an example of an exported
variable
DLLHOOKKB_API int
ndllHookkb=0;
// This is an example of an exported
function.
DLLHOOKKB_API int
fndllHookkb(void)
{
return 42;
}
// This is the constructor of a
class that has been exported.
// see dllHookkb.h for the class
definition
CdllHookkb::CdllHookkb()
{
return;
}
//通过内存地址取得模块句柄的函数
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);
}
//安装,卸载钩子的函数
DLLHOOKKB_API 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;
}
point for the DLL application.
//
#include "stdafx.h"
#include "dllHookkb.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
#pragma
data_seg("YCIShared2010")
HWND g_hWndCaller = NULL;
HHOOK g_hHook = NULL;
#pragma data_seg()
BOOL APIENTRY DllMain( HMODULE
hModule,
DWORD
ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
// This is an example of an exported
variable
DLLHOOKKB_API int
ndllHookkb=0;
// This is an example of an exported
function.
DLLHOOKKB_API int
fndllHookkb(void)
{
return 42;
}
// This is the constructor of a
class that has been exported.
// see dllHookkb.h for the class
definition
CdllHookkb::CdllHookkb()
{
return;
}
//通过内存地址取得模块句柄的函数
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);
}
//安装,卸载钩子的函数
DLLHOOKKB_API 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;
}
相关文章推荐
- Windows全局钩子dll(键盘)
- Windows 全局 鼠标 钩子 DLL
- VC++实现监视系统的键盘操作(2) 创建记录键盘动作的全局钩子DLL
- SetWindowsHookEx设置全局键盘钩子
- windows之全局键盘钩子以及键盘事件模拟触发
- 用全局钩子截掉所有进程的鼠标和键盘 DLL的调试方法
- 使用SetWindowsHookEx(WH_KEYBOARD,...)制作全局键盘钩子
- 创建记录键盘动作的全局钩子DLL
- windows 键盘全局钩子
- VC++实现监视系统的键盘操作 创建记录键盘动作的全局钩子DLL
- 在使用一个全局底层键盘钩子dll时遇到的问题
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- Windows 全局钩子 Hook 详解
- C#全局键盘钩子
- C#.Net的全局键盘钩子(Hook)技术
- 使用raw input 代替全局键盘钩子
- SetWindowsHookEx与全局共享钩子
- 利用键盘钩子在Windows平台下捕获键盘动作
- 全局键盘钩子
- 全局键盘钩子(WH_KEYBOARD)