Как программно переместить конкретное приложение на определенный дисплей

#macos #cocoa #macos-big-sur

Вопрос:

Мне нужно переместить конкретное запущенное приложение на определенный дисплей.

Прежде всего, я получаю список запущенных приложений с

 let workspace = NSWorkspace.shared
let apps = workspace.runningApplications
  .filter{  $0.activationPolicy == .regular }
 

если я печатаю приложения, я получаю что-то вроде

 ▿ 6 elements
  - 0 : <NSRunningApplication: 0x6000021fa480 (com.apple.Safari - 608) LSASN:{hi=0x0;lo=0xc00c}>
  - 1 : <NSRunningApplication: 0x6000021fa500 (com.apple.dt.Xcode - 610) LSASN:{hi=0x0;lo=0xd00d}>
  - 2 : <NSRunningApplication: 0x6000021fa600 (com.apple.Preview - 625) LSASN:{hi=0x0;lo=0x10010}>
  - 3 : <NSRunningApplication: 0x6000021fb280 (com.apple.finder - 629) LSASN:{hi=0x0;lo=0x2f02f}>
  - 4 : <NSRunningApplication: 0x6000021f3480 (org.mozilla.firefox - 9202) LSASN:{hi=0x0;lo=0x75075}>
 

Предположим, предварительный просмотр находится на мониторе 2 справа, и я хочу переместить его на монитор 1 слева.

Как мне это сделать на Бигсуре?

Комментарии:

1. Есть ли на дисплеях отдельные места?

2. ДА………….

3. У меня нет ответа, но вам, вероятно, потребуется использовать платформу специальных возможностей (которая потребует разрешения пользователя для вашего приложения для управления пользовательским интерфейсом другого приложения). Для одного приложения нет прямого способа изменить пользовательский интерфейс другого приложения.

4. Я сделал это несколько недель назад, используя AppleScript. Теперь я хотел бы сделать это в Swift…