-
大小: 3KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-10
- 語言: C/C++
- 標(biāo)簽: IAccessible??MSAA??DirectUI??
資源簡介
代碼提供了IAccessible接口示例,獲取DirectUI窗口信息
代碼片段和文件信息
/*有些窗口為Dectui制作,使用SPY獲取不到窗口句柄,解決辦法使用MSAA中的IAccessible接口獲取*/
#include?
#include?se.h>
CComModule?_Module;
#include????
#include?
#include?
#include?
//系統(tǒng)API相關(guān)頭文件
#include?
#include?
#include?
#include?“Shlwapi.h“
#include?
#pragma?comment(lib“shlwapi.lib“)
#pragma?comment(lib“oleacc.lib“)
#include?
using?namespace?std;
//名稱
HRESULT?PrintName(IAccessible*?pAcc?long?childId)
{
if?(pAcc?==?NULL)
{
return?E_INVALIDARG;
}
BSTR?bstrName;
VARIANT?varChild;
varChild.vt?=?VT_I4;
varChild.lVal?=?childId;
HRESULT?hr?=?pAcc->get_accName(varChild?&bstrName);
printf(“Name:?%S?“?bstrName);
//printf(“Value:?%S?“?bstrName);
SysFreeString(bstrName);
return?hr;
}
/*角色*/
HRESULT?PrintRole(IAccessible*?pAcc?long?childId)
{
DWORD?roleId;
if?(pAcc?==?NULL)
{
return?E_INVALIDARG;
}
VARIANT?varChild;
BSTR?bstrName;
varChild.vt?=?VT_I4;
varChild.lVal?=?childId;
VARIANT?varResult;
HRESULT?hr?=?pAcc->get_accRole(varChild?&varResult);
pAcc->get_accValue(varChild?&bstrName);
printf(“value:?%S?“?bstrName);
if?((hr?==?S_OK)?&&?(varResult.vt?==?VT_I4))
{
roleId?=?varResult.lVal;
UINT???roleLength;
LPTSTR?lpszRoleString;
roleLength?=?GetRoleText(roleId?NULL?0);
lpszRoleString?=?(LPTSTR)malloc((roleLength?+?1)?*?sizeof(TCHAR));
if?(lpszRoleString?!=?NULL)
{
GetRoleText(roleId?lpszRoleString?roleLength?+?1);
#ifdef?UNICODE
printf(“Role:?%S\n“?lpszRoleString);
#else
printf(“Role:?%s\n“?lpszRoleString);
#endif
free(lpszRoleString);
}
else
評論
共有 條評論