2011-01-09 30 views
3

我一直在使用Windows剪贴板玩耍。我注意到,如果您提供格式,您只能查看剪贴板。我见过可以转储剪贴板原始内容的程序。看看http://www.autohotkey.com/docs/misc/Clipboard.htm#ClipboardAll就是我的意思。获取剪贴板中的数据在C++中

有没有办法做同样的事情,我想要做的是能够备份剪贴板,操作它,那么当我的程序完成恢复。

我正在寻找一个解决方案non-.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; 
} 

但问题是,世界上没有其他办法告诉剪贴板在每种格式下的大小如何

回答

4

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

如果你仔细阅读您链接的文档的AutoHotkey,它甚至会告诉你,这是单独检索每个格式,并且它可能只在检索的格式的子集成功。

+0

@ Dave18我粘贴了我到目前为止所尝试的内容,这是我的主要问题 – qwertymk 2011-01-09 04:12:23

2

MSDN拥有使用剪贴板API操作剪贴板数据时需要知道的所有示例。