Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставить текст в поле, имитируя пользователя 
V
    Опции темы
KaraKum
  Дата 20.2.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Доброе время суток. Нужно программно вствить в поле ввода текста текст так, будто его напечатал пользователь. Понимаю, что сначала нужно сымитировать клик мыши по полю текста, чтобы сделать его активным, но как вставить текст из буфера обмена?

Это сообщение отредактировал(а) KaraKum - 20.2.2008, 08:59
PM MAIL WWW   Вверх
BorisVorontsov
Дата 20.2.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Посимвольно засылать текст, посредством WM_CHAR (WM_KEYDOWN).


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
KaraKum
  Дата 20.2.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



А из буфера обмена нельзя его вставить? Текст большого размера - придётся каждый символ имитировать?
PM MAIL WWW   Вверх
586
Дата 20.2.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(KaraKum @  20.2.2008,  11:24 Найти цитируемый пост)
А из буфера обмена нельзя его вставить

Можно. Используй сообщение WM_PASTE.
PM   Вверх
BorisVorontsov
Дата 22.2.2008, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Цитата(KaraKum @  20.2.2008,  11:24 Найти цитируемый пост)
А из буфера обмена нельзя его вставить?

Эм. Ты уж определись с задачей, так как вставка из буфера не то же самое, что и 
Цитата(KaraKum @  20.2.2008,  08:58 Найти цитируемый пост)
так, будто его напечатал пользовател




--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
KaraKum
  Дата 14.3.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(586 @ 20.2.2008,  11:48)
Цитата(KaraKum @  20.2.2008,  11:24 Найти цитируемый пост)
А из буфера обмена нельзя его вставить

Можно. Используй сообщение WM_PASTE.

Тогда, как я понимаю, придётся узнавать имя окна, в которое нужно вставить текст, но окна планируется открывать динамически. И неужели нет функции, которая вставляет данные из буфера обмена в активное окно? Ведь в ходе программы подразумевается, что окно, в которое нужно вставить текст, уже активно.
PM MAIL WWW   Вверх
korian
Дата 14.3.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 4
Всего: 17



KaraKum, 
сымитуруйте нажатие ctrl+v  smile 
http://forum.vingrad.ru/forum/topic-200113.html
PM   Вверх
KaraKum
Дата 14.3.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(korian @ 14.3.2008,  21:20)
KaraKum, 
сымитуруйте нажатие ctrl+v  smile 
http://forum.vingrad.ru/forum/topic-200113.html

Готово  smile .
Код

keybd_event(0x11, 0, 0, 0);
keybd_event(0x56, 0, 0, 0);
keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0);
keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0);

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.