// IAccessibleAply.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<tchar.h>
#include <windows.h>
#include <oleacc.h>
#include <stdio.h>
#include <comutil.h>
#include <Shlwapi.h>
#include <string>
#include <commctrl.h>
//#include<initguid.h>///As with any COM interface, the system file initguid.h should be included in any source code that requires Active Accessibility.
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "oleacc.lib")
#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib,"kernel32.lib")
//
#include "comutil.h"
#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib,"comsuppwd.lib")
UINT GetObjectState(IAccessible* pacc, VARIANT* pvarChild, LPTSTR lpszState, UINT cchState)
{
HRESULT hr;
VARIANT varRetVal;
*lpszState = 0;
VariantInit(&varRetVal);
hr = pacc->get_accState(*pvarChild, &varRetVal);
if (!SUCCEEDED(hr))
return(0);
if (varRetVal.vt == VT_I4)
{
// 根据返回的状态值生成以逗号连接的字符串。
GetStateText(varRetVal.lVal, lpszState, cchState);
}
else if (varRetVal.vt == VT_BSTR)
{
if (varRetVal.bstrVal)_tcscpy_s(lpszState, cchState, _com_util::ConvertBSTRToString(varRetVal.bstrVal));
}
VariantClear(&varRetVal);
return _tcslen(lpszState);
}
UINT GetObjectName(IAccessible* pacc, VARIANT* pvarChild, LPTSTR lpszName, UINT cchName)
{
HRESULT hr;
BSTR pszName;
hr = pacc->get_accName(*pvarChild, &pszName);
if (pszName)_tcscpy_s(lpszName, cchName, _com_util::ConvertBSTRToString(pszName));
return _tcslen(lpszName);
}
UINT GetObjectValue(IAccessible* pacc, VARIANT* pvarChild, TCHAR* pValue, UINT cchValue)
{
HRESULT hr;
BSTR pszValue;
hr = pacc->get_accValue(*pvarChild, &pszValue);
if (pszValue)_tcscpy_s(pValue, cchValue, _com_util::ConvertBSTRToString(pszValue));
return _tcslen(pValue);
}
UINT GetObjectClass(IAccessible* paccChild, LPTSTR lpszClass, UINT cchClass)
{
HWND hWnd;
::WindowFromAccessibleObject(p

本文介绍如何利用Active Accessibility API实现对Windows界面元素的搜索和操作,包括获取元素状态、名称、角色等属性,以及如何通过递归查找特定元素。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



