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

171
12 апреля 2018, 10:54

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

Answer 1

Есть WinApi функция IsWindow, но как пишут в этом ответе хендл может переназначаться => если вы пасете определенное окно и хотите проверить его существование, то окно может быть уже закрыто, но хендл с таким же номером был создан для другого окна.

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindow(IntPtr hWnd);

Получается, что имеет смысл воспользоваться вот этой функцией, если у окна есть специфическое название GetWindowText , она вернет Caption окна и можно удостоверится, что именно желаемое окно живо.

Через WinApi я думаю, что быстрее.

Что лучше?

Все зависит от того, как часто вы это собираетесь делать. Если не часто, то я бы не заморачивался и выполнял итерацию по процессам.

READ ALSO
Как получить состояние видеокарты NVIDIA?

Как получить состояние видеокарты NVIDIA?

Стоит задача, программно получить напряжение, и желательно нагрузку и частоты как в NVIDIA Inspector с видеокарт NVIDIAБыл реализован вариант с использованием...

177
Как из DataGridView получить в textBox номер колонки?

Как из DataGridView получить в textBox номер колонки?

Задача: На нашей форме есть DataGridView и несколько, к примеру пять textBoxНужно выбирая мышкой ячейки DataGridView получать номер колонки в каждом textBox-е

147
DateTimePicker в DataGridView

DateTimePicker в DataGridView

ПРИМЕР↓

257
ASP NET MVC не грузятся данные из файла

ASP NET MVC не грузятся данные из файла

Есть ASPNET MVC сайт, есть на входе файл Excel, содержимое файла нужно загрузить через сайт в БД

200