我有一个奇怪的问题,试图从剪贴板中读取我在Windows 8.1 64位上使用Visual Studio编写的C或C ++程序(我已尝试过2010年,2012年和2013年)。以下代码在Window 7 64位上正常工作,但在Windows 8.1上启动Web浏览器(任何一个)后无法从键盘读取:
char * ReadClipboard()
{
char * Result = 0;
if (OpenClipboard(NULL))
{
HANDLE ClipboardHandle = GetClipboardData(CF_TEXT);
if (ClipboardHandle)
{
char * Text = (char *)GlobalLock(ClipboardHandle);
if (Text)
{
size_t StringLength = strlen(Text);
Result = (char *)malloc(StringLength + 1);
strcpy(Result, Text);
}
GlobalUnlock(ClipboardHandle);
}
CloseClipboard();
}
return Result;
}
即使剪贴板上有数据,对GetClipboardData
的调用也会返回null。当在相同条件下执行以下java代码时,它会正确读取剪贴板:
String textData = (String) Toolkit.getDefaultToolkit().
getSystemClipboard()
.getData(DataFlavor.stringFlavor);
我也尝试使用具有相同结果的Ole剪贴板从C / C ++读取剪贴板 - 失败。在上面的代码中我有什么问题吗?其他人可以重现这个问题吗?