3,248
社区成员




#define WM_FOCUS WM_USER + 1
xxx::OnFocus()
{
// 这里就是你操作的地方,把代码粘贴过来
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
if ( hInst == NULL )
{
return 0;
}
HWND p_Hwnd=::FindWindow("Liao","无标题 - MyIE");
...
} // else document not ready
::FreeLibrary( hInst );
}
UINT GameStart(LPVOID lpParam)
{
// 当需要设置控件焦点时,发送自定义消息给组件线程中的某个窗口
::SendMessage(hwnd, WM_FOCUS, 0, 0);
return 0;
}
void CMyIEView::OnGameStart()
{
// TODO: Add your command handler code here
pThread=AfxBeginThread(GameStart,(LPVOID)this);
}
UINT GameStart(LPVOID lpParam)
{
CoInitialize( NULL );
// Explicitly load MSAA so we know if it's installed
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
if ( hInst == NULL )
{
return 0;
}
HWND p_Hwnd=::FindWindow("Liao","无标题 - MyIE");
HWND hWndChild=NULL;
// Get 1st IE window
::EnumChildWindows( p_Hwnd, EnumChildProc, (LPARAM)&hWndChild );
if ( hWndChild )
{
CComPtr<IHTMLDocument2> pDoc;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc );
if ( SUCCEEDED(hr) )
{
CComPtr<IHTMLDocument2 > pIframeDoc = NULL;
HWND iframeHwnd;
getFrameDocumentById(pDoc,L"TEST",&pIframeDoc,&iframeHwnd);
if(SUCCEEDED(hr) && pIframeDoc!=NULL){
CComPtr<IHTMLElementCollection> pAllElems = NULL;
hr =pIframeDoc->get_all(&pAllElems);
if(SUCCEEDED(hr) && pAllElems!=NULL){
long nrEmbeds = 0;
hr = pAllElems->get_length(&nrEmbeds);
if (SUCCEEDED(hr) && nrEmbeds > 0)
{
//hr = pAllElems->item(CComVariant("game") ,CComVariant("0"),&objectDis);
for(long i=0;i<nrEmbeds;i++){
CComPtr<IDispatch> objectDis = NULL;
CComPtr<IHTMLElement > pElem = NULL;
_variant_t index = i;
hr = pAllElems->item(index ,index,&objectDis);
hr = objectDis->QueryInterface(IID_IHTMLElement ,(void**)&pElem);
BSTR Name={0};
hr=pElem->get_id(&Name);
if(SUCCEEDED(hr)&&Name!=NULL){
CString pName;
pName=(CString)Name;
if(strcmp(pName,"game")==0){
::OutputDebugString(pName);
CComPtr<IHTMLControlElement> pControl=NULL;
hr = pElem->QueryInterface(&pControl);
if (SUCCEEDED(hr) && pControl!=NULL)
{
::OutputDebugString("pControl!=NULL");
hr = pControl->focus();
game_status=true;
while(game_status){
::PostMessage( hWndChild ,WM_KEYDOWN ,VK_TAB,0);
::PostMessage( hWndChild ,WM_KEYUP ,VK_TAB,0);
::PostMessage( hWndChild ,WM_KEYDOWN,49,0);
::PostMessage( hWndChild ,WM_KEYUP,49,0);
Sleep(1000);
}
}
break;
}
}
}
}//nrEmbeds > 0
}//pAllElems!=NULL
}//pIframeDoc!=NULL
}//if ( SUCCEEDED(hr) )
}//if ( pfObjectFromLresult != NULL )
} // else document not ready
::FreeLibrary( hInst );
CoUninitialize();
return 0;
}