我想從外部應用程序(例如textedit)將某個窗口設置爲最前面。使用可訪問性API設置最前面的窗口
我可以使用GetFrontProcess成功獲取應用程序本身的引用,並檢查它是否最前面。如果不是,我可以使用setFrontProcess使其集中。
然後我可以使用可訪問性API來檢查該應用程序下的所有窗口。我檢查某個窗口存在,如果是這樣我的應用程序的最窗口比較它與前:
//get the front window of textEditApp and store it in 'currentFrontWindow'
AXUIElementCopyAttributeValue(textEditApp, kAXFocusedWindowAttribute, (CFTypeRef *)¤tFrontWindow);
如果我感興趣的窗口是不是最前面,我需要設置如此。我認爲我可以使用AXUIElement 設置 AttributeValue來做到這一點,但我沒有得到任何成功。以下是我試圖做到這一點的方式。
//set the front window of textEditApp to be desiredFrontWindow
AXUIElementSetAttributeValue(textEditApp, kAXFocusedUIElementAttribute, desiredFrontWindow);
我已經檢查了窗口存在,並且應用程序「切換到」成功。但爲什麼這行代碼不會將指定的窗口帶到前面?
謝謝。
感謝(再次)彼得 - 這個工作的魅力。 至於應用程序,我一直在使用setFrontProcess而不是kAXFrontMostAttribute - 這是一個壞主意嗎? 在瀏覽應用程序和窗口的過程中,我有興趣將某些AXUIElementRef放在前面(即賦予其鍵盤焦點)。我可以通過層層元素來獲取對它的引用,但是我如何將它設置爲重點?是否有相當於元素的kAXMainAttribute?也許我應該發佈(還)另一個Q. – 2010-01-22 10:17:40