![]() |
Languages »
C / C++ Language »
Window Management
Intermediate
Retrieving Conversations from Yahoo MessengerBy Deepesh DhapolaDescribes how to retreive text from the Yahoo Messenger chat window using the MSHTML COM interfaces. |
VC6, VC7Win2K, WinXP, Visual Studio, ATL, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

In this second article I'm showing how to retrieve conversation text from Yahoo messenger. The first article talks about retrieving conversation text from MSN Messenger and it can be viewed here. In this second article, we will discuss how we can do the same with Yahoo messenger.
As described in first article, to get the contents from the Messenger window what we are doing is we are iterating through all the top level windows in Windows OS and checking if its desired Messenger window, if its the desired window then we are iterating through its child windows to get the HWND of the window that contains chat text. Once we get the handle to the window, we can use our code to retrieve the conversation text. Except the last step of getting text from conversation window handle, all the steps remain same for both MSN and Yahoo messengers. In MSN messenger we used the Windows clipboard to copy text from the MSN window and pasting this on our application. This works fine for some windows but not all windows support it; the Yahoo conversation window is one of them.
If you open up spy++ and check the window class of Yahoo messenger's
conversation text, you'll find that the window class of this window is 'Internet
Explorer_Server'. This windows is installed by Internet Explorer and is
responsible for rendering and displaying HTML pages. To give developers
flexibility, Microsoft has exposed mechanisms that allows us to manipulate the
contents of this window from our own processes. To accomplish our goal we will
be using a pointer to the document that contains HTML text being displayed in
the conversation window. IHTMLDocument2 interface represents the information
contained in the conversation window. MSDN describes the IHTMLDocument2 interface as
This interface retrieves information about the document, and examines and
modifies the HTML elements and text within the document.. So to get the
pointer to IHTMLDocument2 interface, we will send WM_HTML_GETOBJECT window
message to 'Internet Explorer_Server' window and pass the result to the
ObjectFromLresult() method. A successful call to ObjectFromLresult() method
gives us a pointer to IHTMLDocument2 interface. Finally, to get the entire text
in our application we get the body property of IHTMLDocument2 which returns
us a pointer to the IHTMLElement interface and getting the <code lang="c++">innerText property of
IHTMLElement interface returns us the entire text contained in the conversation text. If
you want to get this in original HTML form then you can call innerHTML
property of IHTMLElement.
This should be clear from the following code snippet:
//Code snippet
char wndowclass[CLASS_SIZE];
if (GetClassName(hwnd,wndowclass,CLASS_SIZE)==0)
return TRUE;
string strTemp(wndowclass);
if (strTemp==string("Internet Explorer_Server"))
{
CoInitialize(NULL);
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
string strTemp;
CComPtr spDoc;
LRESULT lRes;
strTemp="";
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;
hr = (*pfObjectFromLresult)( lRes,
IID_IHTMLDocument2,
0,
(void**)&spDoc );
if ( SUCCEEDED(hr) )
{
CComPtr pHTMLElement;
hr=spDoc->get_body(&pHTMLElement);
BSTR bstrText;
pHTMLElement->get_innerText(&bstrText);
strTemp=(char *)_bstr_t(bstrText);
pChatText->SetWindowText(strTemp.c_str());
}
}
::FreeLibrary( hInst );
}
| You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 27 Feb 2003 Editor: Heath Stewart |
Copyright 2003 by Deepesh Dhapola Everything else Copyright © CodeProject, 1999-2009 Web21 | Advertise on the Code Project |