Click here to Skip to main content
13,558,002 members
Click here to Skip to main content
Add your own
alternative version


47 bookmarked
Posted 27 Feb 2003

Retrieving Conversations from MSN Messenger

, 27 Feb 2003
Rate this:
Please Sign up or sign in to vote.
Uses a simple copy/paste routine to get chat text from MSN Messenger.



In this article I will show you how to retrieve conversation text from MSN Messenger. In another article I have shown how the same can be done with Yahoo Messenger which can be accessed here. So without wasting any time, lets explore MSN messenger.

In MSN Messenger, the window class of the window that contains conversation text is 'RichEdit20W' for Windows NT/2K and 'RichEdit20A' for Windows 95/98. These classes support copying their content to the clipboard by sending the <CODE lang=c++>WM_COPY message. Since the clipboard is available to all the applications in Windows any text copied from another application is available to all the applications in Windows. So to retrieve text from the MSN conversation window, simply copy text from the MSN Conversation window to the clipboard and paste it in your application. Simple isn't it? But sending <CODE lang=c++>WM_COPY message to this window requires an <CODE lang=c++>HWND of the 'RichEdit20W' window class window.

To get the <CODE lang=c++>HWND, first we need to check if there is any MSN conversation windows open, this can be done by using <CODE lang=c++>EnumWindows() API. If its open then get its <CODE lang=c++>HWND and check its child windows to find a window having the window class 'RichEdit20W' or 'RichEdit20A', this can be done using the <CODE lang=c++>EnumChildWindows() API. After getting the <CODE lang=c++>HWND of conversation text window, we need to send <CODE lang=c++>WM_COPY message. But sending <CODE lang=c++>WM_COPY message alone will be of no use if we don't select all the text in this window. I mean simulating 'Ctrl+A'. So, in total we need to send three window messages to the conversation window. First for selecting all the text in the conversation window by sending <CODE lang=c++>EM_SETSEL message with 0 for the <CODE lang=c++>WPARAM and -1 for the <CODE lang=c++>LPARAM; second for copying the selected text in clipboard by sending <CODE lang=c++>WM_COPY message; and third for deselecting the selected text by sending <CODE lang=c++>EM_SETSEL message with -1 for <CODE lang=c++>WPARAM and 0 for <CODE lang=c++>LPARAM value. This will be clear from the code snippet given below:

<PRE lang=c++>//Code snippet void CMSNChatTextDlg::OnGetnow() { if (! EnumWindows((WNDENUMPROC )EnumWindowsProc,0)) return; } BOOL CALLBACK CMSNChatTextDlg::EnumWindowsProc(HWND hwnd, LPARAM lParam) { TCHAR buff[1000]; int buffsize=100; HWND hMSNWnd; hMSNWnd=NULL; ::GetWindowText(hwnd,buff,buffsize); if (strlen(buff)<1) return TRUE; string strTemp(buff); //CHECK for MSN MESSENGER CHAT WINDOW string::size_type pos=0; pos=strTemp.rfind("- Conversation",strTemp.length()); if (pos!=-1) EnumChildWindows(hwnd,ChildWndProc,0); return TRUE; } BOOL CALLBACK CMSNChatTextDlg::ChildWndProc(HWND hwnd, LPARAM lParam) { static int i=0; LPTSTR lptstr; HGLOBAL hglb; char wndowclass[CLASS_SIZE]; if (GetClassName(hwnd,wndowclass,CLASS_SIZE)==0) return TRUE; string strTemp(wndowclass); if ((strTemp==string("RichEdit20W")) ||<BR> (strTemp==string("RichEdit20A"))) { ::SendMessage(hwnd,EM_SETSEL,0,-1); //start selecting ::SendMessage(hwnd,WM_COPY,0,0); ::SendMessage(hwnd,EM_SETSEL,-1,0); //end selecting if (!IsClipboardFormatAvailable(CF_TEXT)) return TRUE; if (! ::OpenClipboard(NULL)) return TRUE; hglb = GetClipboardData(CF_TEXT); if (hglb != NULL) { lptstr = (LPTSTR)GlobalLock(hglb); GlobalUnlock(hglb); EmptyClipboard(); CloseClipboard(); pChatText->SetWindowText(lptstr); return FALSE; } } return TRUE; }

This gives us the opportunity to make some fantastic SPYING applications that can email MSN conversations of someone to you or whatever you can think of!

In my next article, we will discuss how the same can be done with Yahoo messenger. Remember, <CODE lang=c++>WM_COPY messages does not work in Yahoo. We need to put some extra efforts to accomplish this.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Deepesh Dhapola
Web Developer
India India

You may also be interested in...

Comments and Discussions

Generaltrying to develop: adult content filter for protecting my kids. Pin
ZUPERKOOL7-Feb-10 5:05
memberZUPERKOOL7-Feb-10 5:05 
QuestionHelp? Pin
heavenlyangelkf14-Apr-09 12:55
memberheavenlyangelkf14-Apr-09 12:55 
GeneralEM_SETSEL and WM_COPY Pin
Mandai14-Apr-09 11:53
memberMandai14-Apr-09 11:53 
Questionthe window class Pin
yadanwutuobang23-Apr-08 16:24
memberyadanwutuobang23-Apr-08 16:24 
Questionnew Pin
jade8-Dec-07 10:08
memberjade8-Dec-07 10:08 
QuestionHow do i use the code? [modified] Pin
batousaioiqw98-Apr-07 18:53
memberbatousaioiqw98-Apr-07 18:53 
GeneralHelp Pin
Tj.15-Nov-06 23:16
memberTj.15-Nov-06 23:16 
Generalwould this work for windows live messenger Pin
xsouldeath18-Sep-06 14:06
memberxsouldeath18-Sep-06 14:06 
Generalin msn7.5 or 8.0... Pin
lsmart12-Jun-06 21:43
memberlsmart12-Jun-06 21:43 
Generalnot working Pin
amanwas9-Jan-05 11:06
memberamanwas9-Jan-05 11:06 
Generalthanx Pin
EPulse29-Nov-04 18:01
memberEPulse29-Nov-04 18:01 
Generalcool Pin
zhongxunyang3-Oct-03 21:48
memberzhongxunyang3-Oct-03 21:48 
Generalgetting the e-mail Pin
AlejoCL28-May-03 8:37
memberAlejoCL28-May-03 8:37 
Generalcool stuff Pin
matty1595-Mar-03 23:12
membermatty1595-Mar-03 23:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04-2016 | 2.8.180515.1 | Last Updated 28 Feb 2003
Article Copyright 2003 by Deepesh Dhapola
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid