Definir a janela de propriedade sempre sempre no topo - como o aplicativo "À tona"
Eu configurei uma tecla de atalho global comRegisterEventHotkey
. Quando o usuário pressiona, ele obtém a janela atualmente focada comCGWindowListCopyWindowInfo
e, em seguida, preciso defini-lo sempre no topo.
Se a janela atual estiver em meu processo (a partir da qual estou executando o código), posso simplesmente converter owindowNumber
deCGWindowListCopyWindowInfo
para umNSWindow
e fazersetLevel
:
nswin = [NSApp windowWithWindowNumber:windowNumber]
[nswin setLevel: Int(CGWindowLevelForKey(kCGFloatingWindowLevelKey))]
Meu problema Não consigo fazer isso se a janela atualmente focada não estiver no meu processo. Pode me mostrar como?
Coisas que eu tentei:
Este aplicativo aqui chamado "Afloat" usou "SIMBL" para fazer isso. A partir de qualquer janela, você pode pressionar Cmd + A e ele ficará sempre no topo. No entanto, estou tentando fazer com o C / ObjC do meu aplicativo de desktop normal sem o uso de auxiliares como o SIMBL.Fonte:Forçar a manutenção da janela do aplicativo no topo - Mac OS XSIMBL:http://www.culater.net/software/SIMBL/SIMBL.phpÀ tona:https://www.macupdate.com/app/mac/22237/afloatMe depareiCGSSetWindowLevel
noCGPrivate.h
- material não documentado -https://gist.github.com/Noitidart/3664c5c2059c9aa6779f#file-cgsprivate-h-L63 - No entanto, lembro-me de que tentei algo assim no passado, mas receberia um erro ao tentar conectar-me a uma janela que não estava no processo de chamada.
Somente o proprietário de uma janela pode manipulá-la. Portanto, a Apple tem o conceito de um proprietário universal que possui todas as janelas e pode manipular todas elas. Só pode haver um proprietário universal por vez (o Dock).
Talvez, de qualquer maneira, finja que meu processo de chamada seja temporariamente o dock? TalvezCGSGetConnectionIDForPSN
para o dock, em seguida, usar essa conexão?
Meu uso: estou tentando replicar a funcionalidade do meu complemento de navegador de código aberto e gratuito -https://addons.mozilla.org/en-US/firefox/addon/topick/ - então o meu processo de chamada se o Firefox. Ele funciona no Windows e Linux no momento e só precisa descobrir como fazê-lo no mac para janelas que não sejam do Firefox.