Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 截获使用ShellExecuteEx打开的窗口的关闭消息_C++_Windows_Winapi_Windows Messages_Shellexecuteex - Fatal编程技术网

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

C++ 截获使用ShellExecuteEx打开的窗口的关闭消息,c++,windows,winapi,windows-messages,shellexecuteex,C++,Windows,Winapi,Windows Messages,Shellexecuteex,我有一个恼人的程序,在关闭时不能保存他的位置。 我制作了一个小的控制台程序,可以打开它并将窗口移动到另一个位置,现在我想在程序关闭时保存该位置,如何截获关闭消息,以便在窗口自毁之前保存该位置?既然你可以在启动应用程序后定位窗口,显然,您有窗口的HWND。但是,您不能跨流程边界对HWND进行子类化,因此您的应用程序无法直接钩住窗口。您必须: 远程将一些代码注入已启动的进程,以便在其自身进程的上下文中对目标窗口进行子类化,然后您的子类可以直接访问窗口接收的所有消息 使用在DLL中实现全局消息挂钩,并

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

既然你可以在启动应用程序后定位窗口,显然,您有窗口的
HWND
。但是,您不能跨流程边界对
HWND
进行子类化,因此您的应用程序无法直接钩住窗口。您必须:

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

  • 使用在DLL中实现全局消息挂钩,并查看目标
    HWND
    接收的所有消息


  • 无论哪种方式,当您的子类/钩子检测到一个
    WM\u CLLOSE
    和/或
    WM\u DESTROY
    消息被传递到目标窗口时,它可以使用您选择的任何进程间通信(IPC)机制将该信息传递回您的应用程序-命名管道、命名事件、套接字、邮箱、窗口消息等(示例:)“我有一个恼人的程序,在关闭时不能保存他的位置。“大多数应用程序不会保存它们的位置。要做到这一点,应用程序必须经过专门编码。根据Remy的评论,如果应用程序在退出时没有存储其窗口位置,那么在启动时加载此信息的可能性有多大?从哪里来?Windows7引入了许多快捷方式来快速定位窗口。也许其中一个可以帮助减少此应用程序窗口定位的麻烦。感谢您提供的链接;)@可检测:从
    STARTUPINFO
    中。事实上,Win32 API强制应用程序从调用方传递到矩形,因为很多应用程序都没有遵守该矩形。