gpt4 book ai didi

c++ - CallWindowProc 在退出时崩溃

转载 作者:行者123 更新时间:2023-11-30 02:00:00 29 4
gpt4 key购买 nike

为了 Hook wndproc,我编写了一个 wndprochook 并使用 SetWindowLong:

wndproc=(WNDPROC)GetWindowLong(hwnd_1,GWL_WNDPROC);
SetWindowLong(hwnd_1,GWL_WNDPROC,(LONG)wndprochook);

现在我必须在 wndproc 中做一些事情,在函数结束时,我调用原始的 wndproc:

return wndproc(hwnd, uMsg, wParam, lParam);

它失败了,但谢天谢地我找到了CallWindowProc:

return CallWindowProc(wndproc, hwnd, uMsg, wParam, lParam);

现在可以了。那么问题1:为什么我们必须使用CallWindowProc?仅调用 wndproc 时缺少什么?

钩子(Hook)运行良好,但当我退出程序时,它崩溃了。当然,一切都已完成,崩溃实际上并没有影响任何东西。但是看到崩溃仍然很糟糕。所以问题2:这里可能发生了什么以及如何解决?

很抱歉,我没有关于原始程序如何自行关闭的信息,因为我所做的只是 Hook wndproc 以捕获一些消息。所以我只希望有足够经验并且曾经遇到过类似情况的人能提供帮助。

最佳答案

来自 CallWindowProc 的文档:

“If this value is obtained by calling the GetWindowLong function with the nIndex parameter set to GWL_WNDPROC or DWL_DLGPROC, it is actually either the address of a window or dialog box procedure, or a special internal value meaningful only to CallWindowProc

除非像 CallWindowProc 那样做,否则不能调用“特殊内部值”,最简单的方法是调用 CalLWindowProc ...

顺便说一下,看看 SetWindowSubclass,它可能会减轻您的负担。

关于c++ - CallWindowProc 在退出时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572221/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com