(本来就能)跨进程的剪切板

来源:互联网 发布:mac照片薄怎么删除 编辑:程序博客网 时间:2024/04/29 17:59

<span style="font-size:14px;">void CMy0629ADlg::OnBnClickedButton1()//复制进剪切{// TODO: Add your control notification handler code hereif(<strong><span style="color:#cc33cc;">this->OpenClipboard()</span></strong>)//打开剪切板 {CString str;<span style="white-space:pre"></span>//HANDLE hClip;<span style="white-space:pre"></span>//保存::GlobalAlloc函数分配的内存对象的句柄char* pBuf;<span style="white-space:pre"></span>//保存::GlobalLock函数返回的地址::EmptyClipboard();<span style="white-space:pre"></span>//清空剪切板 释放剪切板上数据的句柄<strong>(实验证明此行代码没用)</strong><span style="white-space:pre"></span>//并将剪切板所有权分配给当前窗口this->GetDlgItemTextA(IDC_EDIT1,str);hClip=::GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//分配内存对象pBuf=(char*)::GlobalLock(hClip);//<strong><span style="color:#cc0000;">句柄转void*再强转char*</span></strong>strcpy(pBuf,str);<span style="white-space:pre"></span>//修改了pBufr 也就修改了hClip 因为他们是同一个地址::GlobalUnlock(hClip);//对该内存块解锁 <strong>(实验证明此行代码没用)<span style="color:#cc33cc;">::SetClipboardData(CF_TEXT,hClip);<span style="white-space:pre"></span></span></strong><span style="font-family: Arial, Helvetica, sans-serif;">//向剪切板放置数据<span style="white-space:pre"></span><strong><span style="color:#cc33cc;">核心代码</span></strong></span>//::SetClipboardData(CF_TEXT,NULL);<span style="white-space:pre"></span>//第二个参数<strong><span style="color:#cc0000;">如果为NULL</span></strong> 将会使用"<u><span style="color:#cc0000;">延迟提交技术</span></u>"</span>
<span style="font-size:14px;"><span style="white-space:pre"></span>//<u><span style="color:#cc0000;">当有别进程向剪切板要内容时,会向当前窗口发<span style="font-family: Arial, Helvetica, sans-serif;">WM_RENDERFORMAT消息</span></span></u>::CloseClipboard();<span style="white-space:pre"></span>//关闭剪切版如果不关 其他进程再无法打开剪切板}}</span>

<span style="font-size:14px;">void CMy0629ADlg::OnBnClickedButton2(){// TODO: Add your control notification handler code hereif(this->OpenClipboard())//打开剪切板 {if(::IsClipboardFormatAvailable(CF_TEXT)){HANDLE hClip;char* pBuf;hClip=::GetClipboardData(CF_TEXT);pBuf=(char*)::GlobalLock(hClip);::GlobalUnlock(hClip);this->SetDlgItemTextA(IDC_EDIT2,pBuf);}::CloseClipboard();}}</span>

<span style="font-size:14px;">BEGIN_MESSAGE_MAP(CMy0629ADlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CMy0629ADlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CMy0629ADlg::OnBnClickedButton2)<strong>ON_MESSAGE(WM_RENDERFORMAT, &CMy0629ADlg::OnRenderformat)</strong>END_MESSAGE_MAP()</span>

<span style="font-size:14px;">afx_msg LRESULT CMy0629ADlg::OnRenderformat(WPARAM wParam, LPARAM lParam){//::AfxMessageBox("进入OnRenderformat");HANDLE hClip;char* pBuf;CString str="此段字符串来自于延迟提交技术";hClip=::GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);pBuf=(char*)::GlobalLock(hClip);strcpy(pBuf,str);::SetClipboardData(CF_TEXT,hClip);return 0;}</span>


0 0
原创粉丝点击