簡體   English   中英

將LSUIElement“附件”應用程序強制置於最前面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM