GetClipBoard数据是许多人获取剪贴板数据的常用功能,但是当您复制图像而不是文本时会出现问题。
HANDLE clip;
if (OpenClipboard(NULL)) {
clip = GetClipboardData(CF_TEXT);
CloseClipboard();
}
string text = (char*)clip;
cout << text;
这是我在某个地方下载的代码,它只是打印出用户在屏幕上复制到剪贴板的文本。但是如果复制了图像,它就会崩溃。也许有办法检查clip
是否为字符串?
答案 0 :(得分:0)
1)尝试将“}”向下移动两行,以避免因未初始化变量而导致:
HANDLE clip;
if (OpenClipboard(NULL)) {
clip = GetClipboardData(CF_TEXT);
CloseClipboard();
string text = (char*)clip; // still wrong line, read lower
cout << text;
}
2)将clip
投射到char*
是错误的。必须有提取文本的特殊功能(阅读Igor Tandetnik关于它的评论;我也建议你阅读关于“What happens if I call GlobalLock(), then fail to call GlobalUnlock()?”的问题的答案。
答案 1 :(得分:0)
您无法在不存在的格式上调用GetClipboardData。您需要首先找出存在哪些剪贴板格式,可能使用EnumClipboardFormats,然后检索(或跳过)数据,具体取决于您是否要处理它。 有时位图和文本将同时出现,在这种情况下,您可以调用GetClipboardData(CF_TEXT)并且没问题。其他时候,你不能。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms649038(v=vs.85).aspx