WinExec函數(shù)可以用來啟動一個新的進(jìn)程,但是不能用于實(shí)現(xiàn)進(jìn)程間通信。要實(shí)現(xiàn)進(jìn)程間通信,可以使用其他方法,比如使用消息隊列、共享內(nèi)存、管道或Socket等方式。以下是一個使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信的示例:
#include <iostream>
#include <windows.h>
int main() {
// 創(chuàng)建共享內(nèi)存
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // 使用頁面文件作為物理內(nèi)存
NULL, // 默認(rèn)安全級別
PAGE_READWRITE, // 可讀可寫
0, // 共享內(nèi)存大小
1024, // 共享內(nèi)存的名字
NULL);
if (hMapFile == NULL) {
std::cout << "Error creating file mapping. Error code: " << GetLastError() << std::endl;
return 1;
}
// 映射共享內(nèi)存
LPVOID lpMapAddress = MapViewOfFile(
hMapFile, // 共享內(nèi)存的句柄
FILE_MAP_ALL_ACCESS, // 讀寫權(quán)限
0,
0,
0);
if (lpMapAddress == NULL) {
std::cout << "Error mapping file. Error code: " << GetLastError() << std::endl;
CloseHandle(hMapFile);
return 1;
}
// 寫入數(shù)據(jù)到共享內(nèi)存
strcpy((char*)lpMapAddress, "Hello from Process A");
// 啟動另一個進(jìn)程
WinExec("ProcessB.exe", SW_SHOW);
// 等待另一個進(jìn)程讀取共享內(nèi)存中的數(shù)據(jù)
Sleep(2000);
// 釋放資源
UnmapViewOfFile(lpMapAddress);
CloseHandle(hMapFile);
return 0;
}
在上述示例中,我們在一個進(jìn)程中創(chuàng)建了一個共享內(nèi)存,寫入了一些數(shù)據(jù),并啟動了另一個進(jìn)程。另一個進(jìn)程可以通過打開同一個共享內(nèi)存并讀取其中的數(shù)據(jù)來實(shí)現(xiàn)進(jìn)程間通信。