我在VS2005中建立一个win32项目,设置全局钩子.DllHook.h#ifdef WIN32_HOOK
#else
#define WIN32_HOOK extern "C" __declspec(dllimport)
#endif
WIN32_HOOK void SetHook() ;
DllHook.cpp#include <windows.h>#define WIN32_HOOK extern "C" __declspec(dllexport)#include "DllHook.h"HHOOK hHook_Mouse ;
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1 ;
}void SetHook()
{
hHook_Mouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(TEXT("DllHook")),0) ;
}
Win32_Text.cpp 部分代码#include <windows.h>
#include "DllHook.h" //在Win32_Text\Win32_Text的目录.#pragma comment(lib,"DllHook.lib") //DllHook.lib和DllHook.dll在Win32_Text\Win32_Text的目录下LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM) ;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nShowCmd)
{
SetHook() ; //钩子安装.
TCHAR szAddr[20] ;
TCHAR szClassName[] = TEXT("Win32Class") ;
HWND hwnd ;
MSG msg ;
WNDCLASS ws ;
ws.cbClsExtra = 0 ;
ws.cbWndExtra = 0 ;
ws.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH) ;
ws.hCursor = LoadCursor(NULL,IDC_ARROW) ;
ws.hIcon = LoadIcon(NULL,IDI_APPLICATION) ;
ws.hInstance = hInstance ;
ws.lpfnWndProc = WndProc ;
ws.lpszClassName = szClassName ;
ws.lpszMenuName = NULL ;
ws.style = CS_VREDRAW | CS_HREDRAW ;最后运行结果是没有实现全局,只是这个线程的钩子.
#else
#define WIN32_HOOK extern "C" __declspec(dllimport)
#endif
WIN32_HOOK void SetHook() ;
DllHook.cpp#include <windows.h>#define WIN32_HOOK extern "C" __declspec(dllexport)#include "DllHook.h"HHOOK hHook_Mouse ;
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1 ;
}void SetHook()
{
hHook_Mouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(TEXT("DllHook")),0) ;
}
Win32_Text.cpp 部分代码#include <windows.h>
#include "DllHook.h" //在Win32_Text\Win32_Text的目录.#pragma comment(lib,"DllHook.lib") //DllHook.lib和DllHook.dll在Win32_Text\Win32_Text的目录下LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM) ;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nShowCmd)
{
SetHook() ; //钩子安装.
TCHAR szAddr[20] ;
TCHAR szClassName[] = TEXT("Win32Class") ;
HWND hwnd ;
MSG msg ;
WNDCLASS ws ;
ws.cbClsExtra = 0 ;
ws.cbWndExtra = 0 ;
ws.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH) ;
ws.hCursor = LoadCursor(NULL,IDC_ARROW) ;
ws.hIcon = LoadIcon(NULL,IDI_APPLICATION) ;
ws.hInstance = hInstance ;
ws.lpfnWndProc = WndProc ;
ws.lpszClassName = szClassName ;
ws.lpszMenuName = NULL ;
ws.style = CS_VREDRAW | CS_HREDRAW ;最后运行结果是没有实现全局,只是这个线程的钩子.
HWND g_hWnd=NULL;//全局变量
#pragma data_seg()#pragma comment(linker,"/section:MySec,RWS")