#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 я думаю, что быстрее. Что лучше? Все зависит от того, как часто вы это собираетесь делать. Если не часто, то я бы не заморачивался и выполнял итерацию по процессам.
Комментариев нет:
Отправить комментарий