windows进程间通讯的几个方式

ClipeBoard

void CClipboardDlg::OnBtnSend() 
{
	// TODO: Add your control notification handler code here
	if(OpenClipboard())
	{
		CString str;
		HANDLE hClip;
		char *pBuf;
		EmptyClipboard();
		GetDlgItemText(IDC_EDIT_SEND,str);
		hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
		pBuf=(char*)GlobalLock(hClip);
		strcpy(pBuf,str);
		GlobalUnlock(hClip);
		SetClipboardData(CF_TEXT,hClip);
		CloseClipboard();
	}	
}

void CClipboardDlg::OnBtnRecv() 
{
	// TODO: Add your control notification handler code here
	if(OpenClipboard())
	{
		if(IsClipboardFormatAvailable(CF_TEXT))
		{
			HANDLE hClip;
			char *pBuf;
			hClip=GetClipboardData(CF_TEXT);
			pBuf=(char*)GlobalLock(hClip);
			GlobalUnlock(hClip);
			SetDlgItemText(IDC_EDIT_RECV,pBuf);
		}
		CloseClipboard();
	}	
}

anoumous pipe

匿名管道:
单向  父进程和子进程 未命名 只能用于本机进程间通讯,不能用于跨越网络的通信
parent:
	SECURITY_ATTRIBUTES sa;
	sa.bInheritHandle=TRUE;
	sa.lpSecurityDescriptor=NULL;
	sa.nLength=sizeof(SECURITY_ATTRIBUTES);
	if(!CreatePipe(&hRead,&hWrite,&sa,0))
	{
		MessageBox("′′?¨????1üμà꧰ü£?");
		return;
	}
	STARTUPINFO sui;
	PROCESS_INFORMATION pi;
	ZeroMemory(&sui,sizeof(STARTUPINFO));
	sui.cb=sizeof(STARTUPINFO);
	sui.dwFlags=STARTF_USESTDHANDLES;
	sui.hStdInput=hRead;
	sui.hStdOutput=hWrite;
	sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
	
	if(!CreateProcess("..\\Child\\Debug\\Child.exe",NULL,NULL,NULL,
			TRUE,0,NULL,NULL,&sui,π))
	{
		CloseHandle(hRead);
		CloseHandle(hWrite);
		hRead=NULL;
		hWrite=NULL;
		MessageBox("′′?¨×ó??3ì꧰ü£?");
		return;
	}
	else
	{
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);
	}	
	
子进程
hRead=GetStdHandle(STD_INPUT_HANDLE);
hWrite=GetStdHandle(STD_OUTPUT_HANDLE);

void CChildView::OnPipeRead() 
{
	// TODO: Add your command handler code here
	char buf[100];
	DWORD dwRead;
	if(!ReadFile(hRead,buf,100,&dwRead,NULL))
	{
		MessageBox("?áè?êy?Y꧰ü£?");
		return;
	}
	MessageBox(buf);
}

void CChildView::OnPipeWrite() 
{
	// TODO: Add your command handler code here
	char buf[]="????1üμà2aê?3ìDò";
	DWORD dwWrite;
	if(!WriteFile(hWrite,buf,strlen(buf)+1,&dwWrite,NULL))
	{
		MessageBox("D′è?êy?Y꧰ü£?");
		return;
	}	
}

/
命名管道  本机进程可通信,跨网络进程也可通信

void CNamedPipeSrvView::OnPipeCreate() 
{
	// TODO: Add your command handler code here
	hPipe=CreateNamedPipe("\\\\.\\pipe\\MyPipe",
		PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
		0,1,1024,1024,0,NULL);
	if(INVALID_HANDLE_VALUE==hPipe)
	{
		MessageBox("′′?¨?ü??1üμà꧰ü£?");
		hPipe=NULL;
		return;
	}
	HANDLE hEvent;
	hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
	if(!hEvent)
	{
		MessageBox("′′?¨ê??t???ó꧰ü£?");
		CloseHandle(hPipe);
		hPipe=NULL;
		return;
	}
	OVERLAPPED ovlap;
	ZeroMemory(&ovlap,sizeof(OVERLAPPED));
	ovlap.hEvent=hEvent;
	if(!ConnectNamedPipe(hPipe,&ovlap))
	{
		if(ERROR_IO_PENDING!=GetLastError())
		{
			MessageBox("μè′y?í?§??á??ó꧰ü£?");
			CloseHandle(hPipe);
			CloseHandle(hEvent);
			hPipe=NULL;
			return;
		}
	}
	if(WAIT_FAILED==WaitForSingleObject(hEvent,INFINITE))
	{
		MessageBox("μè′y???ó꧰ü£?");
		CloseHandle(hPipe);
		CloseHandle(hEvent);
		hPipe=NULL;
		return;
	}
	CloseHandle(hEvent);	
}

void CNamedPipeSrvView::OnPipeRead() 
{
	// TODO: Add your command handler code here
	char buf[100];
	DWORD dwRead;
	if(!ReadFile(hPipe,buf,100,&dwRead,NULL))
	{
		MessageBox("?áè?êy?Y꧰ü£?");
		return;
	}
	MessageBox(buf);
	
}

void CNamedPipeSrvView::OnPipeWrite() 
{
	// TODO: Add your command handler code here
	char buf[]="http://www.sunxin.org";
	DWORD dwWrite;
	if(!WriteFile(hPipe,buf,strlen(buf)+1,&dwWrite,NULL))
	{
		MessageBox("D′è?êy?Y꧰ü£?");
		return;
	}
	
}


/
void CNamedPipeCltView::OnPipeConnect() 
{
	// TODO: Add your command handler code here
	if(!WaitNamedPipe("\\\\.\\pipe\\MyPipe",NMPWAIT_WAIT_FOREVER))
	{
		MessageBox("μ±?°??óD?éà?ó?μ??ü??1üμàêμày£?");
		return;
	}
	hPipe=CreateFile("\\\\.\\pipe\\MyPipe",GENERIC_READ | GENERIC_WRITE,
		0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if(INVALID_HANDLE_VALUE==hPipe)
	{
		MessageBox("′ò?a?ü??1üμà꧰ü£?");
		hPipe=NULL;
		return;
	}
	
}

void CNamedPipeCltView::OnPipeRead() 
{
	// TODO: Add your command handler code here
	char buf[100];
	DWORD dwRead;
	if(!ReadFile(hPipe,buf,100,&dwRead,NULL))
	{
		MessageBox("?áè?êy?Y꧰ü£?");
		return;
	}
	MessageBox(buf);	
}

void CNamedPipeCltView::OnPipeWrite() 
{
	// TODO: Add your command handler code here
	char buf[]="?ü??1üμà2aê?3ìDò";
	DWORD dwWrite;
	if(!WriteFile(hPipe,buf,strlen(buf)+1,&dwWrite,NULL))
	{
		MessageBox("D′è?êy?Y꧰ü£?");
		return;
	}	
}


WM_COPYDATA
适用情况:
窗口   sendmessage    数据中没有内嵌类
速度比共享内存慢---------需要拷贝
不能用postthreadMessage,postmessage
只能对窗口



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值