开发者

CGWindowID from AXUIElement

I'm trying to automate a foreign OSX application using the accessibility API. Some of the state of the application isn't available through the API, so I acquire it through screen scraping. To do this, I need to get CGWindowID for an accessibility object with a 'Window Role'.

Is there any direct way of acquiring CGWindowID of a 'Window Role' accessibility object? I can get it heuristically, by matching various attributes of the window, such as the size, title and location, but this is really hacky, and I'd fee开发者_如何学Pythonl better if my application would also support the corner cases, even if they are unlikely.


There is a function from at least Leopard and up (and still around as of 10.7.3):

extern "C" AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);

Usual caveats about using something like this apply though. It may change as soon as the next OS update!


There’s no way to do that; the accessibility hierarchy is completely decoupled from the actual window/view hierarchy. I think your matching will work best.


The correct current declaration in a Swift Bridging Header is:

#import <AppKit/AppKit.h>

AXError _AXUIElementGetWindow(AXUIElementRef element, uint32_t *identifier);

As used here: https://github.com/rxhanson/Rectangle/blob/master/Rectangle/Rectangle-Bridging-Header.h

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜