Установите не принадлежащее ему окно всегда сверху - как приложение «На плаву»

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

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

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

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

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

Это приложение под названием «На плаву» использовало «SIMBL» для достижения этой цели. Из любого окна вы можете нажать Cmd + A, и оно будет всегда сверху. Однако я пытаюсь сделать с C / ObjC из моего обычного настольного приложения без использования таких помощников, как SIMBL.Источник:Окно принудительного хранения приложения - Mac OS XSIMBL:http://www.culater.net/software/SIMBL/SIMBL.phpAfloat:https://www.macupdate.com/app/mac/22237/afloat

Я сталкиваюсь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 окон.

Ответы на вопрос(0)

Ваш ответ на вопрос