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

时间:2015-03-27 21:52:26

标签: c++ windows winapi windows-messages shellexecuteex

我有一个讨厌的程序,在关闭时不能保存他的位置。 我做了一个小的控制台程序打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存位置,我如何拦截关闭消息以便我可以在窗口销毁之前保存位置本身?

1 个答案:

答案 0 :(得分:0)

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

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

  2. 使用SetWindowsHookEx()在DLL中实现全局消息挂钩,并查看目标HWND收到的所有消息。

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