API HOOK 的问题!!! 本帖最后由 yuejunqi 于 2010-03-02 11:35:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不太懂,楼主咋没用SetWindowsHookEx函数啊 从ring0 修改 ring3, 就可以绕过COW但如果这样不如直接在ring0改 ring0不是谁都会的,再说那个稳定性也是问题! 不知道在哪个地方用setwindowshookex,有会的吗 想用全局钩子代码写在DLL中。SetWindowsHookEx的最后一个参数为0.给你写一段代码以下是MyDll.Dll的部分代码。//共享段#pragma data_seg("MySec")HWND g_hMain=NULL; //调用DLL的窗口句柄主要方便DLL和主程序通信#pragma data_seg()#pragma comment(linker,"/section:MySec,RWS")HHOOK g_Hook=NULL;HINSTANCE hInst=NULL; //dll实例BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to the DLL module DWORD fdwReason, // reason for calling function LPVOID lpvReserved // reserved ){ switch(fdwReason) { case DLL_PROCESS_ATTACH: hInst=hinstDLL; break; case DLL_PROCESS_DETACH: UnIntercept(); break; } return true;}LRESULT CALLBACK MoniterProc( int nCode, // hook code WPARAM wParam, // current-process flag LPARAM lParam // message data ){//你想干的事情在这里写。.......//最后别忘了调用钩子链的下一个钩子。return CallNextHookEx(g_Hook,nCode,wParam,lParam);}BOOL SetAPIHook(HWND hwnd) { //设置全局钩子 g_Hook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)MoniterProc,hInst,0); //第一个参数是你想下的钩子,此处是WH_CALLWNDPROC,第二个参数是钩到此消息后要执行的过程,第三个是本DLL的实列,最后一代表全局钩子。 g_hMain=hwnd; if(g_Hook!=NULL) { return true; } else { return false; }}然后在主程序中可以动态或静态载入MyDLL.DLL然后调用SetAPIHook(m_hWnd)就OK了。 关于对话框分割问题! MFC界面的背景怎么修改? 客户区大小获得问题 在对话框中我放了很多EDIT控件,当某个EDIT控件刚获得焦点后,他的父窗口如何知道是那个控件刚获得焦点,我不想 怎么进行屏幕取词这个功能!!! 用MFC,如何枚举"设备管理"中看到机器上所有串口?? 请问怎样用VC里面的鼠标事件控制flash?立即散分 ●●MFC工程中,自己做的CPP文件,头几行应当写些什么?●● 在VC中的位图资源显示只在两色? DLL中的对话框输出问题 定时器控制子控件移动 [急切求助]如何在一台电脑上用两个端口来接收数据包?
SetWindowsHookEx的最后一个参数为0.
给你写一段代码
以下是MyDll.Dll的部分代码。
//共享段
#pragma data_seg("MySec")
HWND g_hMain=NULL; //调用DLL的窗口句柄主要方便DLL和主程序通信
#pragma data_seg()
#pragma comment(linker,"/section:MySec,RWS")HHOOK g_Hook=NULL;
HINSTANCE hInst=NULL; //dll实例BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
hInst=hinstDLL;
break;
case DLL_PROCESS_DETACH:
UnIntercept();
break;
}
return true;
}
LRESULT CALLBACK MoniterProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // message data
)
{
//你想干的事情在这里写。
.......
//最后别忘了调用钩子链的下一个钩子。
return CallNextHookEx(g_Hook,nCode,wParam,lParam);
}
BOOL SetAPIHook(HWND hwnd)
{
//设置全局钩子
g_Hook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)MoniterProc,hInst,0); //第一个参数是你想下的钩子,此处是WH_CALLWNDPROC,第二个参数是钩到此消息后要执行的过程,第三个是本DLL的实列,最后一代表全局钩子。
g_hMain=hwnd;
if(g_Hook!=NULL)
{
return true;
}
else
{
return false;
}
}
然后在主程序中可以动态或静态载入MyDLL.DLL
然后调用SetAPIHook(m_hWnd)就OK了。