进程间通信-剪贴板 z

本文介绍进程间通信中的剪贴板方式,包括发送端和接收端的实现原理及代码示例。发送端通过调用函数将数据放置于剪贴板内存区域,接收端再从中读取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


进程间通信的四种方式:

1).剪贴板

2).匿名管道

3).命名管道

4).邮槽

 

1.     剪贴板

  剪贴板实际是系统维护管理维护的一块特定的内存区域,当拷贝的时候是一个进程把数据放到这个内存中,粘贴时是把数据从中取出,可能传递到另外一个进程中去.

孙鑫课件中的代码片段.

发送端程序:

void CClipboardDlg::OnBtnSend()

{

       if(OpenClipboard()/*打开剪贴板*/)

       {

              CString str;

              HANDLE hClip;

              char *pBuf;

/*

只有调用了这个函数,才拥有剪贴板.它清空剪贴板,并且释放当前剪贴板中所有数据的句柄,将剪贴板的所有权,分配给当前打开剪贴板的窗口.剪贴板是所有程序都可以使用的.

*/

              EmptyClipboard();

              GetDlgItemText(IDC_EDIT_SEND,str);

/*

从堆上分配制定数目的字节,Win32中没有本地堆和全局堆,更常用heap functions.

如果第一个参数是GMEM_FIX,返回的值实际就是内存地址.

如果是GMEM_MOVEABLE,返回的不是实际内存的地址,而是一个指向进程中句柄表条目的指针,这个条目包含实际分配的内存的指针.

*/

              hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);

/*

从一个句柄得到一个指针,它同时堆内存块加锁,锁计数加1

*/

              pBuf=(char*)GlobalLock(hClip);

              strcpy(pBuf,str);

              GlobalUnlock(hClip);

/*

SetClipboardData向剪贴板中输入数据,

*/

              SetClipboardData(CF_TEXT,hClip);

              CloseClipboard();/*释放剪贴板,很重要!!*/

       }

}

 

接受端程序:

void CClipboardDlg::OnBtnRecv()

{

       if(OpenClipboard())

       {

/*

通过CF_TEXT等保留字,判断现在剪贴板上是否有你想要的数据

*/

              if(IsClipboardFormatAvailable(CF_TEXT))

              {

                     HANDLE hClip;

                     char *pBuf;

/*

注意,不能再EmptyClipboard(),因为要从剪贴板上获得内容

*/

                     hClip=GetClipboardData(CF_TEXT);

                     pBuf=(char*)GlobalLock(hClip);

                     GlobalUnlock(hClip);

                     SetDlgItemText(IDC_EDIT_RECV,pBuf);

                     CloseClipboard();

              }

       }

}


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值