Click here to Skip to main content
Click here to Skip to main content

Tagged as

Inter-Process Communication using WM_COPYDATA

, 3 Dec 1999
Rate this:
Please Sign up or sign in to vote.
Demonstrates the use of WM_COPYDATA
<!-- Article Starts -->
  • Download demo project - 83 Kb
  • Download 32-bit source - 20 Kb
  • Download 16-bit source - 13 Kb
  • sample image

    This demo shows how to send and receive message between apps (32-bit and 16-bit) using WM_COPYDATA.

    There are two samples. One is 32-bit and one is 16-bit. The 32-bit sample will check and see whether it is already running and if so, will start another instance with a different window header.

    • The 'Send' button will send the text from the editbox to the other 32-bit app.
    • The 'Send16' button will send the text to the 16-bit app.

    The received data will show up in the static box.Only 2 instances of the 32-bit apps are supported in this demo. The 16-bit app will only send and receive data to/from the 32-bit apps.

    The exchange of data is performed by finding the other application (using FindWindow) and sending a WM_COPYDATA message to that window:

        CString strWindowTitle = _T("Window Name");
        CString strDataToSend  = _T("This is a message to send");
        
    	LRESULT copyDataResult;
    	CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitle);
    
    	if (pOtherWnd)
    	{
    		COPYDATASTRUCT cpd;
    		cpd.dwData = 0;
    		cpd.cbData = strDataToSend.GetLength();
    		cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
    		copyDataResult = pOtherWnd->SendMessage(WM_COPYDATA,
                                                    (WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),
                                                    (LPARAM)&cpd);
    		strDataToSend.ReleaseBuffer();
    		// copyDataResult has value returned by other app
    		
    	} 
    	else 
    	{
    		AfxMessageBox("Unable to find other app.");
    	}	
    }
    

    The other app should handle the WM_COPYDATA message in the following manner

    BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
    	//{{AFX_MSG_MAP(CMyWnd)
    	...
    	ON_WM_COPYDATA()
    	...
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    ...
    
    BOOL CMyWnd::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
    {
    	CString strRecievedText = (LPCSTR) (pCopyDataStruct->lpData);
    	
    	return CMyWnd::OnCopyData(pWnd, pCopyDataStruct);
    }
    

    License

    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

    Share

    About the Author

    Eddy Celis
    Software Developer (Senior)
    United States United States
    From firmware in Assembly code to GUIs in C#; done it all.
    Currently mainly programming C, C++ at the Windows system level.
    Living in Palm Bay, FL.

    Comments and Discussions

     
    QuestionReceiver part doesnt compile Pinmemberdlavrantonis6-Oct-13 1:16 
    AnswerRe: Receiver part doesnt compile PinmemberEddy Celis6-Oct-13 3:31 
    Generalvery nice artical,thanks Pinmemberhaiqing19881-Jul-13 3:42 
    Generalproblem with WM_COPYDATA PinmemberAdeel Mirza7-Mar-11 2:50 
    GeneralRe: problem with WM_COPYDATA Pinmemberbhupendradhyani6-Apr-11 3:13 
    GeneralAn bug in the program.(the buffer should include the end 0 of the string) Pinmemberlinzhehui5-Dec-08 20:31 
    GeneralRe: An bug in the program.(the buffer should include the end 0 of the string) PinmemberDestiny7774-Mar-13 18:42 
    GeneralQuestions PinmemberTom Wright15-Dec-04 6:23 
    Questionis the window available? Pinmemberdarwinw18-Nov-03 9:25 
    AnswerRe: is the window available? PinmemberThatsAlok24-Sep-04 22:08 
    GeneralRe: is the window available? PinmemberVitalyTomilov1-Dec-04 5:25 
    GeneralRe: is the window available? PinmemberThatsAlok1-Dec-04 19:08 
    GeneralVideo Conferencing PinmemberAshutosh Pandey11-Dec-02 0:49 
    Hi eddie
    i m new kid on the VC++ block. I am presently wrking on a virtual classroom application. I have made use of Windows Media Encoder in order to broadcast audio video information.
    In this application i need to share applications and sync with all the connected users (a concept of VNC).
    Can u plzz guide me in how can i achieve desktop sharing
    as well as is there any better option for Video Conferencing like the H323 protocol used by netmeeting.
    Thank you in advance
    regards
    ashutoshRoll eyes | :rolleyes:
    GeneralMulti Client Application PinmemberSpiros7-Nov-02 9:54 
    GeneralRe: Multi Client Application PinmemberEddy Celis7-Nov-02 16:54 
    GeneralRe: Multi Client Application PinmemberSpiros7-Nov-02 17:51 
    GeneralRe: Multi Client Application PinmemberMatthias Mann5-Dec-02 12:33 
    GeneralRe: Multi Client Application PinsussAnonymous4-Oct-04 8:58 
    GeneralRe: Multi Client Application PinmemberSpiros4-Oct-04 16:22 
    GeneralSmall bug PinmemberAndreas Muegge30-Oct-02 22:47 
    GeneralIt doesn't work with MDI! PinmemberJohn Wong24-Aug-02 12:27 
    GeneralRe: It doesn't work with MDI! PinsussBughunter24-Aug-02 16:08 
    GeneralRe: It doesn't work with MDI! PinmemberJohn Simmons / outlaw programmer11-Dec-02 1:31 
    GeneralSendMessage followed by file read PinmemberBigBolMan24-Jul-02 7:21 
    GeneralPotential Blocking Issues PinmemberDavid Stroupe27-Jun-02 6:10 

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

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

    | Advertise | Privacy | Terms of Use | Mobile
    Web04 | 2.8.141220.1 | Last Updated 4 Dec 1999
    Article Copyright 1999 by Eddy Celis
    Everything else Copyright © CodeProject, 1999-2014
    Layout: fixed | fluid