Тема: C# и MAPI
Показать сообщение отдельно
Старый 28.05.2007, 23:15     # 2
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Не совсем понимаю что вы называете "объект Inspector".
Если вам , судя по приведенному коду, нужно получить IHTMLDocument2 то это можно сделать и без MAPI, достаточно иметь хендл окна ActiveX-а (его СlassName - ""Internet Explorer_Server").
Код примерно такой :
Код:
BOOL CWebConnectivity::GetHTMLDocFromWnd(HWND hWnd, MSHTML::IHTMLDocument2Ptr& spOutDoc2) const
{
	if(!hWnd) 
		return FALSE;

	spOutDoc2=NULL;
	static UINT MSG = RegisterWindowMessage(TEXT("WM_HTML_GETOBJECT"));
	wstring ClassName("");
	TCHAR buf[MAX_LEN];
	::GetClassName(hWnd,buf,sizeof(buf)/sizeof(TCHAR)-2);

	ClassName=buf;
	if(ClassName != TEXT("Internet Explorer_Server"))
	{
		if (ClassName == TEXT("Internet Explorer_TridentCmboBx") || 
			ClassName == TEXT("Internet Explorer_TridentLstBox"))
		{
			hWnd = ::GetParent(hWnd);
			::GetClassName(hWnd,buf,sizeof(buf)-2);
			ClassName=buf;
			if(ClassName != TEXT("Internet Explorer_Server") )
				return FALSE;
		}
	}
	DWORD lRes = 0;
	LRESULT res = ::SendMessageTimeout(hWnd, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, &lRes);
	if (!res)
		return FALSE;
	if(::ObjectFromLresult(lRes,MSHTML::IID_IHTMLDocument2,0,(void**)&spOutDoc2) == S_OK)
	{
		
		return TRUE;
	
	}
	return FALSE;
}
Код С++, в шарп сами завернете при необходимости. Работает без проблем для "Internet Explorer_Server" -ов в любых аппликациях, в том числе и для Outlook .
Есть некоторые тонкости. Например IHTMLDocument-ы могут быть вложенными, придеться делать энумирацию доков чтоб-бы добраться до нужного, и т.д. Если будет интересно - спрашивайте.
__________________
Best Regards
alexey_ma вне форума