|
|
#include <windows.h>
#include <stdio.h>
char achLine[17];
void Dump( PBYTE pb, DWORD cb ) { DWORD i, j;
for( i = 0; i < cb; i += 16 ) { printf( "%04X ", (int)i ); FillMemory( achLine, sizeof(achLine), 0);
for( j = 0; j < 16; j++ ) { BYTE b;
if (i+j >= cb) { break; } printf( "%02X ", (b = pb[i+j]) ); achLine[j] = b >= ' ' ? b : '.'; }
achLine[j] = '\0'; printf( " #%s#\n", achLine );
}
}
TCHAR gszName[MAX_PATH];
LPTSTR MakeCFFmtName( UINT i ) {
switch( i ) { case CF_TEXT: lstrcpy( gszName, "CF_TEXT"); break; case CF_BITMAP: lstrcpy( gszName, "CF_BITMAP"); break; case CF_METAFILEPICT: lstrcpy( gszName, "CF_METAFILEPICT"); break; case CF_SYLK: lstrcpy( gszName, "CF_SYLK"); break; case CF_DIF: lstrcpy( gszName, "CF_DIF"); break; case CF_TIFF: lstrcpy( gszName, "CF_TIFF"); break; case CF_OEMTEXT: lstrcpy( gszName, "CF_OEMTEXT"); break; case CF_DIB: lstrcpy( gszName, "CF_DIB"); break; case CF_PALETTE: lstrcpy( gszName, "CF_PALETTE"); break; case CF_PENDATA: lstrcpy( gszName, "CF_PENDATA"); break; case CF_RIFF: lstrcpy( gszName, "CF_RIFF"); break; case CF_WAVE: lstrcpy( gszName, "CF_WAVE"); break; case CF_UNICODETEXT: lstrcpy( gszName, "CF_UNICODETEXT"); break; case CF_ENHMETAFILE: lstrcpy( gszName, "CF_ENHMETAFILE"); break; case CF_HDROP: lstrcpy( gszName, "CF_HDROP"); break; case CF_LOCALE: lstrcpy( gszName, "CF_LOCALE"); break; case CF_MAX: lstrcpy( gszName, "CF_MAX"); break; case CF_OWNERDISPLAY: lstrcpy( gszName, "CF_OWNERDISPLAY"); break; case CF_DSPTEXT: lstrcpy( gszName, "CF_DSPTEXT"); break; case CF_DSPBITMAP: lstrcpy( gszName, "CF_DSPBITMAP"); break; case CF_DSPMETAFILEPICT:lstrcpy( gszName, "CF_DSPMETAFILEPICT"); break; case CF_DSPENHMETAFILE: lstrcpy( gszName, "CF_DSPENHMETAFILE"); break;
default: gszName[0] = TEXT('\0'); GetClipboardFormatName(i, gszName, sizeof(gszName) / sizeof(TCHAR)); break; }
return gszName; }
void __cdecl main( int cArgs, char **szArg ) { UINT iCF = 0; UINT iRet = 0; LPTSTR szName;
if( cArgs > 1 && ( (*szArg[1] == '-' || *szArg[1] == '/') && (szArg[1][1] == '?' || lstrcmpi(&(szArg[1][1]), "help") == 0) ) ) { fprintf( stderr, "usage: dumpclip [\"clipboard format\"]\n" ); ExitProcess((DWORD)-1); }
OpenClipboard(NULL);
for( iCF = EnumClipboardFormats( 0 ); iCF != 0; iCF = EnumClipboardFormats( iCF ) ) { HANDLE hClipData; PVOID pData;
szName = MakeCFFmtName(iCF);
if (cArgs == 1 || lstrcmpi(szArg[1], szName) == 0 ) {
hClipData = GetClipboardData(iCF);
pData = GlobalLock(hClipData);
printf( "\n%s format:\n", szName ); Dump( pData, (DWORD)GlobalSize(hClipData) );
GlobalUnlock(hClipData); printf( "\n" ); } }
CloseClipboard();
ExitProcess(iRet); }
|