【发布时间】:2013-03-12 13:40:55
【问题描述】:
请告诉我,为什么会出现这个问题:
如果剪贴板包含 unicode 字符(例如俄语),我只会得到第一个选定的单词。 “空格”字符之前的第一个单词。
如果剪贴板不包含 unicode 字符(仅限英文),我会得到所选文本的第一个字符。
获取选定的文本:
CStringA getClipboard()
{
CStringA strData;
if (OpenClipboard(NULL)){
HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
char *pchData = (char*)GlobalLock(hClipboardData);
strData = pchData;
GlobalUnlock(hClipboardData);
CloseClipboard();
}
return strData;
}
设置文字:
bool setClipboard(CStringA textToclipboard)
{
bool success = true;
if (OpenClipboard(NULL)){
EmptyClipboard();
HGLOBAL hClipboardData;
size_t size = (textToclipboard.GetLength()+1) * sizeof(TCHAR);
hClipboardData = GlobalAlloc(NULL, size);
TCHAR* pchData = (TCHAR*)GlobalLock(hClipboardData);
memcpy(pchData, LPCTSTR(textToclipboard.GetString()), size);
SetClipboardData(CF_UNICODETEXT, hClipboardData);
GlobalUnlock(hClipboardData);
CloseClipboard();
}
return success;
}
只需获取和设置剪贴板内容。
CStringA str = getClipboard();
setClipboard(str);
【问题讨论】:
-
CStringA 是一个 ANSI 字符串 - 对于 UNICODE,您需要 CStringW。
-
不工作。我得到符号 B5:AB 和奇怪的“角”
-
不是
CF_UNICODETEXTUTF-16,即标准的W格式字符串,这意味着对于标准ascii,你只会得到一个字符。