?? accessible.java
字號(hào):
osDescription = new String(buffer); } } AccessibleEvent event = new AccessibleEvent(this); event.childID = osToChildID(varChild_lVal); event.result = osDescription; for (int i = 0; i < accessibleListeners.size(); i++) { AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i); listener.getDescription(event); } if (event.result == null) return code; char[] data = (event.result + "\0").toCharArray(); int ptr = COM.SysAllocString(data); COM.MoveMemory(pszDescription, new int[] { ptr }, 4); return COM.S_OK; } int get_accFocus(int pvarChild) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; /* Get the default focus child from the OS. */ int osChild = ACC.CHILDID_NONE; int code = iaccessible.get_accFocus(pvarChild); if (accessibleControlListeners.size() == 0) return code; if (code == COM.S_OK) { short[] pvt = new short[1]; COM.MoveMemory(pvt, pvarChild, 2); if (pvt[0] == COM.VT_I4) { int[] pChild = new int[1]; COM.MoveMemory(pChild, pvarChild + 8, 4); osChild = osToChildID(pChild[0]); } } AccessibleControlEvent event = new AccessibleControlEvent(this); event.childID = osChild; for (int i = 0; i < accessibleControlListeners.size(); i++) { AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i); listener.getFocus(event); } Accessible accessible = event.accessible; if (accessible != null) { COM.MoveMemory(pvarChild, new short[] { COM.VT_DISPATCH }, 2); COM.MoveMemory(pvarChild + 8, new int[] { accessible.objIAccessible.getAddress() }, 4); return COM.S_OK; } int childID = event.childID; if (childID == ACC.CHILDID_NONE) { COM.MoveMemory(pvarChild, new short[] { COM.VT_EMPTY }, 2); return COM.S_FALSE; } if (childID == ACC.CHILDID_SELF) { COM.MoveMemory(pvarChild, new short[] { COM.VT_DISPATCH }, 2); COM.MoveMemory(pvarChild + 8, new int[] { objIAccessible.getAddress() }, 4); return COM.S_OK; } COM.MoveMemory(pvarChild, new short[] { COM.VT_I4 }, 2); COM.MoveMemory(pvarChild + 8, new int[] { childIDToOs(childID) }, 4); return COM.S_OK; } int get_accHelp(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pszHelp) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG; /* Get the default help string from the OS. */ String osHelp = null; int code = iaccessible.get_accHelp(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pszHelp); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID if (accessibleListeners.size() == 0) return code; if (code == COM.S_OK) { int[] pHelp = new int[1]; COM.MoveMemory(pHelp, pszHelp, 4); int size = COM.SysStringByteLen(pHelp[0]); if (size > 0) { char[] buffer = new char[(size + 1) /2]; COM.MoveMemory(buffer, pHelp[0], size); osHelp = new String(buffer); } } AccessibleEvent event = new AccessibleEvent(this); event.childID = osToChildID(varChild_lVal); event.result = osHelp; for (int i = 0; i < accessibleListeners.size(); i++) { AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i); listener.getHelp(event); } if (event.result == null) return code; char[] data = (event.result + "\0").toCharArray(); int ptr = COM.SysAllocString(data); COM.MoveMemory(pszHelp, new int[] { ptr }, 4); return COM.S_OK; } int get_accHelpTopic(int pszHelpFile, int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pidTopic) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; // Currently, we don't let the application override this. Forward to the proxy. int code = iaccessible.get_accHelpTopic(pszHelpFile, varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pidTopic); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID return code; } int get_accKeyboardShortcut(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pszKeyboardShortcut) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG; /* Get the default keyboard shortcut from the OS. */ String osKeyboardShortcut = null; int code = iaccessible.get_accKeyboardShortcut(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pszKeyboardShortcut); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID if (accessibleListeners.size() == 0) return code; if (code == COM.S_OK) { int[] pKeyboardShortcut = new int[1]; COM.MoveMemory(pKeyboardShortcut, pszKeyboardShortcut, 4); int size = COM.SysStringByteLen(pKeyboardShortcut[0]); if (size > 0) { char[] buffer = new char[(size + 1) /2]; COM.MoveMemory(buffer, pKeyboardShortcut[0], size); osKeyboardShortcut = new String(buffer); } } AccessibleEvent event = new AccessibleEvent(this); event.childID = osToChildID(varChild_lVal); event.result = osKeyboardShortcut; for (int i = 0; i < accessibleListeners.size(); i++) { AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i); listener.getKeyboardShortcut(event); } if (event.result == null) return code; char[] data = (event.result + "\0").toCharArray(); int ptr = COM.SysAllocString(data); COM.MoveMemory(pszKeyboardShortcut, new int[] { ptr }, 4); return COM.S_OK; } int get_accName(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pszName) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG; /* Get the default name from the OS. */ String osName = null; int code = iaccessible.get_accName(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pszName); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID if (accessibleListeners.size() == 0) return code; if (code == COM.S_OK) { int[] pName = new int[1]; COM.MoveMemory(pName, pszName, 4); int size = COM.SysStringByteLen(pName[0]); if (size > 0) { char[] buffer = new char[(size + 1) /2]; COM.MoveMemory(buffer, pName[0], size); osName = new String(buffer); } } AccessibleEvent event = new AccessibleEvent(this); event.childID = osToChildID(varChild_lVal); event.result = osName; for (int i = 0; i < accessibleListeners.size(); i++) { AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i); listener.getName(event); } if (event.result == null) return code; char[] data = (event.result + "\0").toCharArray(); int ptr = COM.SysAllocString(data); COM.MoveMemory(pszName, new int[] { ptr }, 4); return COM.S_OK; } int get_accParent(int ppdispParent) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; // Currently, we don't let the application override this. Forward to the proxy. return iaccessible.get_accParent(ppdispParent); } int get_accRole(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pvarRole) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG; /* Get the default role from the OS. */ int osRole = COM.ROLE_SYSTEM_CLIENT; int code = iaccessible.get_accRole(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pvarRole); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID // TEMPORARY CODE - process tree and table even if there are no apps listening if (accessibleControlListeners.size() == 0 && !(control instanceof Tree || control instanceof Table)) return code; if (code == COM.S_OK) { short[] pvt = new short[1]; COM.MoveMemory(pvt, pvarRole, 2); if (pvt[0] == COM.VT_I4) { int[] pRole = new int[1]; COM.MoveMemory(pRole, pvarRole + 8, 4); osRole = pRole[0]; } } AccessibleControlEvent event = new AccessibleControlEvent(this); event.childID = osToChildID(varChild_lVal); event.detail = osToRole(osRole); // TEMPORARY CODE /* Currently our checkbox table and tree are emulated using state mask * images, so we need to specify 'checkbox' role for the items. */ if (varChild_lVal != COM.CHILDID_SELF) { if (control instanceof Tree || control instanceof Table) { if ((control.getStyle() & SWT.CHECK) != 0) event.detail = ACC.ROLE_CHECKBUTTON; } } for (int i = 0; i < accessibleControlListeners.size(); i++) { AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i); listener.getRole(event); } int role = roleToOs(event.detail); COM.MoveMemory(pvarRole, new short[] { COM.VT_I4 }, 2); COM.MoveMemory(pvarRole + 8, new int[] { role }, 4); return COM.S_OK; } int get_accSelection(int pvarChildren) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; /* Get the default selection from the OS. */ int osChild = ACC.CHILDID_NONE; int code = iaccessible.get_accSelection(pvarChildren); if (accessibleControlListeners.size() == 0) return code; if (code == COM.S_OK) { short[] pvt = new short[1]; COM.MoveMemory(pvt, pvarChildren, 2); if (pvt[0] == COM.VT_I4) { int[] pChild = new int[1]; COM.MoveMemory(pChild, pvarChildren + 8, 4); osChild = osToChildID(pChild[0]); } else if (pvt[0] == COM.VT_UNKNOWN) { osChild = ACC.CHILDID_MULTIPLE; /* Should get IEnumVARIANT from punkVal field... need better API here... */ } } AccessibleControlEvent event = new AccessibleControlEvent(this); event.childID = osChild; for (int i = 0; i < accessibleControlListeners.size(); i++) { AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i); listener.getSelection(event); } Accessible accessible = event.accessible; if (accessible != null) { COM.MoveMemory(pvarChildren, new short[] { COM.VT_DISPATCH }, 2); COM.MoveMemory(pvarChildren + 8, new int[] { accessible.objIAccessible.getAddress() }, 4); return COM.S_OK; } int childID = event.childID; if (childID == ACC.CHILDID_NONE) { COM.MoveMemory(pvarChildren, new short[] { COM.VT_EMPTY }, 2); return COM.S_FALSE; } if (childID == ACC.CHILDID_MULTIPLE) { COM.MoveMemory(pvarChildren, new short[] { COM.VT_UNKNOWN }, 2); /* Should return an IEnumVARIANT for this... so the next line is wrong... need better API here... */ COM.MoveMemory(pvarChildren + 8, new int[] { objIAccessible.getAddress() }, 4); return COM.S_OK; } if (childID == ACC.CHILDID_SELF) { COM.MoveMemory(pvarChildren, new short[] { COM.VT_DISPATCH }, 2); COM.MoveMemory(pvarChildren + 8, new int[] { objIAccessible.getAddress() }, 4); return COM.S_OK; } COM.MoveMemory(pvarChildren, new short[] { COM.VT_I4 }, 2); COM.MoveMemory(pvarChildren + 8, new int[] { childIDToOs(childID) }, 4); return COM.S_OK; } int get_accState(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pvarState) { if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED; if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG; /* Get the default state from the OS. */ int osState = 0; int code = iaccessible.get_accState(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pvarState); if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID // TEMPORARY CODE - process tree and table even if there are no apps listening if (accessibleControlListeners.size() == 0 && !(control instanceof Tree || control instanceof Table)) return code; if (code == COM.S_OK) { short[] pvt = new short[1]; COM.MoveMemory(pvt, pvarState, 2); if (pvt[0] == COM.VT_I4) { int[] pState = new int[1]; COM.MoveMemory(pState, pvarState + 8, 4); osState = pState[0]; } } AccessibleControlEvent event = new AccessibleControlEvent(this); event.childID = osToChildID(varChild_lVal); event.detail = osToState(osState); // TEMPORARY CODE /* Currently our checkbox table and tree are emulated using state mask * images, so we need to determine if the item state is 'checked'. */ if (varChild_lVal != COM.CHILDID_SELF) { if (control instanceof Tree) { int hwnd = control.handle; TVITEM tvItem = new TVITEM (); tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; tvItem.stateMask = OS.TVIS_STATEIMAGEMASK; if (OS.COMCTL32_MAJOR >= 6) { tvItem.hItem = OS.SendMessage (hwnd, OS.TVM_MAPACCIDTOHTREEITEM, varChild_lVal, 0); } else { tvItem.hItem = varChild_lVal; } int result = OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, tvItem); boolean checked = (result != 0) && (((tvItem.state >> 12) & 1) == 0); if (checked) event.detail |= ACC.STATE_CHECKED; } else if (control instanceof Table) { Table table = (Table) control; TableItem item = table.getItem(event.childID); if (item != null) { if (item.getChecked()) event.detail |= ACC.STATE_CHECKED; } } } for (int i = 0; i < accessibleControlListeners.size(); i++) { AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i); listener.getState(event); } int state = stateToOs(event.detail); COM.MoveMemory(pvarState, new short[] { COM.VT_I4 }, 2);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -