*
Hmm ich habe das ganze mal folgendermassen umgeschrieben:
if (OpenClipboard(NULL) == 0)
printf("\n open cl failed!");
int cf = 0;
cf = CountClipboardFormats();
int f;
HGLOBAL data[100];
UINT fs[100];
memset(data,0,sizeof(data));
memset(fs,0,sizeof(fs));
int i;
for ( i = 0; i < cf; ++i ) {
f = EnumClipboardFormats(f);
if (f != 0 && f== 49298 )
{
printf("\n format: %d \n",f);
printf("get data\n");
HGLOBAL hMem = GetClipboardData(f);
//GlobalLock(hMem);
if (hMem == NULL)
printf("\n hMem = NULL");
ULONG size = GlobalSize(hMem);
printf("\n Size: %d kb",size);
HGLOBAL bMem = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,size);
printf("\n %X %i",bMem,f);
CopyMemory(bMem, hMem, size );
//GlobalUnlock(bMem);
data[i] = bMem;
fs[i] = f;
}
}
EmptyClipboard();
Sleep(5000);
for ( int l = 0; l < i; ++l ){
if (data[l] != 0 && fs[l] != 0)
{
if (SetClipboardData(fs[l],data[l]) == NULL)
printf("\n setclipboard failed!");
char * formatname = (char*)malloc(256);
if ( GetClipboardFormatName(fs[l],formatname,256) == 0 ){
formatname = "Unbekannt";
printf("\n %s",formatname);
}
}
}
CloseClipboard();
Nur bei einer grossen Menge Daten (RTF) dauert GetClipboardData() einfach ewigs. Die Speicherauslastung bildet dann eine Zitterlinie und die CPU Auslastung ist 100%. Ich habe nach Informationen gesucht, jedoch nichts gefunden, wie man das Clipboard bei grossen Daten sinvoll und effizients nutzt. Zudem weiss ich nicht, wie genau zum Beispiel, Word zu Word die Daten über das Clipboard transferiert (Grosse Datenmengen funktionieren problemlos).
MfG Joe