我一直在玩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;
}
但问题是没有办法说出每种格式的剪贴板有多大
答案 0 :(得分:4)
没有涉及“原始”数据。只需enumerate all the formats currently on the clipboard,即可获取并保存每种格式的内容。但要注意自动格式转换。
如果您仔细阅读了链接的autohotkey文档,它甚至会告诉您它正在单独检索每种格式,并且它只能成功检索格式的子集。
答案 1 :(得分:2)
MSDN包含使用Clipboard API操作剪贴板数据时需要了解的所有示例。