一个钩子程序问题的困惑
时间:2011-11-09
来源:互联网
请教各位大侠:
最近刚在学HOOK,遇到一个问题,钩子程序代码如下,使用WH_CBT钩子,作用是在获取到窗口HCBT_DESTROYWND的消息后将发送消息给自己的主程序,主程序将判断此HCBT_DESTROYWND消息是否为一个特定的应用软件程序,如果是的话则主程序也关闭,遇到如下问题:
1、只有在任务栏上的程序图标上右键选关闭,才能触发HCBT_DESTROYWND,但MSDN上称HCBT_DESTROYWND消息是在窗口被销毁时触发,理论上使用任何方式关闭窗口都可以触发
2、其它程序用右键关闭后,未及时获取到HCBT_DESTROYWND消息,只有在任务栏上用右键关闭主程序时才能收到之前关闭程序的HCBT_DESTROYWND消息
不知问题出在哪里?抑或我的理解有问题?请给予帮助
function ShellHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if nCode<0 then
Result := CallNextHookEx(sHook, nCode, wParam, LParam);
if nCode=HCBT_DESTROYWND then
begin
info:=Format('%d',[nCode]);
PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
end;
Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;
最近刚在学HOOK,遇到一个问题,钩子程序代码如下,使用WH_CBT钩子,作用是在获取到窗口HCBT_DESTROYWND的消息后将发送消息给自己的主程序,主程序将判断此HCBT_DESTROYWND消息是否为一个特定的应用软件程序,如果是的话则主程序也关闭,遇到如下问题:
1、只有在任务栏上的程序图标上右键选关闭,才能触发HCBT_DESTROYWND,但MSDN上称HCBT_DESTROYWND消息是在窗口被销毁时触发,理论上使用任何方式关闭窗口都可以触发
2、其它程序用右键关闭后,未及时获取到HCBT_DESTROYWND消息,只有在任务栏上用右键关闭主程序时才能收到之前关闭程序的HCBT_DESTROYWND消息
不知问题出在哪里?抑或我的理解有问题?请给予帮助
function ShellHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if nCode<0 then
Result := CallNextHookEx(sHook, nCode, wParam, LParam);
if nCode=HCBT_DESTROYWND then
begin
info:=Format('%d',[nCode]);
PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
end;
Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;
作者: blue_china 发布时间: 2011-11-09
function ShellHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if nCode<0 then
begin
Result := CallNextHookEx(sHook, nCode, wParam, LParam);
exit;
end;
if nCode=HCBT_DESTROYWND then
begin
info:=Format('%d',[nCode]);
PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
end;
Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;
另外,用postMessage真的能传字符串吗?应当用SendMessage + WM_COPYDATA吧?
begin
if nCode<0 then
begin
Result := CallNextHookEx(sHook, nCode, wParam, LParam);
exit;
end;
if nCode=HCBT_DESTROYWND then
begin
info:=Format('%d',[nCode]);
PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
end;
Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;
另外,用postMessage真的能传字符串吗?应当用SendMessage + WM_COPYDATA吧?
作者: s11ss 发布时间: 2011-11-10
哦,info是全局的...
作者: s11ss 发布时间: 2011-11-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28