От собственного API Win32 с помощью C++ там способ определить, допустимо ли окно, связанное с HWND все еще?
Вы можете использовать Win32 API IsWindow .
Не рекомендуется использовать его по 2 причинам:
Из MSDN (та же ссылка, что и выше):
Поток не должен использовать IsWindow для окна , которое он не создавал, потому что окно может быть уничтожено после {{1} } эта функция была вызвана. Кроме того, поскольку дескрипторы окон повторно используются дескриптор может даже указывать на другое окно.
Что можно сделать?
Возможно, вашу проблему можно изменить так, чтобы у вас не было необходимости проверять действительный дескриптор. Например, вы можете установить канал от клиента к серверу.
Вы также можете создать ловушку Windows для определения появления определенных сообщений, но это, вероятно, излишне для большинства нужд.
Вы можете использовать IsWindow () или также попытаться отправить окну сообщение WM_NULL с помощью SendMessage (hWnd, WM_NULL) и посмотреть, успешно ли оно.
Также верно, что окно может быть уничтожено в любое время, если оно не находится под вашим контролем. Как утверждали другие, дескриптор потенциально может принадлежать другому окну, поскольку дескрипторы используются повторно. На самом деле я не знаю, насколько это вероятно.
Единственное известное мне решение - создать системный хук , который ищет сообщения, указывающие на то, что окно уничтожено (WM_CLOSE, WM_DESTROY). Затем вы сравните дескриптор окна сообщения с тем, что вы держите, чтобы увидеть, не затронуты ли какие-либо из интересующих вас окон. См. Здесь для получения дополнительной информации о обработчиках в масштабе всей системы.