1.发送WM_COPYDATA消息:
个人目前认为最简单的方法 --获取对应顶级窗口名字和句柄 直接发送消息 ,对应接受端只需像处理其它消息那样处理WM_COPY DATA消息
HWND hWnd = ::FindWindowW(LPCWSTR(classname),LPCWSTR(windowname)); //找句柄
::SendMessageW(hWnd, WM_COPYDATA,NULL, (LPARAM)&cpd); //发送窗口消息
//接受 由于我是Qt客户端 直接用窗口nativeEvent事件直接读取即可。
下面贴一个其他博客的一般接受===========
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
int main()
{
const char szDlgTitle[] = "RecvMessage";
HWND hSendWindow = GetConsoleWindow ();
if (hSendWindow == NULL)
return -1;
HWND hRecvWindow = FindWindow(NULL, szDlgTitle);
if (hRecvWindow == NULL)
return -1;
char szSendBuf[100];
time_t timenow;
COPYDATASTRUCT CopyData;
for (int i = 0; i < 10; i++)
{
time(&timenow);
sprintf(szSendBuf, "%s", ctime(&timenow));//注意,ctime()返回的字符串后面带了'\n'
CopyData.dwData = i;
CopyData.cbData = strlen(szSendBuf);
szSendBuf[CopyData.cbData - 1] = '\0';
CopyData.lpData = szSendBuf;
SendMessage(hRecvWindow, WM_COPYDATA, (WPARAM)hSendWindow, (LPARAM)&CopyData);
printf("%s\n", szSendBuf);
Sleep(1000);
}
return 0;
}
2.管道:
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存。Windows系统为这段共享的内存设计采用数据流I/0的方式来访问。由一个进程读、另一个进程写,类似于一个管道两端,因此这种进程间的通信方式称作“管道”。
管道分为匿名管道和命名管道。
匿名管道只能在父子进程间进行通信,不能在网络间通信,而且数据传输是单向的,只能一端写,另一端读。
命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读、一端写。
具体代码下面这篇大佬博客可以学下
https://www.cnblogs.com/mydomain/archive/2011/01/10/1931914.html
3.共享内存
最快的通信方式 写下Qt的QSharedMemory类的共享内存使用伪代码
//将该进程与共享内存段分离
sharedMemory.detach()
//将数据加载到共享内存中,需要加锁
4.tcp/ip通信