C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: IAccessible::get_accChildについて


(過去ログ 52 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■28715 / inTopicNo.1)  IAccessible::get_accChildについて
  
□投稿者/ 熊谷隆史 (2回)-(2008/11/29(Sat) 12:26:08)

分類:[C/C++] 

2008/11/30(Sun) 10:59:14 編集(投稿者)
こんにちは。
Excel 2007のUserFormのウィンドウハンドルから
IAccessibleインタフェースを取り出して、子孫要素を辿っているのですが、
コンテキストメニューの様な取得に失敗する要素があります。

> 	int arr[]  = { -1, 1, 1 };

これらは、IEnumVARIANT::Nextによって得られたChild IDですが
以下のコードで同様にして得られたIDをIAccessible::get_accChildの引数で渡しても
S_FALSEが返されて、失敗します。

非表示項目のためか、accNavigateでも失敗します。
AccessibleChildren APIも同じIDを返すため、結果は変わりません。

Accessible Explorerではきちんと要素を取得出来るので
何か方法があるはずですが、それが分かりません。
どなたか、お分かりになる方、宜しくお願いします。

環境 Vista、VC++ 2008 EE
※ 長くなるのでエラー処理は省いています。

---
#include <windows.h> 
#include <oleacc.h> 
#include <comdef.h> 
#include <stdlib.h>
#pragma comment( lib, "oleacc.lib" )

int main()
{

	::CoInitialize( NULL );
	HWND hWnd = ::FindWindow( L"ThunderDFrame", NULL);

	IAccessible* pacc;	
	::AccessibleObjectFromWindow( hWnd, OBJID_CLIENT, __uuidof( IAccessible ), (void**)&pacc);

	IDispatch* pDisp;
	pacc->get_accParent( &pDisp );
	pacc->Release();
	pDisp->QueryInterface( &pacc );
	pDisp->Release();
	
	int arr[] = { -1, 1, 1 };
	for ( int i = 0; i < _countof( arr ); i++ ){
		_variant_t varChild;
		varChild.vt = VT_I4;
		varChild.lVal = arr[i];
		pacc->get_accChild( varChild, &pDisp );
		pacc->Release();
		pDisp->QueryInterface( __uuidof( IAccessible ), (void**)&pacc );
		pDisp->Release();
	}

	IEnumVARIANT* pEnum;
	pacc->QueryInterface ( __uuidof( IEnumVARIANT ), (void**)&pEnum );

	long Count;
	pacc->get_accChildCount( &Count );
	_variant_t* v = new _variant_t[ Count ];

	ULONG CeltFetched;
	pEnum->Next( Count , v, &CeltFetched );

	for (int i = 0; i < CeltFetched; i++){

		if( v[i].vt == VT_I4 ){			
			//コンテキストメニュー	
			HRESULT hr = pacc->get_accChild( v[i], &pDisp); 

			//S_FALSEを返すので、SUCCEEDEDマクロは使えない。
			if( hr == S_OK ) {
				pDisp->Release();
			}
		}
	}
	delete[] v;
	pEnum->Release();
	pacc->Release();
	::CoUninitialize();
	return 0;
}

引用返信 編集キー/
■28743 / inTopicNo.2)  Re[1]: IAccessible::get_accChildについて
□投稿者/ 熊谷隆史 (1回)-(2008/11/30(Sun) 10:18:10)
ご覧頂いた方、有難うございました。
未解決ですが閉じます。
# AccessibleObjectFromPointでないとすると、一体何なのだろう?

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -