我正在研究一個將第三方應用程序的窗口在屏幕上移動的應用程序。通過OSX可訪問性獲取窗口號API
爲了得到當前打開的所有窗口的概述,我用
CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
這將返回字典定義每一個打開的窗口的數組。 下面是一個典型的字典返回:
{
kCGWindowAlpha = 1;
kCGWindowBounds = {
Height = 442;
Width = 475;
X = 3123;
Y = "-118";
};
kCGWindowIsOnscreen = 1;
kCGWindowLayer = 0;
kCGWindowMemoryUsage = 907184;
kCGWindowName = Untitled;
kCGWindowNumber = 7328;
kCGWindowOwnerName = TextEdit;
kCGWindowOwnerPID = 20706;
kCGWindowSharingState = 1;
kCGWindowStoreType = 2;
kCGWindowWorkspace = 3;
},
的詞典已滿的其他地方使用良好的信息,但缺乏可用於修改Windows的位置可訪問的對象。窗口號碼清楚地標識了Windows。
我現在用的PID(kCGWindowOwnerPID)創建窗口的應用程序可訪問對象:
AXUIElementRef app = AXUIElementCreateApplication(pid);
隨後檢索應用程序使用AXUIElementCopyAttributeValues打開的所有窗口的列表:
NSArray *result;
AXUIElementCopyAttributeValues(
(AXUIElementRef) app,
kAXWindowsAttribute,
0,
99999,
(CFArrayRef *) &result
);
這可以工作並返回一個AXUIElements數組。 這是我卡住的地方。似乎沒有API調用來檢索輔助功能對象的窗口號。有什麼辦法要麼
a)求的輔助功能對象的窗口編號(最終迭代這個數組,並找到合適的窗口)
或
b)否則清楚地匹配所描述的一個窗口由CGWindowListCopyWindowInfo返回給由AXUIElementCopyAttributeValues返回的輔助功能對象的數組?
對於那些可以使用無證API的應用程序,它將如何完成? – Samuel 2012-08-23 05:01:55