Inspired by this bug report, I just wrote a small, quick and dirty utility to dump the current clipboard content on Windows. Windows development to me is still pretty much an uncharted territory, so even a utility as simple as this took me some time. Anyway, you can download the binary from here: clipdump.exe. Note that this is a console utility, so you need to run this from the console window.
Here is the source code.
#include <Windows.h> #include <cstdio> #include <cstdlib> #include <iostream> #include <vector> using namespace std; size_t char_per_line = 16; typedef vector<WORD> line_store_type; void dump_line(const line_store_type& line) { if (line.empty()) return; size_t fill_size = char_per_line - line.size(); line_store_type::const_iterator i = line.begin(), iend = line.end(); for (; i != iend; ++i) printf("%04X ", *i); while (fill_size--) cout << " "; cout << ' '; i = line.begin(); for (; i != iend; ++i) { WORD c = *i; if (32 <= c && c <= 126) // ASCII printable range cout << static_cast<char>(c); else // non-printable range cout << '.'; } cout << endl; } void dump_clip(HANDLE hdl) { if (!hdl) return; LPTSTR buf = static_cast<LPTSTR>(GlobalLock(hdl)); if (!buf) return; line_store_type line; line.reserve(char_per_line); for (size_t i = 0, n = GlobalSize(hdl); i < n; ++i) { line.push_back(buf[i]); if (line.size() == char_per_line) { dump_line(line); line.clear(); } } dump_line(line); GlobalUnlock(hdl); } int main() { if (!OpenClipboard(NULL)) return EXIT_FAILURE; UINT fmt = 0; for (fmt = EnumClipboardFormats(fmt); fmt; fmt = EnumClipboardFormats(fmt)) { char name[100]; int len = GetClipboardFormatName(fmt, name, 100); if (!len) continue; cout << "---" << endl; cout << "format code: " << fmt << endl; cout << "name: " << name << endl << endl; HANDLE hdl = GetClipboardData(fmt); dump_clip(hdl); } CloseClipboard(); return EXIT_SUCCESS; } |
It’s nothing sophisticated, and it could probably use more polishing and perhaps some GUI (since it’s a Windows app). But for now it serves the purpose for me.
Update:
Tor has submitted his version in the comment section. Much more sophisticated than mine (and it’s C not C++).