Hi Mark, Matt already replied but I thought I would give more info. On Oct 23, 2010, at 10:04 PM, Mark Rada wrote:
Hi,
I've been trying to play with using the Accessibility API to do some automated testing.
From what I have researched, I have to use some C functions that often need a reference passed to the them.
I am at a loss when trying to deal with Pointer objects. I've tried playing with them and googling it, but I just cannot figure out how to turn a pointer into a more useful type or to get what I want out of them.
For example, I can start like this:
framework 'Cocoa'
unless AXAPIEnabled() # only works if I include the parenthesis puts 'Please enable Access for Assistive Devices first' exit 2 end
That's expected, in Ruby methods starting with a capital letter must be called with explicit parentheses, otherwise they are interpreted as constants.
mail = NSRunningApplication.runningApplicationsWithBundleIdentifier('com.apple.Mail').first mail_object = AXUIElementCreateApplication mail.processIdentifier
names = Pointer.new :object
AXUIElementCopyAttributeNames mail_object, names
But then how do I get the values out of the names pointer? For reference, I found the functions in AXUIElement.h.
It looks like AXUIElementCopyAttributeNames returns a CFArray by reference. So your pointer object is properly created, to retrieve the array after the call you just use array = names[0] Then, it should behave like a normal Ruby array. Laurent