Форум программистов, компьютерный форум CyberForum.ru

Clipboard RusText - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
10.10.2009, 14:23     Clipboard RusText #1
Здравствуйте!

В общем пытаюсь загнать русский текст в буфер. Вот экспериментальный на половину рабочий код).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void SetClipboard(std::string Str)
{
  if(OpenClipboard(AppHandle))//открываем буфер обмена
  {
    HGLOBAL hgBuffer;
    char* chBuffer;
    EmptyClipboard(); //очищаем буфер
    hgBuffer= GlobalAlloc(GMEM_DDESHARE, Str.size()+1);//выделяем память
    chBuffer= (char*)GlobalLock(hgBuffer); //блокируем память
    strcpy(chBuffer, Str.c_str());
    GlobalUnlock(hgBuffer);//разблокируем память
    SetClipboardData(CF_TEXT, hgBuffer);//помещаем текст в буфер обмена
    CloseClipboard(); //закрываем буфер обмена
  }
}
После вот такого вызова
C++
1
SetClipboard("Русский текст English");
в буфере появляется вот такая кака.
Цитата Сообщение от Clipboard
Ðóññêèé òåêñò English
Вот я теперь думаю, как быть с русскими буквами?

PS: В настройках стоит "Use Multi-Byte Character Set".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2009, 14:23     Clipboard RusText
Посмотрите здесь:

C# Clipboard.SetDataObject
Тема на ClipBoard Delphi
C++ Builder Clipboard
C++ Clipboard (запись/чтение) массива структур
C++ старые данные в clipboard
RichTextBox and Clipboard Visual Basic
Windows XP Странности с clipboard
Класс Clipboard - ошибка «Requested Clipboard operation did not succeed» Visual Basic .NET
C++ Запись строки в буфер обмена clipboard
Delphi Работа с Clipboard
2 обьекта Clipboard C++ Qt
Ошибка при работе с Clipboard: "Сannot open clipboard. Отказано в доступе." Delphi WinAPI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,314
10.10.2009, 15:12     Clipboard RusText #2
Попробуй
C++
1
SetClipboard(_T("Русский текст English"));
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
10.10.2009, 16:01  [ТС]     Clipboard RusText #3
CheshireCat, тоже самое, ничего не изменилось(

Добавлено через 15 минут
Ура!!! Всё, разобрался. Надо было локаль установить. Вот рабочий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void SetClipboard(std::string Str)
{
  DWORD CodePage=0x419;
  if(OpenClipboard(AppHandle))//открываем буфер обмена
  {
    HGLOBAL hgBuffer=GlobalAlloc(GMEM_DDESHARE,Str.size()+1);//выделяем память
    char* chBuffer=(char*)GlobalLock(hgBuffer); //блокируем память
    strcpy(chBuffer,Str.c_str());
    EmptyClipboard(); //очищаем буфер
    HGLOBAL Data=GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE,4);  // Назначить кодовую страницу для буфера обмена
    char* DataPtr=(char*)GlobalLock(Data);
    memcpy(DataPtr,(const VOID*)&CodePage,4);
    GlobalUnlock(Data);
    SetClipboardData(CF_LOCALE,Data);
    GlobalUnlock(hgBuffer);//разблокируем память
    SetClipboardData(CF_TEXT, hgBuffer);//помещаем текст в буфер обмена
    //SetClipboardData(CF_LOCALE, (HANDLE)0x409);
    CloseClipboard(); //закрываем буфер обмена
  }
}
Идею потырил отсюда.
Yandex
Объявления
10.10.2009, 16:01     Clipboard RusText
Ответ Создать тему
Опции темы

Текущее время: 15:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru