Я хочу установить определенное окно, из внешнего приложения (например, textedit), быть передней стороной больше всего.
Я могу успешно получить ссылку на само приложение с помощью GetFrontProcess и проверить, является ли это передней стороной больше всего. Если это не, я могу использовать setFrontProcess для создания, это сфокусировалось.
Я могу затем использовать доступность API для исследования всех окон в соответствии с тем приложением. Я проверяю, что существует определенное окно, и раз так я сравниваю его с передней стороной большая часть окна приложения:
//get the front window of textEditApp and store it in 'currentFrontWindow'
AXUIElementCopyAttributeValue(textEditApp, kAXFocusedWindowAttribute, (CFTypeRef *)¤tFrontWindow);
Если окно, которым я интересуюсь, не является frontmost, я должен установить его так. Я думал, что мог использовать Набор AXUIElement AttributeValue, чтобы сделать это, но я не получаю успеха. Ниже то, как я попытался сделать это.
//set the front window of textEditApp to be desiredFrontWindow
AXUIElementSetAttributeValue(textEditApp, kAXFocusedUIElementAttribute, desiredFrontWindow);
Я проверил, что окно существует, и приложение 'переключается на' успешно. Но почему эта строка кода не выявляет указанное окно?
Спасибо.
Но почему эта строка кода не принесет указанное окно на фронт?
, потому что вы пытались установить атрибут только для чтения.
Для того, чтобы сделать окно переднее, вам нужно установить соответствующее свойство окна. То же самое касается приложения: сделать приложение Flower, вам нужно установить соответствующее свойство приложения.
Название какао / Mac OS X для переднего окна - «Главное окно». (См., Например, NSApplication и Методы Nswindow , относящиеся к этой концепции.) Доступность использует одно и то же имя, поэтому для того, чтобы сделать одно окно переднее, установить значение kaxmainattribute
к KCFBooleantrue
.
Способ выполнения приложения Fanehouse аналогичен: установите значение его KAXFRONTTATTTRIBUTE
к KCFBooleAntrue
. Вам нужно будет делать оба из них, чтобы оба установить переднее окно приложения и сделать приложение активным.
Насколько я могу сказать, нет способа привести только одно окно на переднюю часть приложения и придавать его фокусировку.