發送端代碼:
HWND hwnd = ::FindWindow(NULL,TEXT("接收端窗口名"));
if(hwnd == NULL)
{
MessageBox(0,TEXT("沒找到窗口"),TEXT("ERROR"),MB_OK);
}
else
{
// 發送消息
//SendMessage(hwnd,WM_USER+0x1,NULL, (LPARAM)100);
PostMessage(hwnd,WM_USER+0x1, NULL, (LPARAM)100);
}
接收端代碼:
switch(uMsg)
{
case WM_CLOSE:
{
EndDialog(hDlg,0);
break;
}
case WM_USER+0x1:
{
DWORD x = wParam;
DWORD y = lParam;
MessageBox(0,0,0,0);
break;
}
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDC_BUTTON_RECV:
{
return TRUE;
}
}
break ;
}
//////////////////////////////////////////////////////////////////////////////
共享內存
發送端代碼:
HANDLE hMapObject;
HANDLE hMapView;
//創建FileMapping對象
hMapObject = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared"));
if(!hMapObject)
{
MessageBox(NULL,TEXT("共享內存失敗"),TEXT("Error"),MB_OK);
return FALSE;
}
//將FileMapping對象映射到自己的進程
hMapView = MapViewOfFile(hMapObject,FILE_MAP_WRITE,0,0,0);
if(!hMapView)
{
MessageBox(NULL,TEXT("內存映射失敗"),TEXT("Error"),MB_OK);
return FALSE;
}
//向共享內存寫入數據
strcpy((char*)hMapView,"Test Shared Memery");
接收端代碼:
HANDLE hMapObject;
HANDLE hMapView;
//創建FileMapping對象
hMapObject = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared"));
if(!hMapObject)
{
MessageBox(NULL,TEXT("共享內存失敗"),TEXT("Error"),MB_OK);
return FALSE;
}
//將FileMapping對象映射到自己的進程
hMapView = MapViewOfFile(hMapObject,FILE_MAP_WRITE,0,0,0);
if(!hMapView)
{
MessageBox(NULL,TEXT("內存映射失敗"),TEXT("Error"),MB_OK);
return FALSE;
}
//從共享內存讀取數據
TCHAR szBuffer[0x1000] = {0};
memcpy(szBuffer,hMapView,10);
////////////////////////////////////////////////////////////////////////////////
匿名管道:
父進程:
HANDLE hRead;
HANDLE hWrite;
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox(0,TEXT("創建匿名管道失敗!"),TEXT("Error"),MB_OK);
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = hRead;
si.hStdOutput = hWrite;
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess("E:\\Project\\zzzzzzz\\Debug\\zzzzzzz.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead = NULL;
hWrite = NULL;
MessageBox(0,TEXT("創建子進程失敗!"),TEXT("Error"),MB_OK);
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
//寫數據
TCHAR szBuffer[] = "http:\\www.dtdebug.com";
DWORD dwWrite;
if(!WriteFile(hWrite,szBuffer,strlen(szBuffer)+1,&dwWrite,NULL))
{
MessageBox(0,TEXT("寫數據失敗!"),TEXT("Error"),MB_OK);
}
//讀數據
TCHAR szBuffer[100];
DWORD dwRead;
if(!ReadFile(hRead,szBuffer,100,&dwRead,NULL))
{
MessageBox(NULL,TEXT("讀取數據失敗!"),TEXT("Error"),MB_OK);
}
else
{
MessageBox(NULL,szBuffer,TEXT("[讀取數據]"),MB_OK);
}
子進程:
//初始化
HANDLE hRead = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hWrite = GetStdHandle(STD_OUTPUT_HANDLE);
//讀數據
TCHAR szBuffer[100];
DWORD dwRead;
if(!ReadFile(hRead,szBuffer,100,&dwRead,NULL))
{
MessageBox(NULL,TEXT("讀取數據失敗!"),TEXT("Error"),MB_OK);
}
else
{
MessageBox(NULL,szBuffer,TEXT("[讀取數據]"),MB_OK);
}
//寫數據
TCHAR szBuffer[100] = "匿名管道";
DWORD dwWrite;
if(!WriteFile(hWrite,szBuffer,strlen(szBuffer)+1,&dwWrite,NULL))
{
MessageBox(NULL,TEXT("寫入數據失敗!"),TEXT("Error"),MB_OK);
}