Один из способов сделать это - использовать API специальных возможностей.
Приложение, которое я разрабатываю, делает это, чтобы получить переднее окно, путь к документу переднего окна и многие другие атрибуты.
Я делаю это через AppleScript. Иногда это может быть неуклюжим, но, похоже, довольно надежным. Я использую AppScript для отправки AppleScript из моего приложения Какао. Он безопасен для потоков и более стабилен, чем альтернативы - либо Scripting Bridge, либо NSAppleScript.
Сложным битом будет идентификация окна по его идентификатору окна в AppleScript - кажется, что у AppleScript нет свойства идентификатора окна, которое соответствует CGWindowID. Тем не менее, вы можете получить любое окно, которое вы хотите, используя AppleScript.
Переместить самое переднее окно на 100, 100
tell application "System Events"
set theprocess to the first process whose frontmost is true
set thewindow to the value of attribute "AXFocusedWindow" of theprocess
set position of thewindow to {100, 100}
end tell
Изменить размер переднего окна до 200, 300
tell application "System Events"
set theprocess to the first process whose frontmost is true
set thewindow to the value of attribute "AXFocusedWindow" of theprocess
set size of thewindow to {200, 300}
end tell
Изменить текущее окно самого переднего приложения
tell application "System Events"
set theprocess to the first process whose frontmost is true
set thewindow to the value of attribute "AXFocusedWindow" of theprocess
set size of thewindow to {200, 300}
windows of theprocess
-- Code to get ID of window you want to activate
tell window 2 of theprocess -- assuming it's window 2
perform action "AXRaise"
end tell
end tell
Активное окно
tell application "System Events"
set theprocess to the first process whose frontmost is true
set thewindow to the value of attribute "AXFocusedWindow" of theprocess
end tell
Для AppScript доступно приложение под названием ASTranslate , которое превратит этот AppleScript в код Objective C, который вызывает соответствующие команды в AppScript.
Для получения дополнительной информации о том, как получить размер и границы окон (насколько я знаю, они доступны только для чтения), см. Пример приложения Сын Грабя .