qwe*_*ymk 4 c c++ clipboard winapi
我一直在玩Windows剪贴板。我注意到,如果您提供格式,则只能查看剪贴板。我见过可以转储剪贴板原始内容的程序。请参阅http://www.autohotkey.com/docs/misc/Clipboard.htm#ClipboardAll作为我的意思的示例。
有没有办法做类似的事情,我想做的是能够备份剪贴板,操作它,然后在我的程序完成时恢复它。
我正在寻找一个非.net 解决方案(如果这确实是一件事)
编辑:
到目前为止我尝试过:
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;
}
Run Code Online (Sandbox Code Playgroud)
但问题是没有办法知道每种格式的剪贴板有多大
不涉及“原始”数据。只需枚举当前剪贴板上的所有格式,然后获取并保存每种格式的内容即可。但要小心自动格式转换。
如果您仔细阅读链接的自动热键文档,它甚至会告诉您它正在单独检索每种格式,并且它可能只能成功检索格式的子集。