現在、私はこのC++関数を持っています(安全チェックと読みやすくするためにいくつかのコードを削除しました):
HRESULT WalkTreeWithAccessibleChildren(wstringstream *ss, IAccessible* pAcc, int depth)
{
long childCount;
long returnCount;
VARIANT* pArray = new VARIANT[childCount];
hr = AccessibleChildren(pAcc, 0L, childCount, pArray, &returnCount);
for (int x = 0; x < returnCount; x++) {
VARIANT vtChild = pArray[x];
Get the role and name of the component here
// If it's an accessible object, get the IAccessible, and recurse.
if (vtChild.vt == VT_DISPATCH) {
IDispatch* pDisp = vtChild.pdispVal;
IAccessible* pChild = NULL;
hr = pDisp->QueryInterface(IID_IAccessible, (void**) &pChild);
WalkTreeWithAccessibleChildren(ss, pChild, depth + 1);
}
}
Paint.NET などの比較的少数のコンポーネント (200 程度) を持つ一部のプログラムの場合、これには約 2 秒かかります。この機能を高速化したり、1 回の COM 呼び出しですべてのコンポーネントを取得したりする方法はありますか?