Что нового

Найти нужное окно

musicstashall

Знающий
Сообщения
322
Репутация
7
Доброго времени.
Речь о Win 10. Задача такая: нужно найти дескрипторы Начального экрана и Центра уведомлений. Оба окна состоят по крайней мере из двух окон, нужно определить указанные ниже окна, не имея их заголовков, ну или определить их заголовки, разницы нет, так как потенциально локализация может быть не только русской :smile: Анализ Hook дает результаты только по задним окнам, которые выполняют роль рамки или фона окна:

Код:
$hWnd = _WinAPI_FindWindow('StartMenuSizingFrame', '') ;Рамка и задний фон нач экрана
$hWnd = _WinAPI_FindWindow('Windows.UI.Core.CoreWindow', 'Начальный экран') ; окно, которое нужно найти

$hWnd = _WinAPI_FindWindow('Shell_LightDismissOverlay', '') ; рамка центра уведомлений
$hWnd = _WinAPI_FindWindow('Windows.UI.Core.CoreWindow', 'Центр уведомлений') ; окно, которое нужно найти


Пробовал использовать _WinAPI_GetWindow($hWnd, $iCmd) с различными связями, тоже результата нет.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
Эти окна не совсем обычные, т.к. находятся над рабочим столом (инфо). Найти их можно через FindWindow (как в вашем примере), но нужен заголовок. Если вместо заголовка указать NULL, то будет найдено первое попавшееся. Функции WinAPI, перечисляющие окна, найти их не могут. Функции WinAPI, определяющие родителей, останавливаются на рабочем столе. На данный момент я знаю два способа поиска этих окон без учёта заголовка: через _WinAPI_WindowFromPoint и с помощью UIAutomate. Но в обоих случаях искомое окно должно быть видимо.
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Ну, через _WinAPI_WindowFromPoint я уже пробовал, это не сосвсем удачный способ, а вот ваша UDF очень интересна, с удовольствием забираю.

ПС: утилита Inspect наверное использует системный хук MSAA EVENT_OBJECT_CREATE?? Я недавно нашел на оф сайте такое, многое открыл для себя)
 
Верх