String in Zwischenspeicher für Copy/Paste
-
Hiho,
ich möchte einen string in ein Eingabefeld eintragen.
Als Beispiel: ein Eingabefeld auf einer Homepage.
Nun könnte ich den string Buchstabe für Buchstabe durchgehen und mit keybd_event das eintragen "simulieren". Das wird aber spätestens dann kompliziert, wenn der Buchstabe zB "æ" ist (da müsste man ja mit ALT+zahl arbeiten).
Gibt es eine Möglichkeit einen std::string in die Zwischenablage zu kopieren, sodass man ihn mit STRG+V einfügen kann?
-
stringy schrieb:
Gibt es eine Möglichkeit einen std::string in die Zwischenablage zu kopieren, sodass man ihn mit STRG+V einfügen kann?
das steht in der api-dokumentation deines betriebssystems.
-
Vielen Dank schonmal!
Ich habe jetzt folgende Funktion gefunden:
#include <windows.h> char * getStringFromClipboard() { int ok = OpenClipboard(NULL); char * cBuffer = NULL; if (!ok) return NULL; HANDLE hClipData = GetClipboardData( CF_TEXT ); cBuffer = (char*)GlobalLock( hClipData ); GlobalUnlock( hClipData ); CloseClipboard(); return cBuffer; }Damit kann ich schonmal auf die Zwischenablage zugreifen.
Ich habe in der msdn auch den Befehl SetClipboardData, also
HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);gefunden.
Allerdings kenne ich mich nicht gut mit der WinAPI aus und weis nicht, wie ich den String an die funktion übergeben kann.
Wie kann ich jetzt die Funktion von oben so umschreiben, dass mein String mit SetClipboardData in die Zwischenablage kopiert wird?
Mein Ansatz wäre, parallel zu der Funktion oben:void setStringInClipboard(const std::string& name) { int ok = OpenClipboard(NULL); char * cBuffer = NULL; if (!ok) return; //Umwandlung von std::string in HANDLE Objekt (?) CloseClipboard(); }
-
1. Falsches Forum, wir haben ein WinAPI Unterforum.
2. http://msdn.microsoft.com/en-us/library/ms649051(VS.85).aspx
Runterscrollen führt zu
3. http://msdn.microsoft.com/en-us/library/ms649016(VS.85).aspx
Einem Beispiel um mit dem Clipboard umzugehen.
4. Vielleicht noch zwei kleine C++ Hinweise:
http://www.cplusplus.com/reference/string/string/c_str.html
http://www.cplusplus.com/reference/string/string/data.htmlGrüssli
-
Danke für die Tipps!
ich habs jetzt so gelöst:
void SetClipboardText(const string& name) { int ok = OpenClipboard(NULL); if (!ok) return; const char* strData = name.c_str(); EmptyClipboard(); HGLOBAL hClipboardData; hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(strData)+1); char * pchData; pchData = (char*)GlobalLock(hClipboardData); strcpy(pchData, LPCSTR(strData)); GlobalUnlock(hClipboardData); SetClipboardData(CF_TEXT,hClipboardData); CloseClipboard(); }