将图像复制到剪贴板时,C ++ GetClipboardData崩溃

时间:2014-11-10 05:25:06

标签: visual-c++ copy clipboard

GetClipBoard数据是许多人获取剪贴板数据的常用功能,但是当您复制图像而不是文本时会出现问题。

HANDLE clip;
if (OpenClipboard(NULL)) {
        clip = GetClipboardData(CF_TEXT);
        CloseClipboard();
    }
string text = (char*)clip;
cout << text;

这是我在某个地方下载的代码,它只是打印出用户在屏幕上复制到剪贴板的文本。但是如果复制了图像,它就会崩溃。也许有办法检查clip是否为字符串?

2 个答案:

答案 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