我正在尝试使用辅助功能API在OSX中移动其他应用程序。我实际上有这个工作。但我遇到了一个重大问题。
AXUIElementRef appRef = AXUIElementCreateApplication(self.pid);
这使用我的应用程序的PID来稍后移动窗口。我发现多个窗口具有相同的PID,当我尝试移动应用程序的第二个窗口时,我的应用程序崩溃了。
我可以使用WindowID移动我的应用程序吗?
答案 0 :(得分:0)
如果您确实需要,唯一标识特定窗口的方法是浏览CGWindowListCopyWindowInfo
的结果,以选择与您在appRef
处使用的pid匹配的结果;然后kCGWindowNumber
CFNumber是该窗口的Quartz独特的CGWindowID。
然而,听起来你更有可能只是错误地通过窗口索引。这适用于您的appRef
:
CFArrayRef windows;
AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute, (CFTypeRef*)&windows);
int windowCount = windows ? CFArrayGetCount(windows) : 0;
for (int windowIndex = 0; windowIndex < windowCount; windowIndex++)
{
AXUIElementRef windowRef = (AXUIElementRef)CFArrayGetValueAtIndex(windows, windowIndex);
... move windowRef here ...
}
如果这不能解决问题,请发布崩溃的代码以及崩溃的代码。