WM_COPYDATA 消息实现进程间通信
来源:互联网 发布:linux raid 查看 编辑:程序博客网 时间:2024/04/27 14:54
// WM_COPYDATA 使用的结构
/*
* lParam of WM_COPYDATA message points to...
*/
typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
// 自己实现例子, 注意内存释放。
// EXE1
void CEXE1Dlg::OnBnClickedButton1()
{
COPYDATASTRUCT CDS;
char ch[256];
sprintf(ch, "ffffffuuuuuuu");
CWnd* pWnd = FindWindow(NULL,_T("EXE2"));
if(pWnd)
{
CDS.dwData = 0;
CDS.cbData = sizeof(ch);
CDS.lpData = ch;
::SendMessage(pWnd->m_hWnd, WM_COPYDATA,(WPARAM)0,(LPARAM)&CDS);
}
}
// EXE2
protected:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CEXE2Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
if(message == WM_COPYDATA)
{
COPYDATASTRUCT* copyData = COPYDATASTRUCT*)lParam;
int nDataSize = copyData->cbData;
if(nDataSize > 0)
{
char* ch = new char[nDataSize];
memcpy(ch, copyData->lpData, nDataSize);
::MessageBoxA(m_hWnd, ch, ch, MB_OK);
delete [] ch;
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 网上例子
// Allow room for the terminating 0, hence the + 1
int DataSize = UserTextMemo->Text.Length() + 1;
// Copy data to a local buffer
char* Data = new char[DataSize];
memcpy(
Data,
UserTextMemo->Text.c_str(),
DataSize
);
COPYDATASTRUCT CopyData;
CopyData.dwData = 0;
CopyData.cbData = DataSize;
CopyData.lpData = Data;
SendMessage(
WindowHandle,
WM_COPYDATA,
reinterpret_cast <WPARAM> (Handle),
reinterpret_cast <LPARAM> (&CopyData)
);
delete [] Data;
======================================================================
// Message.LParam is a pointer to the COPYDATASTRUCT,
// so we will cast it to a local pointer
COPYDATASTRUCT* CopyData = reinterpret_cast <COPYDATASTRUCT*>
(Message.LParam);
// There can be a 32 bit value in the dwData field
// and more data in the lpData field.
// The cbData field tells us the size of the
// data pointed to by lpData. For this example,
// we're assuming it's either dwData or lpData
int DataSize = CopyData->cbData;
if(DataSize > 0) {
// Make a local copy
char* Data = new char[DataSize];
memcpy(Data, CopyData->lpData, DataSize);
// Update text in Memo control
ReceiverMemo->Lines->Text = Data;
delete [] Data;
}
else { // We received a number in CopyData->dwData
int NumberFromExternalApplication = CopyData->dwData;
// Update text in Memo control
ReceiverMemo->Lines->Text = IntToStr(
NumberFromExternalApplication
);
}
- WM_COPYDATA 消息实现进程间通信
- WM_COPYDATA 消息实现进程间通信
- WM_COPYDATA 消息实现进程间通信
- 发送WM_COPYDATA消息实现进程间的通信
- WM_COPYDATA实现进程间通信
- 进程间消息WM_COPYDATA通信示例
- 使用WM_COPYDATA消息完成进程间通信
- 使用WM_COPYDATA消息进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 【WM_COPYDATA】进程通信——WM_COPYDATA消息
- 用WM_COPYDATA实现进程间通信
- 利用WM_COPYDATA实现进程间通信
- 使用WM_COPYDATA实现进程间通信
- 一个基本的TCP/IP编程实例
- jQuery基本操作篇-coolgle-时空博客
- 设置全屏Symbian C++应用程序
- chinaunix 我的blog
- 使用jad反编译class文件
- WM_COPYDATA 消息实现进程间通信
- Oracle 员工积分排名 创建视图语句
- JSP、Servlet中的相对路径和绝对路径
- 一种新的加载驱动方法非完整爆光
- Australian Ugg Boots online store
- google 的使用技巧
- #pragma comment()
- 开发的准备工作……
- 挂接硬盘或者盘阵的步骤