风过无痕,生命如烟

每个人生下来都是天使,不过这个世界上也存在着恶魔。恶魔是天使变的,因为这个世界充满了诱惑。

导航

VC++技巧集锦-Web(不断搜集中……)

1、读取Web页面中的Input Text
typedef void* HHTMLWND;
typedefvoid* HHTMLSEL;
//得到CHtmlView中具有焦点的Input Text,hWnd是WebBroswer控件的窗口句柄
HHTMLWND GetActiveHtmlTextCtrlHandle(HWND hWnd)
{
IHTMLDocument2* pDoc2 = NULL;
LRESULT lRes;
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );

UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
IHTMLDocument2* pDoc;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc);
if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
pDoc->get_Script( &spDisp );
pDoc->Release();
spWin = spDisp;
spWin->get_document( &pDoc2);
while(pDoc2)
{
IHTMLElement* pElement;
if(SUCCEEDED(pDoc2->get_activeElement(&pElement)))
{
pDoc2->Release();
pDoc2 = NULL;

CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == "FRAME" || str == "IFRAME")
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);

}
else
{
VARIANT_BOOL bText;
pElement->get_isTextEdit(&bText);
if (bText == VARIANT_TRUE)
{
return pElement;

}
else
pElement->Release();
}
}
}
}
}
::FreeLibrary( hInst );
return NULL;
}
//得到input text的文本
INT GetActiveHtmlText(HHTMLWND hWnd, LPTSTR& lpText, BOOL& bDel)
{
IHTMLElement* pElement = (IHTMLElement* )hWnd;
HRESULT hr;
BSTR value;
IHTMLInputTextElement* pHTMLInputTextElement;
hr = pElement->QueryInterface(IID_IHTMLInputTextElement, (void**)&pHTMLInputTextElement);
if (SUCCEEDED(hr))
{
pHTMLInputTextElement->get_value(&value);
pHTMLInputTextElement->Release();
}
else
{
IHTMLTextAreaElement* pHTMLTextAreaElement;
hr = pElement->QueryInterface(IID_IHTMLTextAreaElement,
(void**)&pHTMLTextAreaElement);
if (SUCCEEDED(hr))
{
pHTMLTextAreaElement->get_value(&value);
pHTMLTextAreaElement->Release();
}
}
INT nLen = SysStringLen(value);
#ifdef _UNICODE
lpText = new WCHAR[nLen+1];
wcscpy(lpText, value);
#else
lpText = new CHAR[2*nLen+1];
WideCharToMultiByte(936, 0, value, -1, lpText, 2*nLen+1, NULL, NULL);
#endif
SysFreeString(value);
bDel = TRUE;
return 0;
}

posted on 2005-11-10 13:09  hyamw  阅读(685)  评论(0)    收藏  举报