Получение данных буфера обмена в необработанном формате на с ++ - PullRequest
3 голосов
/ 09 января 2011

Я играл с буфером обмена Windows.Я заметил, что вы можете просматривать буфер обмена, только если вы предоставите формат.Я видел программы, которые могут выгружать необработанное содержимое буфера обмена.Посмотрите на http://www.autohotkey.com/docs/misc/Clipboard.htm#ClipboardAll пример того, что я имею в виду.

Есть ли способ сделать что-то подобное, что я хочу сделать, это иметь возможность сделать резервную копию буфера обмена, манипулировать им, а затем восстановитьэто когда моя программа готова.

Я ищу решение, отличное от .NET, если это действительно вещь

РЕДАКТИРОВАТЬ:

Я пробовал это до сих пор:

struct clipData {
 vector<void*> data;
 vector<int> size;
};

struct clipData saveClipboard(int &size) {
 clipData ret;
 UINT currentFormat = 0;
 HGLOBAL hData;
 if (OpenClipboard(0)) {

  while(currentFormat = EnumClipboardFormats(currentFormat)) {
   hData = GetClipboardData(currentFormat);
   int currentClipboardFormatSize = GlobalSize(hData); //Only works with text formats. Help!
   char *savedClipboardData = new char[currentClipboardFormatSize];
   char *ptrToData = (char*) GlobalLock(hData);
   memcpy(savedClipboardData, ptrToData, currentClipboardFormatSize);
   ret.data.push_back(savedClipboardData);
   ret.size.push_back(currentClipboardFormatSize);
   }
  CloseClipboard();
 }
 return ret;
}

Но проблема в том, что невозможно определить, насколько большой буфер обмена в каждом формате

Ответы [ 2 ]

4 голосов
/ 09 января 2011

Там нет "сырых" данных.Просто перечислите все форматы, которые в данный момент находятся в буфере обмена , и извлеките и сохраните содержимое каждого формата.Но будьте осторожны с автоматическими преобразованиями форматов.

Если вы внимательно прочитали документацию по autohotkey, которую вы связали, он даже скажет вам, что он извлекает каждый формат отдельно и что он может только успешно извлечь подмножество форматов.1005 *

2 голосов
/ 09 января 2011

MSDN содержит все примеры, необходимые для работы с данными буфера обмена с помощью API буфера обмена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...