Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2007, 23:13   #1
Brother
 
Регистрация: 22.09.2007
Сообщений: 7
По умолчанию Заменить выделенный текст на свой в Блокноте

Приветствую, господа!

Сложилась такая проблема: как изменить текст в буфере, или - как извлечь его из буфера, а потом снова
вставить его в Блокнот.

Вопрос возник по следующей причине:
пытаюсь выделить текст в Блокноте и заменить выделенный текст на свой.

Т.е., например, в редакторе Блокнота напечатан текст:

Выделенный текст

Я нажимаю в своей проге на кнопку и данный текст в Блокноте заменяется на

Мой текст

Мои попытки свелись к следующему (в обработчике кнопки я написал):

Код:
//  ищу (открытый уже мной) Блокнот
HWND hWnd = FindWindow( "Notepad", 0 );
    if (hWnd) 
   {
       // ищу окно редактора Блокнота 
       hWnd = FindWindowEx( hWnd, 0, "Edit", 0 );
        // затем, выделеный текст	
        SendMessage( hWnd, EM_SETSEL, 5, 7 );
        // вырезаю	
        SendMessage( hWnd, WM_CUT, 0, 0 );

       // ... ??? изменяю текст	

        // затем измененный текст вставляю в буфер 	
        OpenClipboard( 0 );   
        // закрываю буфер  
        CloseClipboard();
        // Вставляю измененный текст в блокнот	 
        SendMessage( hWnd, WM_PASTE, 0, 0 );
  }
Что же нужно вставить (код, пожалуйста!!!) вместо "???"


Сильно благодарствую за помощь, друже!!

Последний раз редактировалось rpy3uH; 13.11.2007 в 19:47.
Brother вне форума Ответить с цитированием
Старый 13.11.2007, 09:08   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

а что SetWindowText & GetWindowText - отменили ?
BOBAH13 вне форума Ответить с цитированием
Старый 13.11.2007, 10:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SendMessage с параметром EM_GETSELTEXT Даст тебе выделенный текст, только выполнять это нужно до того как вырезал
Цитата:
а что SetWindowText & GetWindowText - отменили ?
А они что в Эдите работают?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2007, 11:37   #4
Brother
 
Регистрация: 22.09.2007
Сообщений: 7
По умолчанию

Почти уже сделал замену выделенного текста в редакторе.
Код размещу попозже.

Последний раз редактировалось Brother; 13.11.2007 в 14:24.
Brother вне форума Ответить с цитированием
Старый 13.11.2007, 13:25   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
SendMessage с параметром EM_GETSELTEXT Даст тебе выделенный текст, только выполнять это нужно до того как вырезал

Цитата:
а что SetWindowText & GetWindowText - отменили ?
А они что в Эдите работают?
А почему бы и нет Все контролы в винде - они ж тоже окна
пыщь

Последний раз редактировалось JTG; 13.11.2007 в 13:32.
JTG вне форума Ответить с цитированием
Старый 13.11.2007, 13:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну я вообще то думал про WM_COPYDATA...
Но и с Клипбоардом мона...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2007, 14:26   #7
Brother
 
Регистрация: 22.09.2007
Сообщений: 7
По умолчанию

Вот наконец дописал только что задачу про которую сам спрашивал
в этой теме - замена выделенного текста в эдиторе своим(Блокноте):

Код:
char* source;

      HWND hWnd = FindWindow( "Notepad", 0 );
  if (hWnd) {
      hWnd = FindWindowEx( hWnd, 0, "Edit", 0 );
      SendMessage( hWnd, EM_SETSEL, 0, 1000 );
      SendMessage( hWnd, WM_CUT, 0, 0 );

      char * buffer = NULL;
      if ( OpenClipboard(hWnd) )
      {
          HANDLE hData = GetClipboardData( CF_TEXT );
          char * buffer = (char*)GlobalLock( hData );
          GlobalUnlock( hData );
          CloseClipboard();
      }

      if(OpenClipboard(hWnd))
      {
	HGLOBAL clipbuffer;
	char * buffer;
	EmptyClipboard();
	clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(source)+1);
	buffer = (char*)GlobalLock(clipbuffer);
	strcpy(buffer, LPCSTR(source));
	GlobalUnlock(clipbuffer);
	SetClipboardData(CF_TEXT,clipbuffer);
        SendMessage(hWnd, WM_PASTE, 0, 1000 );
	CloseClipboard();
      }
  }

Последний раз редактировалось rpy3uH; 13.11.2007 в 19:50.
Brother вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как имея хендл на Memo получить выделенный в нем текст? hoza_syl Помощь студентам 2 23.05.2008 17:06
Выделенный текст в RichEdit Andr Компоненты Delphi 1 20.08.2007 20:53
Выделенный текст в другом приложении Nez Win Api 9 09.04.2007 01:52
найти выделенный текст в IWebBrowser kolli Компоненты Delphi 0 13.01.2007 17:53