钩子没有反应啊,代码如下啊:
#include "windows.h"
#include "stdio.h"#pragma data_seg("hookdata")
HHOOK oldkeyhook=NULL; //钩子句柄
HINSTANCE hInst=NULL; //dll模块的实例句柄
#pragma data_seg()
#pragma comment(linker,"/SECTION:hookdata,RWS")
static HMODULE ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
//鼠标钩子函数LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT *) lParam; int x,y;
char ch1[5],ch2[5];
if(nCode==HC_ACTION&&wParam==WM_LBUTTONDOWN)
{
POINT pt = pMouseHook->pt;
x=pt.x; y=pt.y;
itoa(x,ch1,5); itoa(y,ch2,5);
::MessageBox(NULL,ch1,ch2,MB_OK); return TRUE;
}
return ::CallNextHookEx(oldkeyhook, nCode, wParam, lParam);
}
_declspec(dllexport) void InstallHook()
{ hInst=ModuleFromAddress(MouseHookProc);if(hInst==NULL)
{
::MessageBox(NULL,"获取模块错误","警告",MB_OK);
return;
}if(oldkeyhook==NULL) oldkeyhook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);if(oldkeyhook) ::MessageBox(NULL,"安装钩子成功了!","",MB_OK);
}
_declspec(dllexport) void EndHook(void)
{if(oldkeyhook!=NULL)
{
UnhookWindowsHookEx(oldkeyhook);
oldkeyhook=NULL;}
}
#include "windows.h"
#include "stdio.h"#pragma data_seg("hookdata")
HHOOK oldkeyhook=NULL; //钩子句柄
HINSTANCE hInst=NULL; //dll模块的实例句柄
#pragma data_seg()
#pragma comment(linker,"/SECTION:hookdata,RWS")
static HMODULE ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
//鼠标钩子函数LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT *) lParam; int x,y;
char ch1[5],ch2[5];
if(nCode==HC_ACTION&&wParam==WM_LBUTTONDOWN)
{
POINT pt = pMouseHook->pt;
x=pt.x; y=pt.y;
itoa(x,ch1,5); itoa(y,ch2,5);
::MessageBox(NULL,ch1,ch2,MB_OK); return TRUE;
}
return ::CallNextHookEx(oldkeyhook, nCode, wParam, lParam);
}
_declspec(dllexport) void InstallHook()
{ hInst=ModuleFromAddress(MouseHookProc);if(hInst==NULL)
{
::MessageBox(NULL,"获取模块错误","警告",MB_OK);
return;
}if(oldkeyhook==NULL) oldkeyhook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);if(oldkeyhook) ::MessageBox(NULL,"安装钩子成功了!","",MB_OK);
}
_declspec(dllexport) void EndHook(void)
{if(oldkeyhook!=NULL)
{
UnhookWindowsHookEx(oldkeyhook);
oldkeyhook=NULL;}
}
解决方案 »
- 看完《深入浅出MFC 第2版》,感觉未解渴
- 在线等,Excel中Font类中接口,SetBackground(const VARIANT& newValue),参数newValue如何赋值!!!
- 在CTreeCtrl上建节点
- 我想直接跳出,使程序结束
- 使用MSCOMM控件,若出现异常应该catch哪种异常?
- 终于红星闪闪了!庆祝之余,为感谢CSDN上各位GGJJ、DDMM们的多次帮助,再散分150!
- 自编的一个Office XP风格的ColorPicker带100%VC++源代码奉献给大家!
- VC环境下ODBC操作数据库的几个问题请教各位!!
- VC中怎样利用ado实现日期查询记录
- 进程间的调试问题.祝大家世界决赛中大奖。
- 改变MFC窗体背景颜色,
- 钩子函数里面能不能创建窗体
{
POINT pt = pMouseHook->pt;
x=pt.x;y=pt.y;
itoa(x,ch1,5); itoa(y,ch2,5);
::MessageBox(NULL,ch1,ch2,MB_OK);return TRUE;
}
这几句代码正确啊,为什么没有反应啊?
{
POINT pt = pMouseHook->pt;
x=pt.x;y=pt.y;
itoa(x,ch1,5); itoa(y,ch2,5);
::MessageBox(NULL,ch1,ch2,MB_OK);return TRUE;
}
只能进入接口函数,对于钩子处理函数进步了啊?帮忙看一下 谢谢了啊
#include "windows.h"
#include "stdio.h"#pragma data_seg("hookdata")
HHOOK oldkeyhook=NULL; //钩子句柄
HINSTANCE hInst=NULL; //dll模块的实例句柄
#pragma data_seg()
#pragma comment(linker,"/SECTION:hookdata,RWS")
static HMODULE ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
//鼠标钩子函数LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT *) lParam; int x,y;
char ch1[5],ch2[5];/*
if(wParam==WM_LBUTTONDOWN)
{
POINT pt = pMouseHook->pt;
x=pt.x; y=pt.y;
itoa(x,ch1,5); itoa(y,ch2,5);
::MessageBox(NULL,ch1,ch2,MB_OK); return TRUE;
}
*/ char ch3[20]; itoa(wParam,ch3,20); ::MessageBox(NULL,ch3,"",MB_OK); return ::CallNextHookEx(oldkeyhook, nCode, wParam, lParam);
}
_declspec(dllexport) void InstallHook()
{ hInst=ModuleFromAddress(MouseHookProc);if(hInst==NULL)
{
::MessageBox(NULL,"获取模块错误","警告",MB_OK);
return;
}if(oldkeyhook==NULL) oldkeyhook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);if(oldkeyhook) ::MessageBox(NULL,"安装钩子成功了!","",MB_OK);
}
_declspec(dllexport) void EndHook(void)
{if(oldkeyhook!=NULL)
{
UnhookWindowsHookEx(oldkeyhook);
oldkeyhook=NULL;}
}//入口函数,可以直接复制该代码
BOOL APIENTRY DllMain( HANDLE 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;
}
我又换了个办法来获得正确的模块的句柄但是问题又来了 无法进入钩子函数 MouseHookProc 要不你亲自测试一下啊 ,谢谢了a
如果等于null ,会提示 安装钩子失败!!!
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
hInst=hInstDll;
}
return(TRUE);
}
::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);
我上面的回答很不负责任,楼主的问题应该是 hInst 无效钩子没安装成功吧。在DLLMAIN里 获得DLL模块句柄就可以实现楼主的功能。