社区
进程/线程/DLL
帖子详情
为何我的钩子第一次无法执行?
tuiger2003
2003-03-04 12:39:08
各位高手:
我设计了一个全局钩子DLL,并将其在w2k下设成了服务程序,可出现两个问题
1、设为服务程序后,如果马上运行该程序,整个系统变得非常慢,可如果重启系统以后,系统运行速度恢复正常。这一点还好说,重启一下呗。
2、服务程序启起来后,钩子根本未工作。但是我手工再运行一下这个程序,钩子就完全正常了。真搞不懂这是为啥?
...全文
35
9
打赏
收藏
为何我的钩子第一次无法执行?
各位高手: 我设计了一个全局钩子DLL,并将其在w2k下设成了服务程序,可出现两个问题 1、设为服务程序后,如果马上运行该程序,整个系统变得非常慢,可如果重启系统以后,系统运行速度恢复正常。这一点还好说,重启一下呗。 2、服务程序启起来后,钩子根本未工作。但是我手工再运行一下这个程序,钩子就完全正常了。真搞不懂这是为啥?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tuiger2003
2003-06-05
打赏
举报
回复
谢谢你,我已经发信给你了 :)
funcy333
2003-06-05
打赏
举报
回复
还是窗口类的句柄问题,你不要设成win32 application,源代码我可以提供,我的邮箱是funcy333@hotmail.com
tuiger2003
2003-03-05
打赏
举报
回复
至于Hookproc的实现是截获message里需要的东西。
在service程序里只用了一个loadlibrary(...),因为在dll的初始化中已经进行了HookInstaller(),loadlibrary后钩子就挂上了。(见上程序)
tuiger2003
2003-03-05
打赏
举报
回复
.........
static AFX_EXTENSION_MODULE HookDllDLL = { NULL, NULL };
#pragma data_seg("SharedDataName")
HHOOK hHookMsg=0;
HHOOK hHookProc=0;
HINSTANCE hinst=0;
HWND hHandleWnd=0;
#pragma data_seg()
extern "C" _declspec(dllexport) BOOL HookInstaller();
extern "C" _declspec(dllexport) BOOL HookUninstaller();
extern "C" _declspec(dllexport)LRESULT WINAPI CallMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
extern "C" _declspec(dllexport)LRESULT WINAPI CallWndProc(int nCode,WPARAM wParam,LPARAM lParam);
BOOL WINAPI HookProc(HWND hwnd,UINT uiMessage,WPARAM wParam,LPARAM lParam);
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
str_Buff_Size = GetWindowsDirectory(str_Buff,MAX_LEN);
strcat(str_Buff,TEMP_FILE_NAME);
strFileName = str_Buff;
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("HOOKDLL.DLL Initializing!\n");
if (!AfxInitExtensionModule(HookDllDLL, hInstance))
return 0;
numbers++;
if(numbers==1&&phook==0)
{
hinst=hInstance;
HookInstaller();
}
new CDynLinkLibrary(HookDllDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("HOOKDLL.DLL Terminating!\n");
numbers--;
if(numbers==0&&phook)
{
HookUninstaller();
phook=0;
}
AfxTermExtensionModule(HookDllDLL);
}
return 1; // ok
}
BOOL HookInstaller()
{
//CString SaveInfo1="";
//CString strFileName1="";
if((hHookMsg=SetWindowsHookEx(WH_GETMESSAGE,CallMsgProc,hinst,0))!=NULL
&&(hHookProc=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,hinst,0))!=NULL)
return true;
return false;
}
BOOL HookUninstaller()
{
BOOL bUninstall;
if(hHookMsg)
{
bUninstall=UnhookWindowsHookEx(hHookMsg);
if(bUninstall)
{
hHookMsg=NULL;
bUninstall=UnhookWindowsHookEx(hHookProc);
if(bUninstall)
{
hHandleWnd=NULL;
hHookProc=NULL;
}
}
}
return bUninstall;
}
extern "C" _declspec(dllexport)LRESULT WINAPI CallMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
PMSG pMsg=(MSG*)lParam;
if(nCode>=0&&pMsg&&pMsg->hwnd)
{
HookProc(pMsg->hwnd,pMsg->message,pMsg->wParam,pMsg->lParam);
}
return CallNextHookEx(hHookMsg,nCode,wParam,lParam);
}
extern "C" _declspec(dllexport)LRESULT WINAPI CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
PCWPSTRUCT pCwps;
pCwps = (PCWPSTRUCT)lParam;
if (nCode>=0&&pCwps && pCwps->hwnd)
{
HookProc(pCwps->hwnd, pCwps->message, pCwps->wParam, pCwps->lParam);
}
return CallNextHookEx(hHookProc, nCode, wParam, lParam);
}
yangsiwei
2003-03-05
打赏
举报
回复
你是什么钩子,怎么实现的,说明白点呀
tuiger2003
2003-03-05
打赏
举报
回复
钩子第一次挂变慢的问题解决了,是我自已程序的问题。但为啥第一次挂不上的问题还是不清楚!
tuiger2003
2003-03-04
打赏
举报
回复
另外,我的钩子程序在有的w2k机器上运行一次就起来了,有的机器却要两次,这又是为啥?
我钩子DLL中的共享变量是这样写的:
#pragma data_seg("SharedDataName")
HHOOK hHookMsg=0;
HHOOK hHookProc=0;
HINSTANCE hinst=0;
HWND hHandleWnd=0;
#pragma data_seg()
Daniel22_cn
2003-03-04
打赏
举报
回复
gz..........
tuiger2003
2003-03-04
打赏
举报
回复
我可以肯定钩子挂上了,因为我想删除这个dll, 可系统提示这个文件正被占用。可为什么第一次不工作呢?
Flask框架
钩子
函数功能与用法分析
本文实例讲述了Flask框架
钩子
函数功能与用法。分享给大家供大家参考,具体如下: 在Flask中
钩子
函数是使用特定的装饰器的函数。为什么叫做
钩子
函数呢,是因为
钩子
函数可以在正常
执行
的代码中,插入一段自己想要
执行
的代码,那么这种函数就叫做
钩子
函数。 before_first_request:Flask项目
第一次
部署后会
执行
的
钩子
函数。 before_request:请求已经到达了Flask,但是还没有进入到具体的视图函数之前调用。一般这个就是在函数之前,我们可以把一些后面需要用到的数据先处理好,方便视图函数使用。 before_request @app.before_first_req
vue中各选项及
钩子
函数
执行
顺序详解
在vue中,实例选项和
钩子
函数和{{}}表达式都是不需要手动调用就可以直接
执行
的。 vue的生命周期如下图: 在页面首次加载
执行
顺序有如下: beforeCreate //在实例初始化之后、创建之前
执行
created //实例创建后
执行
beforeMounted //在挂载开始之前调用 filters //挂载前加载过滤器 computed //计算属性 directives-bind //只调用一次,在指令
第一次
绑定到元素时调用 directives-inserted //被绑定元素插入父节点时调用 activated //keek-alive组件被激活时调用,则在keep-alive
Vue指令的
钩子
函数使用方法
在Vue 中可以把一系列复杂的操作包装为一个指令。 什么是复杂的操作? 我的理解是:复杂逻辑功能的包装、违背数据驱动的 DOM 操作以及对一些 Hack 手段的掩盖等。我们总是期望以操作数据的形式来实现功能逻辑。
钩子
函数 对于自定义指令的定义,Vue2 有 5 个可选的
钩子
函数。 bind: 只调用一次,指令
第一次
绑定到元素时调用,用这个
钩子
函数可以定义一个在绑定时
执行
一次的初始化动作。 inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。 update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。 componentUpd
Flask之请求
钩子
的实现
请求
钩子
通过装饰器为一个模块添加请求
钩子
, 对当前模块的请求进行额外的处理. 比如权限验证. 说白了,就是在
执行
视图函数前后你可以进行一些处理,Flask使用装饰器为我们提供了注册通用函数的功能。 1、before_first_request:在处理第一个请求前
执行
before_first_request 在对应用程序实例的第一个请求之前注册要运行的函数, 只会
执行
一次 #: A lists of functions that should be called at the beginning of the #: first request to this instanc
thinkphp5.1 框架
钩子
和行为用法实例分析
本文实例讲述了thinkphp5.1 框架
钩子
和行为用法。分享给大家供大家参考,具体如下: 行为 ThinkPHP中的行为是一个比较抽象的概念,可以把行为想象成在应用
执行
过程中的一个动作。 在框架的
执行
流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的
第一次
访问弹出Hello,world!这些都可以看成是一种行为,把这些行为抽离出来的目的是为了让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。
钩子
不同的行为之间也具有位置共同性,比如,有些行为的作用位置
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章