通过DLL方式,使用全局键盘钩子(WH_KEYBOARD_LL),运行程序后,键盘钩子有效,但大约15分钟后,键盘钩子就失效了。 把界面从CHtmlView换成CView后,就一切正常。 恳请哪位大侠提点一点,小弟先谢过。
解决方案 »
- 算术编码代码
- VS2008删除了系统菜单 怎么加回去
- MSFLEXGRID的垂直滚动条宽度怎么改啊
- DrawText写的字如何清除?
- 急!! CString 有什么库函数 直接转化为 UINT thank you!
- 怎么删除这个指针?
- 为什么CWnd::WindowProc可以拦截到WM_ACTIVATE而CWnd::PretranslateMessage()则不能?在我看来它们只是执行的顺序不同而已。有什么函数可
- 我发现我的程序有不少内存泄露,但是不知道到底是哪出的问题。
- 那里有ADO下载?
- 如何用CAsynSocket进行异步通信?论者有分!
- vc++6.0退出程序???
- 谁在DLL中实现过多文档框架?100分赠送
请问怎么看虚拟内存的使用情况?我刚才折腾了一下,把成员函数OnInitialUpdata()中的Navigate2注释掉,钩子就不会失效。 也就是说一装入页面就会出现钩子失效的情况void Ctest_htmlView::OnInitialUpdate()
{
CHtmlView::OnInitialUpdate();
//Navigate2(_T("http://www.msdn.microsoft.com/visualc/"),NULL,NULL); (把这个注释掉钩子就不会失效了)
}主程序使用MFC,钩子的DLL文件没使用MFC,是纯WIN32 API编的。 是不是我的DLL处理得不完善?或者有什么需要注意的地方? 望各位能提点一下
症 状:当界面用CVIEW类时,钩子正常运行. 但当用CHtmlView做界面时,运行一会后钩子自动失效。
原因如下:
在DLL的入点函数线程退出的时候 放了一条卸下钩子的语句(用***...标识了),具体如下:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
thisModule=(HINSTANCE)hModule; //保存DLL的句柄
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_DETACH:
***(就是这条语句造成的) if(Hook!=NULL) UnhookWindowsHookEx(Hook); //DLL退出时清除钩子
break;
} return TRUE;
}---------------------------------------------------------------------------------------------------
后来经测试得知,使用CHtmlView类时,装载页面后,会自动不定时出现多次DLL卸载的事件。希望有人能解答一下,THANKS A LOT.