У меня есть надоедливая программа, которая не сохраняет свою позицию при закрытии.
Я сделал небольшую консольную программу, которая открывает его и перемещает окно в другую позицию, теперь я хочу сохранить позицию, когда программа закрывается, как я могу перехватить закрывающее сообщение, чтобы я мог сохранить позицию, прежде чем окно разрушит само себя?
Поскольку вы можете расположить окно после запуска его приложения, у вас, очевидно, есть окно HWND
, Тем не менее, вы не можете подкласс HWND
через границы процесса, поэтому ваше приложение не может подключить окно напрямую. Вы должны либо:
удаленно внедрить некоторый код в запущенный процесс, чтобы создать подкласс целевого окна из контекста своего собственного процесса, тогда ваш подкласс имеет прямой доступ ко всем сообщениям, которые получает окно.
реализовать глобальный хук сообщений в DLL с помощью SetWindowsHookEx()
и посмотрите на все сообщения, которые цель HWND
получает.
В любом случае, когда ваш подкласс / хук обнаруживает WM_CLLOSE
и / или WM_DESTROY
доставляя сообщение в целевое окно, оно может передавать эту информацию обратно в ваше приложение, используя любой механизм межпроцессного взаимодействия (IPC) по вашему выбору — именованный канал, именованное событие, сокет, почтовый ящик, оконное сообщение и т. д.