Platforms to show: All Mac Windows Linux Cross-Platform
/MacOSX/Accessibility services/Observer Test
Required plugins for this example: MBS Util Plugin, MBS MacCF Plugin, MBS Main Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacOSX/Accessibility services/Observer Test
This example is the version from Thu, 6th Feb 2013.
Project "Observer Test.xojo_binary_project"
Class mainWindow Inherits Window
Control List Inherits ListBox
ControlInstance List Inherits ListBox
End Control
EventHandler Sub Open()
if AccessibilityMBS.Available then
if AccessibilityMBS.AXAPIEnabled then
List.InsertRow 0,"Listing..."
else
List.InsertRow 0,"Accessibility API is not enabled."
end if
ce=new MyCarbonEvents
ce.Listen
else
MsgBox "This test requires Mac OS X 10.2"
end if
End EventHandler
Sub Switched(processSerial as memoryBlock)
// Application switched
dim p as ProcessMBS
dim e as AXUIElementMBS
dim v as AXValueMBS
dim f as AXUIElementMBS
dim pid,error,err as integer
dim i,c as integer
p=new ProcessMBS
p.GetProcess(processSerial)
pid=p.processID
e=AccessibilityMBS.SystemWideAXUIElement
if e<>nil then
v=e.AttributeValue(AccessibilityMBS.kAXFocusedApplicationAttribute)
if v<>Nil and v.Type=AccessibilityMBS.kAXUIElementMBSTypeID then
o=new MyObserver
error=o.Create(pid)
f=new AXUIElementMBS
f.Handle=v.Handle // just clone for the one line:
err=o.AddNotification(f,AccessibilityMBS.kAXApplicationDeactivatedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXApplicationActivatedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXApplicationHiddenNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXApplicationShownNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXWindowCreatedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXWindowDeminiaturizedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXWindowMiniaturizedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXWindowMovedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXWindowResizedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXFocusedUIElementChangedNotification)
err=o.AddNotification(f,AccessibilityMBS.kAXFocusedWindowChangedNotification)
List.InsertRow 0,"Observing application """+p.Name+"""."
end if
end if
End Sub
Property Protected apps(0) As integer
Property Protected ce As mycarbonEvents
Property Protected o As myObserver
End Class
MenuBar Menu
MenuItem UntitledMenu3 = ""
MenuItem UntitledMenu2 = "File"
MenuItem FileQuit = "Quit"
MenuItem UntitledMenu0 = "Edit"
MenuItem EditUndo = "Undo"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Cut"
MenuItem EditCopy = "Copy"
MenuItem EditPaste = "Paste"
MenuItem EditClear = "Clear"
End MenuBar
Class MyObserver Inherits AXObserverMBS
EventHandler Sub Action(element as AXUIElementMBS, notification as CFStringMBS)
dim a2 as AXValueMBS
dim s as String
dim c as CFStringMBS
a2=element.AttributeValue(AccessibilityMBS.kAXTitleAttribute)
if a2<>nil and a2.Type=kCFStringMBSTypeID then
c=a2.CFStringMBS
if c<>nil then
s=c.str
end if
end if
if notification=nil then
mainWindow.List.InsertRow 0,"? ("+s+")"
else
mainWindow.List.InsertRow 0,notification.str+" ("+s+")"
end if
Exception
End EventHandler
End Class
Class MyCarbonEvents Inherits CarbonApplicationEventsMBS
EventHandler Sub ApplicationSwitched(ProcessSerial as memoryblock)
mainWindow.switched ProcessSerial
End EventHandler
End Class
Class App Inherits Application
End Class
Module CFUtil
Function CFStringMBS(extends o as CFObjectMBS) As CFStringMBS
dim s as CFStringMBS
if o<>nil then
if o.Handle<>0 then
s=new CFStringMBS
s.Handle=o.Handle
s.RetainObject
Return s
end if
end if
End Function
End Module
End Project
See also:
The items on this page are in the following plugins: MBS MacOSX Plugin.