Установите не принадлежащее окно всегда сверху. Как приложение "Afloat",

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

Если текущее окно находится в моем процессе (из которого я выполняю код), я могу просто преобразовать windowNumber из CGWindowListCopyWindowInfo в NSWindow и сделать setLevel:

nswin = [NSApp windowWithWindowNumber:windowNumber]
[nswin setLevel: Int(CGWindowLevelForKey(kCGFloatingWindowLevelKey))]

Моя проблема Я не могу это сделать, если окно, сфокусированное в данный момент, не находится в моем процессе. Не могли бы вы показать мне, как?

Материал, который я пробовал:

  • Это приложение, названное "Afloat", использовало "SIMBL" для этого. Из любого окна вы можете нажать Cmd + A, и он будет установлен всегда сверху. Тем не менее, я пытаюсь сделать C/ObjC из своего обычного рабочего стола без использования помощников, таких как SIMBL.
  • Я встречаюсь CGSSetWindowLevel в CGPrivate.h - недокументированный материал - https://gist.github.com/Noitidart/3664c5c2059c9aa6779f#file-cgsprivate-h-L63 - Однако, я помню, я попробовал что-то как это в прошлом, но получал бы ошибку, поскольку я пытался подключиться к окну, которое не было в вызывающем процессе.

    • Здесь говорится - https://github.com/lipidity/CLIMac/blob/114dfee39d24809f62ccb000ea22dfda15c11ce8/src/CGS/CGSInternal/.svn/text-base/CGSConnection.h.svn-base#L82

      Только владелец окна может манипулировать им. Итак, у Apple есть концепция универсального владельца, который владеет всеми окнами и может ими управлять. Могут быть только один универсальный владелец за раз (Док).

    • Может, так или иначе притвориться, что мой процесс вызова временно будет док-станцией? Может быть, CGSGetConnectionIDForPSN для док-станции, используя это соединение?

Мое использование: я пытаюсь реплицировать функциональность моего открытого исходного кода, бесплатно, аддон браузера - https://addons.mozilla.org/en-US/firefox/addon/topick/ - поэтому мой вызов процесс, если Firefox. Он работает в Windows и Linux прямо сейчас, и просто нужно выяснить, как это сделать в Mac для не-Firefox-окон.