键盘鼠标HOOK Demo
1,------------------------ 导出代码
// keyHooker.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "windows.h"
HINSTANCE h_st;
HHOOK g_KeyBoardHook;
//HHOOK g_MouseHook;
HWND g_wnd;
/*
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
*/
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F7 == wParam)
{
//UnhookWindowsHookEx(g_MouseHook);
UnhookWindowsHookEx(g_KeyBoardHook);
return 1;
}
#ifndef _DEBUG
if(VK_F12 == wParam)
{
return 1;
}
#endif
if (VK_ESCAPE == wParam)
{
return 1;
}
return CallNextHookEx(g_KeyBoardHook, code, wParam, lParam);
}
void SetHook(HWND hwnd)
{
g_wnd=hwnd;
//g_MouseHook=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(L"keyHooker"),0);
g_KeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle(L"keyHooker"),0);
}
2, 动态导入代码
#ifndef ___KEYHOOKER_H___
#define ___KEYHOOKER_H___
#include "stdafx.h"
#include <cassert>
#include <WinBase.h>
#define KEYAPI __cdecl
namespace Common {
namespace Hook {
#pragma region Declaration
typedef void (KEYAPI *Proc_SetHook)(HWND h);
class KeyHooker {
public:
void SetHook(HWND h);
private:
Proc_SetHook pSetHook;
// dll 句柄
HINSTANCE _hmsc;
KeyHooker();
virtual ~KeyHooker();
friend class std::auto_ptr<KeyHooker>;
static std::auto_ptr<KeyHooker> _instance;
public:
static KeyHooker* Inst() {
if (0 == _instance.get()){
_instance.reset(new KeyHooker);
}
return _instance.get();
}
}; // end of KeyHooker
#pragma endregion
#pragma region Definition
KeyHooker::KeyHooker() {
HINSTANCE hmscdll = LoadLibraryEx(_T("./keyHooker.dll"),NULL,0);
assert(hmscdll != NULL);
_hmsc = hmscdll;
}
KeyHooker::~KeyHooker() {
if (_hmsc != NULL) {
FreeLibrary(_hmsc);
}
}
std::auto_ptr<KeyHooker> KeyHooker::_instance;
void KeyHooker::SetHook(HWND h) {
pSetHook = (Proc_SetHook)GetProcAddress(_hmsc,"SetHook");
assert(pSetHook != NULL);
return pSetHook(h);
}
#pragma endregion
}
}
#endif // end of define ___KEYHOOKER_H___