一个钩子程序问题的困惑
时间: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版激活秘钥/序列号/激活码推荐 附激活工具 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具阅读:74 
-   如何安装mysql8.0 如何安装mysql8.0阅读:31 
-   Word快速设置标题样式步骤详解 Word快速设置标题样式步骤详解阅读:28 
-   20+道必知必会的Vue面试题(附答案解析) 20+道必知必会的Vue面试题(附答案解析)阅读:37 
-   HTML如何制作表单 HTML如何制作表单阅读:22 
-   百词斩可以改天数吗?当然可以,4个步骤轻松修改天数! 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!阅读:31 
-   ET文件格式和XLS格式文件之间如何转化? ET文件格式和XLS格式文件之间如何转化?阅读:24 
-   react和vue的区别及优缺点是什么 react和vue的区别及优缺点是什么阅读:121 
-   支付宝人脸识别如何关闭? 支付宝人脸识别如何关闭?阅读:21 
-   腾讯微云怎么修改照片或视频备份路径? 腾讯微云怎么修改照片或视频备份路径?阅读:28 















