以下是程序,我的钩子只对加载他的进程有效,对别的不管用。
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;
}我只是想做个实验,但是却不成功,请各位高手看看
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;
}我只是想做个实验,但是却不成功,请各位高手看看
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货