VC++学习6:进程通信

本文深入探讨了VC++中的进程通信技术,包括剪贴板、匿名管道、命名管道和邮槽的使用。通过详细讲解函数接口和实例,阐述了各种通信方式的实现方法和应用场景。
摘要由CSDN通过智能技术生成

一 剪贴板
1 函数接口

// 打开剪贴板
BOOL OpenClipboard(
  HWND hWndNewOwner
); 
// 清空剪贴板
BOOL EmptyClipboard(void);
// 分配内存对象
int GlobalAlloc(int flags, int size);
// 加锁内存对象
LPVOID GlobalLock(int handle);
// 解锁内存对象
bool GlobalUnLock(int handle);
// 关闭剪贴板
BOOL CloseClipboard(void);
// 设置剪贴板数据
HANDLE SetClipboardData(
  UINT uFormat, 
  HANDLE hMem
); 
// 读取剪贴板数据
HANDLE GetClipboardData(
  UINT uFormat
); 

2 实例

// 往剪贴板,写数据;
void CClipboardDlg::OnBtnSend()
{
   
	// 打开剪贴板
	if(OpenClipboard())                  
	{
   
		CString str;
		GetDlgItem(IDC_EDIT_SEND, str); // 保存发送编辑框控件上的数据
		
		// 清空剪贴板
		EmptyClipboard();
		
		// 分配内存对象,并填充内存
		HANDLE hClip = GlobalAlloc(GMEM_MOVEABLE, str.GetLength() + 1);
		char * pBuf = (char *)GlobalLock(hClip);
		strcpy(pBuf, str);
		GlobalUnlock(hClip);
		
		// 设置剪贴板数据
		SetClipboardData(CF_TEXT, hClip);
		
		// 关闭剪贴板
		CloseClipboard();
	}
}

// 从剪贴板,读数据
void CClipboardDlg::OnBtnRecv()
{
   
	// 打开剪贴板
	if(OpenClipboard())
	{
   
		// 是否,有可读数据
		if(IsClipboardFormateAvailable(CF_TEXT)){
   
			// 读取剪贴板数据
			HANDLE hClip = GetClipboardData(CF_TEXT);
			char * pBuf = (char*)GlobalLock(hClip);
			GlobalUnlock(hClip);
			
			// 显示
			SetDlgItemText(IDC_EDIT_RECV, pBuf);
		}
		
		// 关闭剪贴板
		CloseClipboard();
	}
}

二 匿名管道
1 接口函数

// 创建管道
BOOL CreatePipe(
  PHANDLE               hReadPipe,
  PHANDLE               hWritePipe,
  LPSECURITY_ATTRIBUTES lpPipeAttributes,
  DWORD                 nSize
);
// 创建进程
BOOL CreateProcessA(
  LPCSTR                lpApplicationName,
  LPSTR                 lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL                  bInheritHandles,
  DWORD                 dwCreationFlags,
  LPVOID                lpEnvironment,
  LPCSTR                lpCurrentDirectory,
  LPSTARTUPINFOA        lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);
// 读数据
BOOL ReadFile(
  HANDLE       hFile,
  LPVOID       lpBuffer,
  DWORD        nNumberOfBytesToRead,
  LPDWORD      lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);
// 写数据
BOOL WriteFile(
  HANDLE       hFile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值