Jak skopiować tekst ze schowka do zmiennej

0

Witam.
W schowku mam pewien tekst około 80 znaków. Chcę aby ten tekst wylądował w zmiennej np. string. Jak takie cos zrobić?

1

Kod trochę dziwny, ale działa http://www.cplusplus.com/forum/general/48837/#msg266980
Edit: ogarnąłem go, dla potomnych:

#include <windows.h>
#include <iostream>
#include <string>
using namespace std;

void toClipboard(HWND hwnd, const string &s)
{
	OpenClipboard(hwnd);
	EmptyClipboard();
	HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, s.size()+1);
	if (!hg)
    {
		CloseClipboard();
		return;
	}
	memcpy(GlobalLock(hg), s.c_str(), s.size()+1);
	GlobalUnlock(hg);
	SetClipboardData(CF_TEXT, hg);
	CloseClipboard();
	GlobalFree(hg);
}

int main ()
{
	string s;
	getline(cin, s);
	toClipboard(GetDesktopWindow(), s);
}
1

Kiedyś testując parę funkcji z WinApi napisałem taki kod:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

char * getClipboardText()
{
    HANDLE content = NULL;
    char * str = NULL;
    if(!OpenClipboard(NULL))
        return NULL;
    content = GetClipboardData(CF_TEXT);
    str = malloc(strlen(content) + 1);
    if(NULL == str)
    {
        CloseClipboard();
        return NULL;
    }
    strcpy(str, content);
    CloseClipboard();
    return str;
}

int main()
{
    char * str = NULL;
    puts(str = getClipboardText());
    if(NULL == str)
        puts("getClipboardText() error!");
    else
        free(str);
    return 0;
} 

Na Windows powinno zadziałać. Na innych OS niestety nie wiem, jak pracować ze schowkiem. :)

1
std::string GetClipboardText()
{
	std::string result;
#ifdef _WIN32
	if(OpenClipboard(NULL))
	{
		HANDLE data = GetClipboardData(CF_TEXT);
		if(data)
		{
			result = reinterpret_cast<char *>(GlobalLock(data));
			GlobalUnlock(data);
		}
		CloseClipboard();
	}
#endif
	return result;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1