4
現在我有此C++函數(除去安全檢查和一些代碼,使其更具有可讀性):有沒有辦法讓MSAA IAccessible遍歷更快?
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);
}
}
對於具有相對少的組件的某些程序(200左右),例如Paint.NET,這大約需要2秒,有沒有辦法讓這個功能更快,在一次COM調用中獲取所有組件?或者類似的東西?
使用UIAutomation不是一個不幸的選擇(需要爲XP Service Pack 2工作),和accNavigate似乎沒有比我現在得到孩子的方式(它也被棄用)更快。儘管感謝您的回覆。後臺線程將如何提高執行速度?他們不會讓事情變慢嗎? –
後臺線程技術不會使得獲取項目的整個過程更快,但有時它可以用來使UI更加快速響應,從而使事情看起來比實際更快。 –
[documentation](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318473(v = vs.85).aspx)指出'accNavigate方法已被棄用,不應使用'。 –