Я установил глобальную горячую клавишу с 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-окон.