一尘不染

如何在C中将字符串复制到剪贴板?

algorithm

该SetClipboardData功能需要HANDLE参考;我在转换要在函数中使用的字符串时遇到麻烦。

这是我的代码:

char* output = "Test";
HLOCAL hMem =  LocalAlloc( LHND,1024);
char* cptr = (char*) LocalLock(hMem);
memcpy( cptr, output, 500 );
SetClipboardData(CF_TEXT, hMem);
LocalUnlock( hMem );
LocalFree( hMem );
CloseClipboard();

我在这里做错什么,正确的做法是什么?

谢谢。


阅读 300

收藏
2020-07-28

共1个答案

一尘不染

阅读有关SetClipboardData函数的MSDN文档。看来您缺少一些步骤,过早地释放了内存。首先,必须先调用 OpenClipboard,然后才能使用SetClipboardData。其次,系统获取传递给剪贴板的内存的所有权,并且必须将其解锁。此外,内存必须是可移动的,这需要与GlobalAlloc(而不是LocalAlloc)一起使用的GMEM_MOVEABLE标志。

const char* output = "Test";
const size_t len = strlen(output) + 1;
HGLOBAL hMem =  GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
2020-07-28