Establecer la ventana no propiedad siempre en la parte superior - Al igual que la aplicación "a flote"
He configurado una tecla de acceso rápido global conRegisterEventHotkey
. Cuando el usuario lo presiona, obtiene la ventana actualmente enfocada conCGWindowListCopyWindowInfo
, y luego necesito configurarlo siempre en la parte superior.
Si la ventana actual está en mi proceso (desde el cual estoy ejecutando el código), simplemente puedo convertir elwindowNumber
deCGWindowListCopyWindowInfo
a unNSWindow
y hacersetLevel
:
nswin = [NSApp windowWithWindowNumber:windowNumber]
[nswin setLevel: Int(CGWindowLevelForKey(kCGFloatingWindowLevelKey))]
Mi problema No puedo hacer esto si la ventana actualmente enfocada no está en mi proceso. ¿Me puede mostrar cómo?
Cosas que probé:
Esta aplicación llamada "Afloat" usó "SIMBL" para lograr esto. Desde cualquier ventana, puede presionar Cmd + A y se establecerá siempre en la parte superior. Sin embargo, estoy tratando de hacer con C / ObjC desde mi aplicación de escritorio normal sin el uso de ayudantes como SIMBL.Fuente:Forzar mantener la ventana de la aplicación en la parte superior - Mac OS XSIMBL:http://www.culater.net/software/SIMBL/SIMBL.phpA flote:https://www.macupdate.com/app/mac/22237/afloatvengo a través deCGSSetWindowLevel
enCGPrivate.h
- material indocumentado -https://gist.github.com/Noitidart/3664c5c2059c9aa6779f#file-cgsprivate-h-L63 - Sin embargo, recuerdo que intenté algo como esto en el pasado, pero recibí un error al intentar conectarme a una ventana que no estaba en el proceso de llamada.
Solo el propietario de una ventana puede manipularla. Entonces, Apple tiene el concepto de un propietario universal que posee todas las ventanas y puede manipularlas a todas. Solo puede haber un propietario universal a la vez (el Dock).
Tal vez, ¿hay alguna forma de pretender que mi proceso de llamada sea temporalmente el muelle? Tal vezCGSGetConnectionIDForPSN
para el muelle entonces usa esa conexión?
Mi uso: estoy tratando de replicar la funcionalidad de mi complemento de navegador de código abierto, gratuito -https://addons.mozilla.org/en-US/firefox/addon/topick/ - Entonces mi proceso de llamada si Firefox. Funciona en Windows y Linux en este momento, y solo necesito descubrir cómo hacerlo en mac para ventanas que no son Firefox.