[英]Forcing an LSUIElement “Accessory” application to the front
我有一個LSUIElement
應用程序,該應用程序需要保持其狀態為LSUIElement
(它不能具有停靠圖標),此應用程序是由插件啟動和處理的。
當我更改應用程序使其成為“常規”應用程序(不帶LSUIElement
)時, [NSApp activateIgnoringOtherApps:YES]
可以完美運行。 但是,當我將其LSUIElement
它將顯示該窗口,但該窗口卡在safari(插件正在運行的地方)后面,但位於其他所有東西的后面。 我在叫-[NSWindow makeKeyAndOrderFront:self];
但這沒有任何區別。
需要明確的是,“插件”方面是無關緊要的,因為插件和應用程序是兩個獨立的過程。 該插件將事件(通過馬赫端口)發送到應用程序,該應用程序調用一些代碼以打開窗口並使其聚焦。 問題在於,使代碼成為焦點的代碼僅在不是LSUIElement
應用程序時才有效。
我已經詳盡搜索了一個可以使之工作的現有電話,我願意接受有關如何偽造鼠標單擊的建議,甚至可以運行一些applescript來使之工作,也許還有一種未公開記錄的方法可以做到這一點。
LSUIElement
的Apple文檔狀態為“該應用程序未出現在Dock中並且沒有菜單欄,但可以通過編程方式激活”,但我找不到啟用此功能的魔力。
在整個應用程序都使用Cocoa的情況下,以下方法在將“ LSUIElement”設置為“ 1”的應用程序中對我有用:
ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
(OSStatus)SetFrontProcess(&psn);
}
(這是Carbon API的一部分。)
您需要先激活您的應用程序:
[NSApp activateIgnoringOtherApps:YES];
然后使您的窗口成為關鍵窗口:
[NSWindow makeKeyAndOrderFront:nil];
這在我的項目中有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.