以下是程序,我的钩子只对加载他的进程有效,对别的不管用。
s.dll#include <windows.h>
#include "d.h"
#pragma data_seg("PublicData") //定义全局数据段 HHOOK hhook=NULL; //钩子句柄 HINSTANCE pInstance=NULL; //钩子模块句柄 UINT MouseClick=0; //记录鼠标单击次数的变量 #pragma data_seg()extern "C" BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
 )
{
   if(ul_reason_for_call==DLL_PROCESS_ATTACH)
     pInstance=(HINSTANCE)hModule;   return 1;}extern "C" _declspec(dllexport) LRESULT CALLBACK MouseProc(int code,WPARAM wParam,LPARAM lParam) //钩子处理函数 { MouseClick++; //记录鼠标单击次数 
return CallNextHookEx(hhook, code, wParam,lParam); } extern "C" _declspec(dllexport) BOOL WINAPI StartHook() //启动钩子函数 { hhook=SetWindowsHookEx(WH_MOUSE,MouseProc,pInstance,NULL); //挂上钩子 if(hhook!=NULL) return TRUE; else return FALSE; } 
 
extern "C" _declspec(dllexport) BOOL WINAPI StopHook() //撤销钩子函数 { return UnhookWindowsHookEx(hhook); //撤销钩子 } 
extern "C" _declspec(dllexport) int WINAPI GetResult() //返回鼠标单击次数 { return MouseClick; } 加载程序
#include "stdafx.h"
#include "resource.h"
#include "d.h"
#include <windows.h>int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     StartHook();
 while(true)
 {  
int Result=GetResult();  char buffer[40];                    wsprintf(buffer,"在程序运行期间,你共单击鼠标%d次",Result);  ::MessageBox(NULL,buffer,"Message",MB_OK); 
 
 }
 return 1;
}我只是想做个实验,但是却不成功,请各位高手看看