C/C++ windows 進程間通信

發送端代碼:							
							
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);									
}										

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章