Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161

Програмный ввод текста в другую программу

23.02.2012, 10:32. Показов 7535. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех с 23 февраля!!! Приветствую вас, я опять вернулся
Я работаю в C++ Builder 6. Я бы хотел бы узнать, как программно вводить текст. Например "абвгдйка". HWND окна уже уммею находить. Слышал о функции
C++
1
Send()
, но у меня не получалось её использовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2012, 10:32
Ответы с готовыми решениями:

Программный ввод текста в другую программу
Всем добрый вечер!!! Имеется программа, которая управляет остальными. Написал так, чтобы она открывала прогу по заданному пути и...

Передача текста на другую программу и +
Привет ребята, Нужно реализовать: Передача текста на другую программу и далее нажать в том же окне в кнопку.. делаю через handle...

Отправление текста в другую программу
Здравствуйте. Можно ли в C# отправить текст в другую программу, если другая программа является консольным. Помогите пожалуйста. Я даже...

30
 Аватар для cybersonner
98 / 49 / 4
Регистрация: 24.12.2011
Сообщений: 101
23.02.2012, 10:39
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hwnd=FindWindow("Notepad", NULL);
hwnd=FindWindowEx(hwnd, NULL, "Edit", NULL);
SendMessage(hwnd, EM_SETSEL, - 1, 0);
SendMessage(hwnd, EM_REPLACESEL, 1, (LPARAM)"я длинный текст, меня можно добавить");
}
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HANDLE hwnd=FindWindow("Notepad", NULL);
hwnd=FindWindowEx(hwnd, NULL, "Edit", NULL);
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)"я длинный текст, останусь только я");
}
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
HANDLE hwnd=FindWindow("Notepad", NULL);
hwnd=FindWindowEx(hwnd, NULL, "Edit", NULL);
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)"");//вроде как чистилка
}
1
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
23.02.2012, 12:12  [ТС]
А можно сделать чтобы отправлялось сообщение, которое считывается из Edit?

Добавлено через 1 час 12 минут
Программа в которой я собираюсь вводить текст (программно) не разрешает вводить текст из буфера обмена. Что делать в этом случае? Как ввести текст не из буфера обмена?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
23.02.2012, 23:35
причем тут буфер обмена?
текст из Edit
C++
1
Edit1->Text.c_str()
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
25.02.2012, 09:44  [ТС]
Я пытался так делать. В блокноте получается, а в той программе, в которую мне надо записать текст - нет.
Кстати в той проге нельзя вставлять текст из буфера обмена, она засчитывает только набор вручную с клавиатуры. Что делать?
Переформулирую вопрос: как мне программно нажать клавиши ввода текста на клаве?
Например, вот это слово ввести "привет", только клавишами.

Добавлено через 37 минут
И клавишами тож не получается.
Есть вариант туда текст вписать чтоб получилось?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
  HWND wnd, hwnd;
  wnd = FindWindow("Nksp", 0);
  hwnd = FindWindowEx(wnd, 0, "ViewPort Window", 0);
  if(hwnd > 0)
  {
  ShowMessage("Activated");
  PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, MapVirtualKey(VK_RETURN, 0) << 16 | 1);
  PostMessage(hwnd, WM_KEYUP, VK_RETURN, MapVirtualKey(VK_RETURN, 0) << 16 | 1 | 1 << 30 | 1 << 31);
 
  SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)"ÿ äëèííûé òåêñò, îñòàíóñü òîëüêî ÿ");
 
  PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, MapVirtualKey(VK_RETURN, 0) << 16 | 1);
  PostMessage(hwnd, WM_KEYUP, VK_RETURN, MapVirtualKey(VK_RETURN, 0) << 16 | 1 | 1 << 30 | 1 << 31);
такой вариант не катит, программа не воспринимает сообщения. она воспринимает только клавиши ENTER, а то что должно вводиться между ними нет
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 10:39  [ТС]
Как мне скопировать весь текст из memo1 и записать его в другую программу (HWND уже нашёл)?
Напишите код пожалуйста.
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
02.03.2012, 11:46
Все из Мемо1 в StringList:
C++
1
2
TStringList *temp1 = new TStringList;
temp1 = Memo1->Lines;
или добавить из Mемо1:
C++
1
temp1->Add->Memo1->Lines;//извини здесь я неуверен надо пробовать
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 12:35  [ТС]
спс, но мне нужно из memo1 скопировать текст в другую программу, и я не знаю как это осуществитьл
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 13:29
Дело еще может в том что неправильно определили HANDLE куда вводить текст, у самой программы то может быть много под-окон...
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
02.03.2012, 13:40
Цитата Сообщение от Клод Посмотреть сообщение
такой вариант не катит, программа не воспринимает сообщения. она воспринимает только клавиши ENTER, а то что должно вводиться между ними нет
Можно попробовать в цикле отсылать сообщения WM_KEYDOWN, WM_KEYUP для каждого символа в строке, раз уж программка воспринимает нажатия enter.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 13:47
Можно попробывать юзать keybd_event только надо перед этим активизировать необходимое окно
C++
1
2
3
4
5
void Press(char ch)
{
  keybd_event(ch, 0, 0, 0);
  keybd_event(ch, 0, KEYEVENTF_KEYUP,0);
}
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 20:54  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Можно попробовать в цикле отсылать сообщения WM_KEYDOWN, WM_KEYUP для каждого символа в строке, раз уж программка воспринимает нажатия enter.
А код можно, а то не совсем понятно как это будет выглядеть
хатя...
я понял вот так
C++
1
PostMessage(hwnd, WM_KEYDOWN, 0,  "я длинный текст, останусь только я");
и что-то мне говорит, что это неправильно

Добавлено через 21 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Дело еще может в том что неправильно определили HANDLE куда вводить текст, у самой программы то может быть много под-окон...
HANDLE окна верный, я так считаю потому, что сымитировал нажатие клавиши ENTER, которое и даёт допуск к строке ввода текстового сообщения, и оно дало доступ для ввода текста. В этом осечки быть не может.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Можно попробывать юзать keybd_event только надо перед этим активизировать необходимое окно
C++
1
2
3
4
5
void Press(char ch)
{
  keybd_event(ch, 0, 0, 0);
  keybd_event(ch, 0, KEYEVENTF_KEYUP,0);
}
C++
1
keybd_event
мне не подходит потому, что отправка текста должно принадлежать именно тому окну, на которое я "нацелился" HANDLE'ом
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 21:21
HANDLE окна верный, я так считаю потому, что сымитировал нажатие клавиши ENTER, которое и даёт допуск к строке ввода текстового сообщения, и оно дало доступ для ввода текста. В этом осечки быть не может.
Я бы проверил специальными программами HANDLE например Poz_Handl

мне не подходит потому, что отправка текста должно принадлежать именно тому окну, на которое я "нацелился" HANDLE'ом
Так сделайте его активным по хендлу перед иммитацией нажатия
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 21:25  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Я бы проверил специальными программами HANDLE например Poz_Handl
Я проверял Spy++
Она лучше Poz_Handl хотя бы в том, что показывает все дочерние и родительские окна.
Цитата Сообщение от Avazart Посмотреть сообщение
Так сделайте его активным по хендлу перед иммитацией нажатия
Допустим, но мне не это нужно, не буду же я 50ти символьный текст "тыкать клавишами".
Мне надо взять текст из Memo и ввести его в другую программу, в моём случае игру.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 21:33
Незнаю проканает ли в вашем случае но я делал так в своей проге для Pragma-переводчика, вот фрагмент

C++
1
2
3
4
5
6
7
8
if(hPNaviTop)
       {
             //....
       char *s=ClipbrdText.c_str(); // Передаваемый текст
       if (! SendMessage(hPNaviTop,WM_SETTEXT,strlen(s),int(s)) )ShowMessage("Do not Send Text Error#5");
            //...
       }
 else ShowMessage("Error#5");
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 21:40  [ТС]
C++
1
2
3
4
5
if(hwnd > 0)
  {
    char *s = Memo1->Lines->Text.c_str();
    SendMessage(hwnd, WM_SETTEXT, strlen(s), int(s));
  }
Помогло тока выводит вот такой текст
!B0A
и только первую строку.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 21:42
Может проблема с Unicode/Ansi ?
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 21:43  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Может проблема с Unicode/Ansi ?
Возможно, а что теперь с этой траблой делать?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2012, 21:57
Чесно говоря у меня тоже кажется такие траблы были при написании вот только я не помню причину...

Добавлено через 10 минут
Думаю всетаки проблема с HANDLE-ом другой причины не вижу, у меня прога работает нормально и UNICODE не подключал.


Попробуйте отсылать сообщение 100-пудова известному окну например другому Memo.
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
02.03.2012, 22:00  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Думаю всетаки проблема с HANDLE-ом другой причины не вижу, у меня прога работает нормально и UNICODE не подключал.
Дак с HANDLE-ом всё норм уже проверял, тока открою секрет - та самая прога - скайп))
HANDLE его я проверял - всё супер, отзывается на сообщения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2012, 22:00
Помогаю со студенческими работами здесь

Передача текста в другую программу SendMessage
Подскажите пожалуйста. Написал программу которая программно нажимает кнопку в другой программе. Другая программа называется Proba. ...

Передача текста в другую программу в текстовое поле
Вот здраствуйте,возник вопрос ,вот допустим у меня есть форма с кнопкой и мемо1 . в мемо1 есть текст. я тыкаю на кнопку и делаеца...

При передаче текста в другую программу нужен только Bluetooth
При открытии списка программ в которые может быть отправлен текст из моей программы , есть и Bluetooth. Можно ли сделать так чтобы он был...

Как сымитировать ввод текста во внешнию программу?
К примеру у моей программы стоит окно где вводишь текст, после нажимаешь кнопку написать и она должна послать набранный текст в уже...

Строка: автоматизировать ввод текста с текстового документа в программу
Добрый день всем. Столкнулся с проблемой: надо автоматизировать ввод текста с текстового документа в программу, сложность как оказалося в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru