Text in die Zwischenablage kopieren
-
Um Text in die Zwischanablage zu kopieren benutze ich folgenden Funktion
boolean CopyTexttoClipboard(HWND hWnd, char *text){ HGLOBAL mem_block; LPVOID pointer; mem_block = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, strlen(text) + 1); if(!mem_block){ return FALSE; } pointer = GlobalLock(mem_block); if(!pointer){ GlobalFree(mem_block); return FALSE; } strcpy((LPSTR)pointer, text); if(!GlobalUnlock(mem_block)){ u_int error = GetLastError(); if((error != ERROR_NOT_LOCKED) && (error != 0)){ GlobalFree(mem_block); return FALSE; } } OpenClipboard(hWnd); EmptyClipboard(); SetClipboardData(CF_TEXT, mem_block); CloseClipboard(); // GlobalFree(mem_block); //diese Zeile bereitet Probleme return TRUE; }
Da ich der Annahme bin einen GlobalAlloc Aufruf muss ich auch wieder mit GlobalFree freigeben habe ich den Code eben wie oben dargestellt angewand nur die Auskommentierte Zeile war nicht auskommentiert. Leider musste ich feststellen, daß jeder 2te Aufruf der Funktion fehlschlug und kein Text in der Zwischenablage vorhaden war. Nach einiger Suche bin ich darauf gestossen die Zeile auszukommentieren und der Code funktioniert bei jedem Aufruf.
Mach ich das jetzt richtig, wenn nein, wie geht's den nun richtig?
-
http://msdn.microsoft.com/en-us/library/ms649051(VS.85).aspx
Das System verwaltet die Freigabe des Puffers.
-
Danke, habs dann auch in der MSDN entdeckt.