截获使用ShellExecuteEx打开的窗口的关闭消息

Intercept the closing message of a window opened with ShellExecuteEx

本文关键字:窗口 消息 ShellExecuteEx      更新时间:2023-10-16

我有一个烦人的程序,关闭时不保存他的位置。我已经制作了一个小控制台程序,可以打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存位置,我如何拦截关闭消息,以便在窗口自行破坏之前保存位置?

由于您可以在启动应用程序后定位窗口,因此您显然拥有窗口的HWND。但是,您不能跨越进程边界对HWND进行子类化,因此您的应用程序不能直接挂接窗口。你必须:

  1. 将一些代码远程注入到启动的进程中,从其自身进程的上下文中对目标窗口进行子类化,然后您的子类可以直接访问窗口接收到的所有消息。

  2. 使用CCD_ 3在DLL中实现全局消息挂钩,并查看目标CCD_。

无论哪种方式,当您的子类/钩子检测到WM_CLLOSE和/或WM_DESTROY消息被传递到目标窗口时,它可以使用您选择的任何进程间通信(IPC)机制(命名管道、命名事件、套接字、mailslot、窗口消息等)将该信息通信回您的应用程序。