[jawsscripts] Re: how to use MSAA

Can you explain a little what the getObjectFromEvent function is doing?

Thanks,

Jon

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx 
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Jamal Mazrui
Sent: Friday, October 10, 2008 1:59 PM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Re: how to use MSAA

Below are MSAA related functions and scripts I pulled from a couple projects.  
Not sure, but I think the Nav* functions are intended for Java, though as I 
recall, the FSDN documentation does not make that clear.

There are various ways of getting a starting MSAA object, as you know.
You can then get the number of its children with the AccChildCount property, 
e.g., oParent.AccChildCount.  a child item is the default property, so you can 
get children by looping from oParent(1) to oParent(iCount).  If the children 
are "accessible objects" rather than "simple children," you may be able to use 
the same logic to examine their children -- not sure though.

I hope this helps you get further.  Let us know.

Jamal


Include "msaa.jsh"

Int Function MSAAGetChildCount(Handle h) ;Get the number of MSAA children in 
the client area of a window Var Int i, Object o, Object oNull, String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let i = o.AccChildCount 
Let o = oNull Return i EndFunction

String Function MSAAGetDefaultAction(Handle h) ;Get the MSAA default action Var 
Int i, Object o, Object oNull, String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = 
o.AccDefaultAction(0) Let o = oNull Return s EndFunction

String Function MSAAGetDescription(Handle h) ; Get the MSAA description Var Int 
i, Object o, Object oNull, String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = 
o.AccDescription(0) Let o = oNull Return s EndFunction

Int Function MSAAGetFocus(Handle h)
; Get the MSAA Focus of a subitem
Var
Int i, Int iReturn,
Object o, Object oNull

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let iReturn = 
o.AccFocus(0)

Let o = oNull
Return iReturn
EndFunction

String Function MSAAGetHelp(Handle h)
;Get MSAA help text
Var
Int i,
Object o, Object oNull,
String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = o.AccHelp(0) Let 
o = oNull Return s EndFunction

String Function MSAAGetInfo(Handle h)
;Get string of various MSAA information
Var
Int i, Int iCount, Int iFocus, Int iChildren, Object o, Object oNull, String 
sReturn, String sRole, String sName, String sValue, String sState, String 
sHelp, String sDescription, String sKeyboardShortcut, String sDefaultAction

Let h = GetFocus()
Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let iCount = 
o.AccChildCount(0) Let i = 0 While i <= iCount Let sRole = 
GetRoleText(o.AccRole(i)) If !StringIsBlank(sRole) Then Let sReturn = sReturn + 
"Role=" + sRole + "\n" EndIf Let sName = o.AccName(i) If !StringIsBlank(sName) 
Then Let sReturn = sReturn + "Name=" + sName + "\n" EndIf Let sValue = 
o.AccValue(i) If !StringIsBlank(sValue) Then Let sReturn = sReturn + "Value=" + 
sValue + "\n" EndIf Let iFocus = o.AccFocus(i) If iFocus Then Let sReturn = 
sReturn + "Focus=" + IntToString(iFocus) + "\n" EndIf Let sState = 
MSAAGetStateText(o.AccState(i)) If !StringIsBlank(sState) Then Let sReturn = 
sReturn + "State=" + sState + "\n" EndIf Let sHelp = o.AccHelp(i) If 
!StringIsBlank(sHelp) Then Let sReturn = sReturn + "Help=" + sHelp + "\n" EndIf 
Let sDescription = o.AccDescription(i) If !StringIsBlank(sDescription) Then Let 
sReturn = sReturn + "Description=" + sDescription + "\n" EndIf Let 
sKeyboardShortcut = o.AccKeyboardShortcut(i) If 
!StringIsBlank(sKeyboardShortcut) Then Let sReturn = sReturn + 
"KeyboardShortcut=" + sKeyboardShortcut + "\n" EndIf Let sDefaultAction = 
o.AccDefaultAction(i) If !StringIsBlank(sDefaultAction) Then Let sReturn = 
sReturn + "DefaultAction=" + sDefaultAction + "\n" EndIf Let iChildren = 
o.AccChildCount(i) If iChildren Then Let sReturn = sReturn + "Children=" +
IntToString(iChildren) + "\n" EndIf
Let i = i + 1
EndWhile
Let o = oNull
Return sReturn
EndFunction

String Function MSAAGetKeyboardShortcut(Handle h) ;Get MSAA keyboard shortcut 
Var Int i, Object o, Object oNull, String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = 
o.AccKeyboardShortcut(0) Let o = oNull Return s EndFunction

String Function MSAAGetName(Handle h)
;Get MSAA name
Var
Int i,
Object o, Object oNull,
String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = o.AccName(0) Let 
o = oNull Return s EndFunction

Int Function MSAAGetRole(Handle h)
; Get MSAA numeric role
Var
Int i, Int iReturn,
Object o, Object oNull

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let iReturn = 
o.AccRole(0)

Let o = oNull
Return iReturn
EndFunction

String Function MSAAGetRoleString(Handle h) ;Get text of MSAA numeric role 
Return GetRoleText(MSAAGetRole(h)) EndFunction

Int Function MSAAGetState(Handle h)
;Get MSAA numeric state
Var
Int i,
Object o, Object oNull,
String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let i = o.AccState(0) 
Let o = oNull Return i EndFunction

String Function MSAAGetStateString(Handle h) ;Get MSAA state text Return 
GetStateText(MSAAGetState(h)) EndFunction

String Function MSAAGetStateText(Int iBits) ;Get composite text of MSAA states

Var
string sReturn

If iBits & msaa_state_unavailable then
let sReturn = sReturn + "unavailable "
endIf
If iBits & msaa_state_selected then
let sReturn = sReturn + "selected "
endIf
If iBits & msaa_state_focused then
let sReturn = sReturn + "focused "
endIf
If iBits & msaa_state_pressed then
let sReturn = sReturn + "pressed "
endIf
If iBits & msaa_state_checked then
let sReturn = sReturn + "checked "
endIf
If iBits & msaa_state_mixed then
let sReturn = sReturn + "mixed "
endIf
If iBits & msaa_state_readonly then
let sReturn = sReturn + "readonly "
endIf
If iBits & msaa_state_hottracked then
let sReturn = sReturn + "hottracked "
endIf
If iBits & msaa_state_default then
let sReturn = sReturn + "default "
endIf
If iBits & msaa_state_expanded then
let sReturn = sReturn + "expanded "
endIf
If iBits & msaa_state_collapsed then
let sReturn = sReturn + "collapsed "
endIf
If iBits & msaa_state_busy then
let sReturn = sReturn + "busy "
endIf
If iBits & msaa_state_floating then
let sReturn = sReturn + "floating "
endIf
If iBits & msaa_state_marqueed then
let sReturn = sReturn + "marqueed "
endIf
If iBits & msaa_state_animated then
let sReturn = sReturn + "animated "
endIf
If iBits & msaa_state_invisible then
let sReturn = sReturn + "invisible "
endIf
If iBits & msaa_state_offscreen then
let sReturn = sReturn + "offscreen "
endIf
If iBits & msaa_state_sizeable then
let sReturn = sReturn + "sizeable "
endIf
If iBits & msaa_state_moveable then
let sReturn = sReturn + "moveable "
endIf
If iBits & msaa_state_selfvoicing then
let sReturn = sReturn + "selfvoicing "
endIf
If iBits & msaa_state_focusable then
let sReturn = sReturn + "focusable "
endIf
If iBits & msaa_state_selectable then
let sReturn = sReturn + "selectable "
endIf
If iBits & msaa_state_linked then
let sReturn = sReturn + "linked "
endIf
If iBits & msaa_state_traversed then
let sReturn = sReturn + "traversed "
endIf
If iBits & msaa_state_multiselectable then let sReturn = sReturn + 
"multiselectable "
endIf
If iBits & msaa_state_extselectable then let sReturn = sReturn + "extselectable 
"
endIf
If iBits & msaa_state_alert_low then
let sReturn = sReturn + "alert_low "
endIf
If iBits & msaa_state_alert_medium then
let sReturn = sReturn + "alert_medium "
endIf
If iBits & msaa_state_alert_high then
let sReturn = sReturn + "alert_high "
endIf
If iBits & msaa_state_protected then
let sReturn = sReturn + "protected "
endIf
If iBits & msaa_state_valid then
let sReturn = sReturn + "valid "
endIf
Let sReturn = StringTrimTrailingBlanks(sReturn) Return sReturn EndFunction

String Function MSAAGetValue(Handle h)
;Get MSAA value
Var
Int i,
Object o, Object oNull,
String s

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, 1, i) Let s = o.AccValue(0) 
Let o = oNull Return s EndFunction

Int Function MSAASetSelection(Handle h, Int iState) ;Select subitems using MSAA 
Var Int i, Int iCol, Int iRow, Int iReturn, Object oNull, Object o, String 
sReturn

If !h Then
Let h = GetFocus()
EndIf

Let o = GetObjectFromEvent(h, msaa_OBJID_CLIENT, iState, i) o.AccSelect(iState, 
i)

Let o= oNull
Return iReturn
EndFunction

Script MSAAInfo()
Var
Int i, Int iCount,
Handle h,
Object o, Object oNull,
String sText, String sRole, String sName, String sValue, String sState, String 
sHelp, String sDescription, String sKeyboardShortcut, String sDefaultAction

SayString("MSAA info")
Let h = GetFocus()
Let o = GetObjectAtPoint(i, GetCursorCol(), GetCursorRow()) Let sRole = 
GetAccRole(h) Let sRole = GetRoleText(o.AccRole) If !StringIsBlank(sRole) Then 
Let sText = sText + "Role=" + sRole + "\n"
EndIf
Let sName = GetAccName(h)
Let sName = o.AccName
If !StringIsBlank(sName) Then Let sText = sText + "Name=" + sName + "\n"
EndIf
Let sValue = GetAccValue(h)
Let sValue = o.AccValue
If !StringIsBlank(sValue) Then Let sText = sText + "Value=" + sValue + "\n" 
EndIf Let sState = GetStateText(GetAccState(h)) Let sState = 
GetStateText(o.AccState) If !StringIsBlank(sState) Then Let sText = sText + 
"State=" + sState + "\n" EndIf Let sHelp = GetAccHelp(h) Let sHelp = o.AccHelp 
If !StringIsBlank(sHelp) Then Let sText = sText + "Help=" + sHelp + "\n"
EndIf
Let sDescription = GetAccDescription(h)
Let sDescription = o.AccDescription
If !StringIsBlank(sDescription) Then Let sText = sText + "Description=" + 
sDescription + "\n" EndIf Let sKeyboardShortcut = GetAccKeyboardShortcut(h) Let 
sKeyboardShortcut = o.AccKeyboardShortcut If !StringIsBlank(sKeyboardShortcut) 
Then Let sText = sText + "Hotkey=" + sKeyboardShortcut + "\n" EndIf Let 
sDefaultAction = GetAccDefaultAction(h) Let sDefaultAction = o.AccDefaultAction 
If !StringIsBlank(sDefaultAction) Then Let sText = sText + "DefaultAction=" + 
sDefaultAction + "\n" EndIf Let iCount = GetAccChildCount(h) Let iCount = 
o.AccChildCount If iCount Then Let sText = sText + "Children=" + 
IntToString(iCount) + "\n" EndIf Let sText = sText + "\n"
Let i = 1
While i <= iCount
Let sRole = GetRoleText(o.AccRole(i))
If !StringIsBlank(sRole) Then Let sText = sText + "Role=" + sRole + "\n"
EndIf
Let sName = o.AccName(i)
If !StringIsBlank(sName) Then Let sText = sText + "Name=" + sName + "\n"
EndIf
Let sValue = o.AccValue(1)
If !StringIsBlank(sValue) Then Let sText = sText + "Value=" + sValue + "\n" 
EndIf Let sState = GetStateText(o.AccState(i)) If !StringIsBlank(sState) Then 
Let sText = sText + "State=" + sState + "\n" EndIf Let sHelp = o.AccHelp(i) If 
!StringIsBlank(sHelp) Then Let sText = sText + "Help=" + sHelp + "\n"
EndIf
Let sDescription = o.AccDescription(i)
If !StringIsBlank(sDescription) Then Let sText = sText + "Description=" + 
sDescription + "\n" EndIf Let sKeyboardShortcut = o.AccKeyboardShortcut(i) If 
!StringIsBlank(sKeyboardShortcut) Then Let sText = sText + "Hotkey=" + 
sKeyboardShortcut + "\n" EndIf Let sDefaultAction = o.AccDefaultAction(i) If 
!StringIsBlank(sDefaultAction) Then Let sText = sText + "DefaultAction=" + 
sDefaultAction + "\n" EndIf Let sText = sText + "\n"
Let i = i + 1
EndWhile
Let o = oNull
SayVirtual(sText)
EndScript

Script MSAAJump()
Var
Int i, Int iCount,
Handle h,
Object o, Object oNull, Object oParent,
String sText, String sRole, String sName, String sValue, String sState, String 
sHelp, String sDescription, String sKeyboardShortcut, String sDefaultAction

Let h = GetFocus()
Let o = GetObjectAtPoint(i, GetCursorCol(), GetCursorRow()) Let iCount = 
o.AccChildCount If !iCount Then Let oParent = o.AccParent Let iCount = 
oParent.AccChildCount Let o = oParent EndIf If !iCount Then SayString("No 
options!") Else If !InputBox("Text:", "MSAA Jump", sMSAAJump) Then
SayString("Cancel")
Else
Let i = 1
While i <= iCount
Let sName = o.AccName(i)
If StringContains(StringLower(sName), StringLower(sMSAAJump)) Then 
o.AccSelect(1, i) Let i = iCount + 2 Else Let i = i + 1 EndIf EndWhile If i == 
iCount + 1 Then SayString("Not found!") PerformScript SayLine() EndIf EndIf 
EndIf Let o = oNull EndScript

Int Function MSAAPick()
Var
Int i, Int iCount, Int iDefault, Int iLength, Int iReturn, Handle h, Object o, 
Object oChild, Object oNull, Object oParent, String sText, String sRole, String 
sName, String sValue, String sState, String sHelp, String sDescription, String 
sKeyboardShortcut, String sDefaultAction

SayString("MSAA pick")
Let h = GetFocus()
Let o = GetObjectAtPoint(i, GetCursorCol(), GetCursorRow()) Let iCount = 
o.AccChildCount If !iCount Then Let oParent = o.AccParent Let iCount = 
oParent.AccChildCount Let o = oParent EndIf If !iCount Then SayString("No 
options!") Else Let iLength = StringLength(sMSAAPick) Let i = 1 While i <= 
iCount Let sName = o.AccName(i) If !iDefault && StringLength(sName) == iLength 
&& sName == sMSAAPick Then Let iDefault = i EndIf Let sText = sText + "|" + 
sName Let i = i + 1 EndWhile Let sText = StringChopLeft(sText, 1) ;Let iDefault 
= Max(1, StringSegmentIndex(sText, "|", sMSAAPick, VS_True)) Let iDefault = 
Max(1, iDefault) Let i = dlgSelectItemInList(sText, "Options", VS_False, 
iDefault) If !i Then
SayString("Cancel")
Else
o.AccDoDefaultAction(i)
Let sMSAAPick = StringSegment(sText, "|", i) Let iReturn = VS_True EndIf EndIf 
Let o = oNull Return iReturn EndFunction


__________?
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts



__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts

Other related posts: