⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessible.java

📁 源码为Eclipse开源开发平台桌面开发工具SWT的源代码,
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -