Active Accessibility
来源:互联网 发布:手机淘宝如何快速抢购 编辑:程序博客网 时间:2024/05/21 21:12
CString strRole;
GetRoleText(ROLE_SYSTEM_TEXT, strRole.GetBuffer(256), 256);
strRole.ReleaseBuffer();
// TODO: Add your control notification handler code here
CString strWndValue;
GetDlgItemText(IDC_EDIT_HWND, strWndValue);
HWND hWnd = (HWND)ssTtoi(strWndValue);
if(!::IsWindow(hWnd))
{
AfxMessageBox(TEXT("IsWindow return false"));
return;
}
CComPtr<IAccessible> spMainWnd;
if(AccessibleObjectFromWindow(hWnd, OBJID_WINDOW, IID_IAccessible, (void**)&spMainWnd) != S_OK)
{
return;
}
FILE *pFile = _tfopen(TEXT("d://active accessiblity aly.txt"), TEXT("w+"));
EnumChild(spMainWnd, EnumChildCB, (LPVOID)pFile);
fclose(pFile);
////////////////////////
#include <OleAcc.h>
#pragma comment( lib, "Oleacc.lib")
#define STATE_IS_SET(a, s) ( ((a)&(s)) == (s) )
void GetRoleString(UINT uRole, CString &strRole)
{
strRole.Empty();
if(STATE_IS_SET(uRole, ROLE_SYSTEM_TITLEBAR))
{
strRole += TEXT("ROLE_SYSTEM_TITLEBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_MENUBAR))
{
strRole += TEXT(",ROLE_SYSTEM_MENUBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SCROLLBAR))
{
strRole += TEXT(",ROLE_SYSTEM_SCROLLBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_GRIP))
{
strRole += TEXT(",ROLE_SYSTEM_GRIP");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SOUND))
{
strRole += TEXT(",ROLE_SYSTEM_SOUND");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CURSOR))
{
strRole += TEXT(",ROLE_SYSTEM_CURSOR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CARET))
{
strRole += TEXT(",ROLE_SYSTEM_CARET");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_ALERT))
{
strRole += TEXT(",ROLE_SYSTEM_ALERT");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_WINDOW))
{
strRole += TEXT(",ROLE_SYSTEM_WINDOW");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CLIENT))
{
strRole += TEXT(",ROLE_SYSTEM_CLIENT");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_MENUPOPUP))
{
strRole += TEXT(",ROLE_SYSTEM_MENUPOPUP");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_MENUITEM))
{
strRole += TEXT(",ROLE_SYSTEM_MENUITEM");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_TOOLTIP))
{
strRole += TEXT(",ROLE_SYSTEM_TOOLTIP");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_APPLICATION))
{
strRole += TEXT(",ROLE_SYSTEM_APPLICATION");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_DOCUMENT))
{
strRole += TEXT(",ROLE_SYSTEM_DOCUMENT");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PANE))
{
strRole += TEXT(",ROLE_SYSTEM_PANE");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CHART))
{
strRole += TEXT(",ROLE_SYSTEM_CHART");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_DIALOG))
{
strRole += TEXT(",ROLE_SYSTEM_DIALOG");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_BORDER))
{
strRole += TEXT(",ROLE_SYSTEM_BORDER");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_GROUPING))
{
strRole += TEXT(",ROLE_SYSTEM_GROUPING");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SEPARATOR))
{
strRole += TEXT(",ROLE_SYSTEM_SEPARATOR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_TOOLBAR))
{
strRole += TEXT(",ROLE_SYSTEM_TOOLBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_STATUSBAR))
{
strRole += TEXT(",ROLE_SYSTEM_STATUSBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_TABLE))
{
strRole += TEXT(",ROLE_SYSTEM_TABLE");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_COLUMNHEADER))
{
strRole += TEXT(",ROLE_SYSTEM_COLUMNHEADER");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_ROWHEADER))
{
strRole += TEXT(",ROLE_SYSTEM_ROWHEADER");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_COLUMN))
{
strRole += TEXT(",ROLE_SYSTEM_COLUMN");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_ROW))
{
strRole += TEXT(",ROLE_SYSTEM_ROW");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CELL))
{
strRole += TEXT(",ROLE_SYSTEM_CELL");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_LINK))
{
strRole += TEXT(",ROLE_SYSTEM_LINK");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_HELPBALLOON))
{
strRole += TEXT(",ROLE_SYSTEM_HELPBALLOON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CHARACTER))
{
strRole += TEXT(",ROLE_SYSTEM_CHARACTER");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_LIST))
{
strRole += TEXT(",ROLE_SYSTEM_LIST");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_LISTITEM))
{
strRole += TEXT(",ROLE_SYSTEM_LISTITEM");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_OUTLINE))
{
strRole += TEXT(",ROLE_SYSTEM_OUTLINE");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_OUTLINEITEM))
{
strRole += TEXT(",ROLE_SYSTEM_OUTLINEITEM");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PAGETAB))
{
strRole += TEXT(",ROLE_SYSTEM_PAGETAB");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PROPERTYPAGE))
{
strRole += TEXT(",ROLE_SYSTEM_PROPERTYPAGE");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_INDICATOR))
{
strRole += TEXT(",ROLE_SYSTEM_INDICATOR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_GRAPHIC))
{
strRole += TEXT(",ROLE_SYSTEM_GRAPHIC");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_STATICTEXT))
{
strRole += TEXT(",ROLE_SYSTEM_STATICTEXT");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_TEXT))
{
strRole += TEXT(",ROLE_SYSTEM_TEXT");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PUSHBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_PUSHBUTTON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CHECKBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_CHECKBUTTON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_RADIOBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_RADIOBUTTON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_COMBOBOX))
{
strRole += TEXT(",ROLE_SYSTEM_COMBOBOX");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_DROPLIST))
{
strRole += TEXT(",ROLE_SYSTEM_DROPLIST");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PROGRESSBAR))
{
strRole += TEXT(",ROLE_SYSTEM_PROGRESSBAR");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_DIAL))
{
strRole += TEXT(",ROLE_SYSTEM_DIAL");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_HOTKEYFIELD))
{
strRole += TEXT(",ROLE_SYSTEM_HOTKEYFIELD");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SLIDER))
{
strRole += TEXT(",ROLE_SYSTEM_SLIDER");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SPINBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_SPINBUTTON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_DIAGRAM))
{
strRole += TEXT(",ROLE_SYSTEM_DIAGRAM");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_ANIMATION))
{
strRole += TEXT(",ROLE_SYSTEM_ANIMATION");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_EQUATION))
{
strRole += TEXT(",ROLE_SYSTEM_EQUATION");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_BUTTONDROPDOWN))
{
strRole += TEXT(",ROLE_SYSTEM_BUTTONDROPDOWN");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_BUTTONMENU))
{
strRole += TEXT(",ROLE_SYSTEM_BUTTONMENU");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_BUTTONDROPDOWNGRID))
{
strRole += TEXT(",ROLE_SYSTEM_BUTTONDROPDOWNGRID");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_WHITESPACE))
{
strRole += TEXT(",ROLE_SYSTEM_WHITESPACE");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_PAGETABLIST))
{
strRole += TEXT(",ROLE_SYSTEM_PAGETABLIST");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_CLOCK))
{
strRole += TEXT(",ROLE_SYSTEM_CLOCK");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_SPLITBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_SPLITBUTTON");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_IPADDRESS))
{
strRole += TEXT(",ROLE_SYSTEM_IPADDRESS");
}
if(STATE_IS_SET(uRole, ROLE_SYSTEM_OUTLINEBUTTON))
{
strRole += TEXT(",ROLE_SYSTEM_OUTLINEBUTTON");
}
}
void GetStateString(UINT uState, CString &strState)
{
strState.Empty();
if(STATE_IS_SET(uState, STATE_SYSTEM_ALERT_HIGH))
{
strState += TEXT("STATE_SYSTEM_ALERT_HIGH");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_ALERT_MEDIUM))
{
strState += TEXT(",STATE_SYSTEM_ALERT_MEDIUM");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_ALERT_LOW))
{
strState += TEXT(",STATE_SYSTEM_ALERT_LOW");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_ANIMATED))
{
strState += TEXT(",STATE_SYSTEM_ANIMATED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_BUSY))
{
strState += TEXT(",STATE_SYSTEM_BUSY");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_CHECKED))
{
strState += TEXT(",STATE_SYSTEM_CHECKED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_COLLAPSED))
{
strState += TEXT(",STATE_SYSTEM_COLLAPSED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_DEFAULT))
{
strState += TEXT(",STATE_SYSTEM_DEFAULT");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_EXPANDED))
{
strState += TEXT(",STATE_SYSTEM_EXPANDED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_EXTSELECTABLE))
{
strState += TEXT(",STATE_SYSTEM_EXTSELECTABLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_FLOATING))
{
strState += TEXT(",STATE_SYSTEM_FLOATING");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_FOCUSABLE))
{
strState += TEXT(",STATE_SYSTEM_FOCUSABLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_FOCUSED))
{
strState += TEXT(",STATE_SYSTEM_FOCUSED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_HASPOPUP))
{
strState += TEXT(",STATE_SYSTEM_HASPOPUP");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_HOTTRACKED))
{
strState += TEXT(",STATE_SYSTEM_HOTTRACKED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_INVISIBLE))
{
strState += TEXT(",STATE_SYSTEM_INVISIBLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_LINKED))
{
strState += TEXT(",STATE_SYSTEM_LINKED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_MARQUEED))
{
strState += TEXT(",STATE_SYSTEM_MARQUEED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_MIXED))
{
strState += TEXT(",STATE_SYSTEM_MIXED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_MOVEABLE))
{
strState += TEXT(",STATE_SYSTEM_MOVEABLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_MULTISELECTABLE))
{
strState += TEXT(",STATE_SYSTEM_MULTISELECTABLE");
}
/*
if(STATE_IS_SET(uState, STATE_SYSTEM_NORMAL))
{
strState += TEXT(",STATE_SYSTEM_NORMAL");
}
*/
if(STATE_IS_SET(uState, STATE_SYSTEM_OFFSCREEN))
{
strState += TEXT(",STATE_SYSTEM_OFFSCREEN");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_PRESSED))
{
strState += TEXT(",STATE_SYSTEM_PRESSED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_PROTECTED))
{
strState += TEXT(",STATE_SYSTEM_PROTECTED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_READONLY))
{
strState += TEXT(",STATE_SYSTEM_READONLY");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_SELECTABLE))
{
strState += TEXT(",STATE_SYSTEM_SELECTABLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_SELECTED))
{
strState += TEXT(",STATE_SYSTEM_SELECTED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_SELFVOICING))
{
strState += TEXT(",STATE_SYSTEM_SELFVOICING");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_SIZEABLE))
{
strState += TEXT(",STATE_SYSTEM_SIZEABLE");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_TRAVERSED))
{
strState += TEXT(",STATE_SYSTEM_TRAVERSED");
}
if(STATE_IS_SET(uState, STATE_SYSTEM_UNAVAILABLE))
{
strState += TEXT(",STATE_SYSTEM_UNAVAILABLE");
}
}
enum EnumChildCBType{ ECT_ChildDown, ECT_ChildUp, ECT_Self};
typedef BOOL (CALLBACK *PEnumChildCB)(EnumChildCBType type, IAccessible *pAccessible, VARIANT varChild, UINT uRole, UINT uState, LPCTSTR lpClass
, LPCTSTR lpValue, LPCTSTR lpName, LPVOID lpParam);
BOOL CALLBACK EnumChildCB(EnumChildCBType type, IAccessible *pAccessible, VARIANT varChild, UINT uRole, UINT uState, LPCTSTR lpClass
, LPCTSTR lpValue, LPCTSTR lpName, LPVOID lpParam)
{
static int nX = 0;
if(type == ECT_ChildDown)
{
nX++;
return TRUE;
}
if(type == ECT_ChildUp)
{
nX--;
return TRUE;
}
CString lpRole;
GetRoleString(uRole, lpRole);
CString lpState;
GetStateString(uRole, lpState);
FILE *pFile = (FILE*)lpParam;
static TCHAR lpBlank[500] = {0};
static TCHAR lpText[4096] = {0};
memset(lpBlank, 0, sizeof(lpBlank));
int nIndex = 0;
for (nIndex=0; nIndex<nX*2; nIndex++)
{
lpBlank[nIndex] = TEXT('>');
}
_stprintf(lpText, TEXT("%sClass=%s/r/n%sName=%s/r/n%sRole=%s/r/n%sState=%s/r/n%sValue=%s/r/n")
, lpBlank, lpClass, lpBlank, (LPCTSTR)lpName, lpBlank, lpRole, lpBlank, lpState, lpBlank, lpValue);
USES_CONVERSION;
LPCSTR lpCStrText = T2A(lpText);
fwrite(lpCStrText, sizeof(CHAR), strlen(lpCStrText), pFile);
fflush(pFile);
return TRUE;
}
HRESULT EnumChild(IAccessible *pAccessibleParent, PEnumChildCB pfuncCB, LPVOID lpCBParam)
{
long lChildCount = 0;
if(pAccessibleParent->get_accChildCount(&lChildCount) != S_OK)
{
return E_FAIL;
}
HRESULT rv = E_FAIL;
CComQIPtr<IEnumVARIANT> spEnum = pAccessibleParent;
if(spEnum != NULL)
{
spEnum->Reset();
}
ULONG uFetched = 0;
int nIndex = 0;
for (nIndex=1; nIndex<=lChildCount; nIndex++)
{
CComPtr<IDispatch> spChildDisp;
CComVariant varChild;
if(spEnum != NULL)
{
if(spEnum->Next(1, &varChild, &uFetched) != S_OK)
break;
}else{
varChild.vt = VT_I4;
varChild.intVal = nIndex;
}
if(varChild.vt == VT_I4)
{
pAccessibleParent->get_accChild(varChild, &spChildDisp);
}else{
spChildDisp = varChild.pdispVal;
}
CComQIPtr<IAccessible> spChild = spChildDisp;
if(spChild == NULL)
{
spChild = pAccessibleParent;
}else{
varChild.vt = VT_I4;
varChild.intVal = CHILDID_SELF;
}
CComVariant varRole;
if(spChild->get_accRole(varChild, &varRole) != S_OK)
{
continue;
}
if(varRole.vt != VT_I4)
{
continue;
}
UINT uState = 0;
CComVariant varState;
if(spChild->get_accState(varChild, &varState) != S_OK)
{
continue;
}
if(varState.vt != VT_I4)
{
continue;
}
if(STATE_IS_SET(varState.intVal, STATE_SYSTEM_INVISIBLE))
continue;
CString strClass;
HWND hWnd;
if(WindowFromAccessibleObject(spChild, &hWnd) == S_OK)
{
if(hWnd != NULL)
{
GetClassName(hWnd, strClass.GetBuffer(500), 500);
strClass.ReleaseBuffer();
}else{
strClass = TEXT("No window");
}
}
CComBSTR strValue;
spChild->get_accValue(varChild, &strValue);
CComBSTR strName;
spChild->get_accName(varChild, &strName);
if(pfuncCB != NULL)
{
if(!pfuncCB(ECT_Self,spChild, varChild, varRole.intVal, varState.intVal, strClass, strValue, strName, lpCBParam))
{
rv = E_ABORT;
break;
}
}
long lChildCount2 = 0;
if(varChild.vt == VT_I4 && varChild.intVal == CHILDID_SELF && spChild->get_accChildCount(&lChildCount2) == S_OK && lChildCount2 > 0)
{
if(!pfuncCB(ECT_ChildDown, spChild,varChild, varRole.intVal, varState.intVal, strClass, strValue, strName, lpCBParam))
{
rv = E_ABORT;
break;
}
rv = EnumChild(spChild, pfuncCB, lpCBParam);
if(rv != S_OK)
{
break;
}
if(!pfuncCB(ECT_ChildUp, spChild, varChild, varRole.intVal, varState.intVal, strClass, strValue, strName, lpCBParam))
{
rv = E_ABORT;
break;
}
}
}
return S_OK;
}
- Active Accessibility
- Active Accessibility
- 枚举/Active Accessibility /AcceptButton
- Active Accessibility(1)
- Active Accessibility(2)
- MSAA Microsoft Active Accessibility
- Microsoft Active Accessibility
- MS Active Accessibility 接口技术
- MS Active Accessibility 接口技术
- Microsoft Active Accessibility 体系结构:第二部分
- MS Active Accessibility 接口技术编程尝试
- MS Active Accessibility 接口技术编程尝试
- 针对容器对象的 Microsoft Active Accessibility 支持
- 转贴:MS Active Accessibility 接口技术编程尝试 (自动化测试)
- Accessibility
- Accessibility
- active
- Inconsistent accessibility
- 享受一个人的美!
- COM编程之复合文件
- 【ZT】哈希的原理和代价
- CMenuEx cpp源码
- 自己封装MFC的CSize、CPoint、CRect类
- Active Accessibility
- 最近十年50本计算机图书
- 三生石
- DisplayTag使用指南(一) DisplayTag简要介绍
- iframe透明背景
- CREATE DATABASE LINK
- 编程风格与原则
- 天下没有不散的宴席
- Ubuntu9.04下安装arm-linux-gcc交叉编译工具的摸索