写入、获取系统剪帖板中的文本数据

程序截图如下:



主要代码如下:

// 往剪贴板写入数据函数
bool WriteDataToClipboard(CString data)
{
	if (::OpenClipboard(AfxGetMainWnd()->m_hWnd))//打开剪贴板  
    { 

		  
		 

		//清空剪贴板 
		EmptyClipboard(); 
  
		//开辟内存空间  
		HANDLE hClip=GlobalAlloc(GMEM_MOVEABLE,data.GetLength()+1);  

		//获取以上所开辟的内存空间的地址,并锁定它
		char* pBuf=(char*)GlobalLock(hClip); 
		
		//将数据复制到以上所开辟的内存空间中
		strcpy(pBuf,data);  

		//解锁刚才开辟的内存空间
		GlobalUnlock(hClip); 
		
		//设置复制到剪帖板中的数据的格式
		SetClipboardData(CF_TEXT,hClip);  

		//关闭剪贴板  
		CloseClipboard(); 
		
		return true;
    } 	

	return false;
}



// 从剪贴板获取数据函数
CString  GetDataFromClipboard(CString data)
{
	if (OpenClipboard(AfxGetMainWnd()->m_hWnd))						//打开剪贴板  
    {  
		if (IsClipboardFormatAvailable(CF_TEXT))					//判断格式是否是文本数据  
		{  
		 		  
			//读取数据  
			HANDLE hClip=GetClipboardData(CF_TEXT);  
			char* pBuf=(char*)GlobalLock(hClip);  
			GlobalUnlock(hClip); 
			
			//关闭剪帖板
			CloseClipboard(); 

			//返回获取后的数据
			CString data="";
			data.Format("%s",pBuf);
			return data;
		}
	}

	return "NULL";
}

工程是Unicode编码时,请参考以下代码:
来源地址:http://topic.csdn.net/u/20100526/16/be885a28-fca7-48bf-97d2-21751d8f20e8.html?1689013075
               //清空剪切板原有数据
		if(!EmptyClipboard()) return;
		CString str;
		GetDlgItem(IDC_EDIT2)->GetWindowText(str);
		HANDLE hClip=GlobalAlloc(GMEM_MOVEABLE,(str.GetLength()+1)*2);
		WCHAR* pBuf=(WCHAR*)GlobalLock(hClip);
		wcscpy(pBuf,str.GetBuffer());
                 str.ReleaseBuffer();
		GlobalUnlock(hClip);
		SetClipboardData(CF_UNICODETEXT,hClip);
		CloseClipboard();



posted @ 2012-05-03 22:25  氺〤魚Oo。  阅读(281)  评论(0编辑  收藏  举报