利用剪贴板来实现进程间的通信

2014年06月05日 3125点热度 0人点赞 0条评论

预览

利用剪贴板来实现进程间的通信

正文

下面我们来利用剪贴板来实现进程间的通信:

第一步:我们在资源中设置相关的对话框的控件

第二步:我们来编写发送端程序

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);                   //将我们的cstring对象的数据拷贝到我们的内存中
        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();                   //关闭剪贴板
        }
    }
}

Sollyu

保持饥渴的专注,追求最佳的品质