采用Qt框架开发的时候使用剪切板作为进程间的通信方式,本来以为没问题的。没想到在Win7的虚拟机下测试的时候发现Qt的剪切板操作不好用(Qt5.9.0)。没办法最终还是通过windowsAPI实现了剪切板的操作。下面介绍一下在windows下,剪切板的读写操作。
剪切板的写操作
bool SetTextToClipboard(QString inputContent)
{
//该方案只针对windows系统生效
#ifdef _WIN32
if(OpenClipboard(NULL))
{
string input_content_str = string(inputContent.toLocal8Bit());
EmptyClipboard();
HANDLE hClip;
//动态分配内存
hClip =GlobalAlloc(GMEM_MOVEABLE,input_content_str.length() + 1);
//锁住内存
GlobalLock(hClip);
char *pBuf = NULL;
pBuf = (char *)GlobalLock(hClip);
strcpy(pBuf,input_content_str.c_str());
//解锁内存
GlobalUnlock(hClip);
//放置数据的句柄
SetClipboardData(CF_TEXT,hClip);
//关闭剪贴板