在c ++中以原始格式获取剪贴板数据

时间:2011-01-09 03:45:52

标签: c++ c winapi clipboard

我一直在玩Windows剪贴板。我注意到,如果您提供格式,则只能查看剪贴板。我见过程序可以转储剪贴板的原始内容。请查看http://www.autohotkey.com/docs/misc/Clipboard.htm#ClipboardAll,了解我的意思。

有没有办法做类似的事情,我想做的是能够备份剪贴板,操纵它,然后在程序完成后恢复它。

我正在寻找一个非网络解决方案,如果这实际上是一件事

编辑:

到目前为止我试过这个:

struct clipData {
 vector<void*> data;
 vector<int> size;
};

struct clipData saveClipboard(int &size) {
 clipData ret;
 UINT currentFormat = 0;
 HGLOBAL hData;
 if (OpenClipboard(0)) {

  while(currentFormat = EnumClipboardFormats(currentFormat)) {
   hData = GetClipboardData(currentFormat);
   int currentClipboardFormatSize = GlobalSize(hData); //Only works with text formats. Help!
   char *savedClipboardData = new char[currentClipboardFormatSize];
   char *ptrToData = (char*) GlobalLock(hData);
   memcpy(savedClipboardData, ptrToData, currentClipboardFormatSize);
   ret.data.push_back(savedClipboardData);
   ret.size.push_back(currentClipboardFormatSize);
   }
  CloseClipboard();
 }
 return ret;
}

但问题是没有办法说出每种格式的剪贴板有多大

2 个答案:

答案 0 :(得分:4)

没有涉及“原始”数据。只需enumerate all the formats currently on the clipboard,即可获取并保存每种格式的内容。但要注意自动格式转换。

如果您仔细阅读了链接的autohotkey文档,它甚至会告诉您它正在单独检索每种格式,并且它只能成功检索格式的子集。

答案 1 :(得分:2)

MSDN包含使用Clipboard API操作剪贴板数据时需要了解的所有示例。