我試圖修補an application,它使用可訪問性API調整窗口大小。唯一標識OS X上的活動窗口
我需要維護與以前的窗口大小的字典。關鍵需要識別當前活動的窗口。目前,在按下熱鍵時,通過NSAccessibilityFocusedWindowAttribute
檢索該活動窗口。
但是,每次調用此方法時,標識窗口的返回AXUIElementRef
都是不同的!這當然意味着我不能將它用作字典鍵 - 字典不會找到相應的條目。
下面的代碼重新問題:
-(IBAction)testWindowIdentification:(id)sender{
AXUIElementRef focusedApp;
AXUIElementRef focusedWindow;
AXUIElementCopyAttributeValue(_systemWideElement,
(CFStringRef) kAXFocusedApplicationAttribute,
(CFTypeRef*) &focusedApp);
AXUIElementCopyAttributeValue((AXUIElementRef) focusedApp,
(CFStringRef) NSAccessibilityFocusedWindowAttribute,
(CFTypeRef*) &focusedWindow);
CFShow(focusedWindow);
}
_systemWideElement
已經在init
方法使用呼叫被初始化爲AXUIElementCreateSystemWide()
。
的CFShow
聲明清楚地顯示不同的ID每一個方法被調用時(即使在同一窗口被激活),這是無用的我:
<AXUIElement 0x47e850> {pid=42463}
<AXUIElement 0x47e890> {pid=42463}
<AXUIElement 0x47e2c0> {pid=42463}
…
的documentation on AXUIElement
顯示沒有方法來檢索獨特的屬性爲UI元素,並且that of the NSAccessibility
protocol也沒有。 對於我來說,唯一的PID是而不是,因爲一個進程可以有多個窗口。
如何檢索可可中活動窗口的一些唯一標識符?
(順便說一下,真正的代碼是檢查在上面的調用返回代碼;沒有錯誤,則調用成功。)
@JeremyBanks最初的回答者在這裏有正確的想法。如果[這個答案](http://stackoverflow.com/a/312099/517815)被認爲是可信的,那麼確定焦點窗口後,確實可以使用Quartz來獲取'CGWindowID'。這個_應該給你唯一的窗口標識符,你可以在當前應用程序的上下文中逍遙法外。請讓我知道你是否希望將這個更完整的版本作爲實際答案。 – MrGomez
@MrGomez當然,這樣的答案會很棒。 :) –
@JeremyBanks會做。今天我有點超負荷,但我會盡量在今晚晚些時候(PST)得到答案。 :) – MrGomez