Установка передней стороны большая часть окна с помощью доступности API

Я хочу установить определенное окно, из внешнего приложения (например, textedit), быть передней стороной больше всего.

Я могу успешно получить ссылку на само приложение с помощью GetFrontProcess и проверить, является ли это передней стороной больше всего. Если это не, я могу использовать setFrontProcess для создания, это сфокусировалось.

Я могу затем использовать доступность API для исследования всех окон в соответствии с тем приложением. Я проверяю, что существует определенное окно, и раз так я сравниваю его с передней стороной большая часть окна приложения:

//get the front window of textEditApp and store it in 'currentFrontWindow'
    AXUIElementCopyAttributeValue(textEditApp, kAXFocusedWindowAttribute, (CFTypeRef *)&currentFrontWindow);

Если окно, которым я интересуюсь, не является frontmost, я должен установить его так. Я думал, что мог использовать Набор AXUIElement AttributeValue, чтобы сделать это, но я не получаю успеха. Ниже то, как я попытался сделать это.

//set the front window of textEditApp to be desiredFrontWindow
AXUIElementSetAttributeValue(textEditApp, kAXFocusedUIElementAttribute, desiredFrontWindow);

Я проверил, что окно существует, и приложение 'переключается на' успешно. Но почему эта строка кода не выявляет указанное окно?

Спасибо.

5
задан Ben Packard 22 January 2010 в 01:14
поделиться

1 ответ

Но почему эта строка кода не принесет указанное окно на фронт?

, потому что вы пытались установить атрибут только для чтения.

Для того, чтобы сделать окно переднее, вам нужно установить соответствующее свойство окна. То же самое касается приложения: сделать приложение Flower, вам нужно установить соответствующее свойство приложения.

Название какао / Mac OS X для переднего окна - «Главное окно». (См., Например, NSApplication и Методы Nswindow , относящиеся к этой концепции.) Доступность использует одно и то же имя, поэтому для того, чтобы сделать одно окно переднее, установить значение kaxmainattribute к KCFBooleantrue .

Способ выполнения приложения Fanehouse аналогичен: установите значение его KAXFRONTTATTTRIBUTE к KCFBooleAntrue . Вам нужно будет делать оба из них, чтобы оба установить переднее окно приложения и сделать приложение активным.

Насколько я могу сказать, нет способа привести только одно окно на переднюю часть приложения и придавать его фокусировку.

8
ответ дан 13 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: