C++ 截获使用ShellExecuteEx打开的窗口的关闭消息
我有一个恼人的程序,在关闭时不能保存他的位置。C++ 截获使用ShellExecuteEx打开的窗口的关闭消息,c++,windows,winapi,windows-messages,shellexecuteex,C++,Windows,Winapi,Windows Messages,Shellexecuteex,我有一个恼人的程序,在关闭时不能保存他的位置。 我制作了一个小的控制台程序,可以打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存该位置,如何截获关闭消息,以便在窗口自毁之前保存该位置?既然你可以在启动应用程序后定位窗口,显然,您有窗口的HWND。但是,您不能跨流程边界对HWND进行子类化,因此您的应用程序无法直接钩住窗口。您必须: 远程将一些代码注入已启动的进程,以便在其自身进程的上下文中对目标窗口进行子类化,然后您的子类可以直接访问窗口接收的所有消息 使用在DLL中实现全局消息挂钩,并
我制作了一个小的控制台程序,可以打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存该位置,如何截获关闭消息,以便在窗口自毁之前保存该位置?既然你可以在启动应用程序后定位窗口,显然,您有窗口的
HWND
。但是,您不能跨流程边界对HWND
进行子类化,因此您的应用程序无法直接钩住窗口。您必须:
HWND
接收的所有消息无论哪种方式,当您的子类/钩子检测到一个
WM\u CLLOSE
和/或WM\u DESTROY
消息被传递到目标窗口时,它可以使用您选择的任何进程间通信(IPC)机制将该信息传递回您的应用程序-命名管道、命名事件、套接字、邮箱、窗口消息等(示例:)“我有一个恼人的程序,在关闭时不能保存他的位置。“大多数应用程序不会保存它们的位置。要做到这一点,应用程序必须经过专门编码。根据Remy的评论,如果应用程序在退出时没有存储其窗口位置,那么在启动时加载此信息的可能性有多大?从哪里来?Windows7引入了许多快捷方式来快速定位窗口。也许其中一个可以帮助减少此应用程序窗口定位的麻烦。感谢您提供的链接;)@可检测:从STARTUPINFO
中。事实上,Win32 API强制应用程序从调用方传递到矩形,因为很多应用程序都没有遵守该矩形。