c++ - 使用 WM_COPYDATA 在进程之间发送数据

标签 c++ windows ipc wm-copydata

我希望在进程之间发送文本。我发现了很多这样的例子,但没有一个我可以开始工作。这是我目前所拥有的:

对于发送部分:

COPYDATASTRUCT CDS;
CDS.dwData = 1;
CDS.cbData = 8;
CDS.lpData = NULL;
SendMessage(hwnd, WM_COPYDATA , (WPARAM)hwnd, (LPARAM) (LPVOID) &CDS);

接收部分:

case WM_COPYDATA:
COPYDATASTRUCT* cds = (COPYDATASTRUCT*) lParam;

我不知道如何构造 COPYDATASTRUCT,我刚刚放了一些似乎可以工作的东西。调试时执行 WM_COPYDATA 案例,但我又不知道如何处理 COPYDATASTRUCT

我想在两个进程之间发送文本。

您可能会说我刚刚开始,我在 Code::Blocks 中使用 GNU GCC 编译器,我试图避免 MFC 和依赖项。

最佳答案

有关如何使用消息的示例,请参阅 http://msdn.microsoft.com/en-us/library/ms649009(VS.85).aspx .您可能还想查看 http://www.flounder.com/wm_copydata.htm .

dwData 成员由您定义。把它想象成你要定义的数据类型枚举。它是您想要用来识别数据是某某字符串的任何内容。

cbData 成员是lpData 所指向的数据的字节大小。在您的情况下,它将是字符串的大小(以字节为单位)。

lpData 成员指向要复制的数据。

所以,要传输单个字符串....

LPCTSTR lpszString = ...;
COPYDATASTRUCT cds;
cds.dwData = 1; // can be anything
cds.cbData = sizeof(TCHAR) * (_tcslen(lpszString) + 1);
cds.lpData = lpszString;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);

然后,接收它....

COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == 1)
{
    LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
    // do something with lpszString...
}

关于c++ - 使用 WM_COPYDATA 在进程之间发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451103/

相关文章:

c++ - 按成员降序对多个对象进行排序?

c - 访问共享内存段的进程返回不同的值

c - 在一个应用程序中注册回调以在另一个应用程序中检索

c++ - 列出 Windows 中已安装的程序

c - 如何使用 C 在 QT 应用程序中获取处理器制造商 ID

c++ - vector push_back 调用 copy_constructor 不止一次?

c++ - 在函数中获取原始类型的指针

c++ - 绕行并使用 _thiscall 作为 Hook (GCC 调用约定)

java - Firefox 未在 Windows 机器上的首选项中更新应用程序关联

java - 如何在 Windows 8 64 位上构建 Hadoop 2.7.0?