Страницы

Поиск по вопросам

воскресенье, 1 марта 2020 г.

Как лучше всего проверить, что окно существует?

#c_sharp #windows #visual_studio #winapi


Допустим, я пишу функцию, которая по значению дескриптора должна вернуть логическое
значение, существует ли окно с таким дескриптором. Я представляю огромное количество
реализаций - от перебора всех окон через GetProcesses или EnumWindow и до вызова какой-нибудь
функции, принимающей hwnd, и возвращающую результат. А может я все усложняю, а такая
функция входит в user32. В общем, как будет лучше и быстрее?
    


Ответы

Ответ 1



Есть WinApi функция IsWindow, но как пишут в этом ответе хендл может переназначаться => если вы пасете определенное окно и хотите проверить его существование, то окно может быть уже закрыто, но хендл с таким же номером был создан для другого окна. [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool IsWindow(IntPtr hWnd); Получается, что имеет смысл воспользоваться вот этой функцией, если у окна есть специфическое название GetWindowText , она вернет Caption окна и можно удостоверится, что именно желаемое окно живо. Через WinApi я думаю, что быстрее. Что лучше? Все зависит от того, как часто вы это собираетесь делать. Если не часто, то я бы не заморачивался и выполнял итерацию по процессам.

Комментариев нет:

Отправить комментарий