前言:
本文目前仅限于获取和设置剪贴板的文本内容,还未涉及到图片等资源;
示例:
一:设置剪贴板文本内容(支持一般符号,特殊符号未测试)
bool SetClipBoardText(LPCSTR text,HWND hWnd)
{
ASSERT(hWnd);
//打开剪贴板
if ( !::OpenClipboard(hWnd) )
return false;
//如果剪贴板有内容则关闭剪贴板
if ( !EmptyClipboard() )
{
CloseClipboard();
return false;
}
//获取需要设置文本的长度
int len=strlen(text);
//申请剪贴板空间
HANDLE hClip=GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,(len+1)*sizeof(char*));
if (hClip==NULL)
{
CloseClipboard();
return false;
}
//给申请的空间加锁
char* pBuf=(char*)GlobalLock(hClip);
if (pBuf==NULL)
{
GlobalFree(hClip);
CloseClipboard();
return false;
}
//拷贝文本内容到剪贴板
memcpy((char *)pBuf,text,len*sizeof(char*));
pBuf[len]=NULL;
//操作完成,释放锁
GlobalUnlock(hClip);
if (NULL==SetClipboardData(CF_TEXT,hClip))
{
GlobalFree(hClip);
CloseClipboard();
return false;
}
CloseClipboard();
return true;
}
二:获取剪贴板文本内容(这儿的std_string是通过string封装的,重载了 “=”号)
//获取剪贴板文本内容
std_string GetClipBoardText(HWND hWnd)
{
ASSERT(hWnd);
std_string ClipBoardText;
//判断剪贴板的数据格式是否可以处理。
if (!IsClipboardFormatAvailable(CF_TEXT))
return ClipBoardText;
//打开剪贴板。
if (!::OpenClipboard(hWnd))
return ClipBoardText;
//获取数据
HANDLE hMem = GetClipboardData(CF_TEXT);
if (hMem != NULL)
{
//获取字符串。
LPSTR lpStr = (LPSTR)GlobalLock(hMem);
if (lpStr != NULL)
{
ClipBoardText=lpStr;
//释放锁内存
GlobalUnlock(hMem);
}
}
//关闭剪贴板
CloseClipboard();
return ClipBoardText;
}
待续……