Einfügen in Windows Zwischenablage
-
Guten morgen,
#include <windows.h> void copyToClipboard(const char *str) { if(!OpenClipboard(NULL)) return; EmptyClipboard(); HGLOBAL hClipboardData; hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(str)+1); char *pchData; pchData = (char*)GlobalLock(hClipboardData); strcpy(pchData, str); GlobalUnlock(hClipboardData); SetClipboardData(CF_TEXT, hClipboardData); CloseClipboard(); } int main() { copyToClipboard("Copy me to clipboard"); return 0; }Diesen Code hab ich aus der FAQ.
Ich frage mich ob der Code wirklich korrekt ist.
Auf http://msdn.microsoft.com/en-us/library/aa366574%28VS.85%29.aspx steht dazu:
The following values are obsolete, but are provided for compatibility with 16-bit Windows. They are ignored.
GMEM_DDESHARE
GMEM_DISCARDABLE
GMEM_LOWER
GMEM_NOCOMPACT
GMEM_NODISCARD
GMEM_NOT_BANKED
GMEM_NOTIFY
GMEM_SHAREIch störe mich daher an der Zeile:
GlobalAlloc(GMEM_DDESHARE, strlen(str)+1);Was bedeutet diese genau? Insb. mit der Option GMEM_DDESHARE?!
Und wenn GMEM_DDESHARE "veraltet/obsolete" ist und ignoriert wird.. was solllte man dann besser schreiben?Außerdem:
Speicher der mit "GlobalAlloc" allokiert wird, muss laut der MSDN Seite oben mit "GlobalFree" freigegeben werden. Fehlt das nicht auch?Und was mir noch auffällt:
Für was ist "pchData = (char*)GlobalLock(hClipboardData);"?
pchData wird danach nicht mehr verwendet. Übersehe ich etwas?Wäre super, wenn mir hier jemand beim code review weiterhelfen könnte

-
Die Antwort ist einfach: Mit Standard-C++ geht das nicht, weil Standard-C++ weder Windows noch die Zwischenablage kennt. -> falsches Forum, bitte zuerst die mit wichtig gekennzeichneten Threads lesen!
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.