进程间通信-剪贴板 z


进程间通信的四种方式:

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"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app中,需要在manifest.json文件中设置剪贴板权限。具体步骤如下: 1. 打开manifest.json文件,找到“permission”字段,如果没有则需要手动添加。 2. 在“permission”字段中添加以下代码: ``` "clipboard": { "desc": "允许应用访问剪贴板" } ``` 3. 在需要使用剪贴板功能的页面中,可以通过uni.setClipboardData和uni.getClipboardData进行剪贴板的读写操作。 需要注意的是,如果应用需要在Android平台上使用剪贴板功能,还需要在AndroidManifest.xml文件中设置剪贴板权限。可以通过在App.vue文件中添加以下代码来自动设置: ``` <template> <div> <slot></slot> </div> </template> <script> export default { onLaunch: function() { #ifdef APP-PLUS plus.android.requestPermissions(["android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.CAMERA", "android.permission.RECORD_AUDIO", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_PHONE_STATE", "android.permission.CALL_PHONE", "android.permission.READ_CONTACTS", "android.permission.WRITE_CONTACTS", "android.permission.GET_ACCOUNTS", "android.permission.ACCESS_WIFI_STATE", "android.permission.CHANGE_WIFI_STATE", "android.permission.ACCESS_NETWORK_STATE", "android.permission.CHANGE_NETWORK_STATE", "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.REQUEST_INSTALL_PACKAGES", "android.permission.RECEIVE_BOOT_COMPLETED", "android.permission.WAKE_LOCK", "android.permission.VIBRATE", "android.permission.ACCESS_NOTIFICATION_POLICY", "android.permission.REQUEST_BACKGROUND_LOCATION", "android.permission.FOREGROUND_SERVICE", "android.permission.BLUETOOTH", "android.permission.BLUETOOTH_ADMIN", "android.permission.USE_FULL_SCREEN_INTENT"], function(e) { console.log("权限申请结果:" + JSON.stringify(e)); }); #endif } }; </script> ``` 以上代码会在应用启动时自动为应用申请所需的权限,其中包括剪贴板权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值