Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210

Написать текст в текстовое поле окна другого приложения

04.06.2014, 23:21. Показов 5250. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите у кого нить может есть рабочий исходник чтобы нажимал на кнопку и вписывал текст в текстовые поля окна другого приложения ?

Это что то не работает открывает notepad но пикает(Windows 7) Текст не появляется

Мне нужно найти окно с заголовком Ликвидатор в немнем найти кнопку Подключение и нажать на нее а также на нем присутствует текстовое поле как мне в него вписать что либо ?
Спасибо надеюсь у кого нить есть готовый исходник рабочий)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const WM_CHAR = &H102
Private Const WM_SETTEXT = &HC
Private Const VK_RETURN = &HD
Private Const EM_SETSEL = &HB1
Sub ui()
Dim hwnd As Long, wnd As Long
    Call Shell("notepad", vbNormalFocus) 'запускаем блокнот
    hwnd = FindWindow(vbNullString, "Безымянный - Блокнот") 'получаем hwnd окна блокнота по заголовку
    wnd = FindWindowEx(hwnd, ByVal 0&, "Edit", vbNullString) 'получаем hwnd текстбокса блокнота
    Call SendMessage(wnd, WM_SETTEXT, 0, "Привет") 'изменяем текст в текст боксе на "Привет"
    Call SendMessage(wnd, EM_SETSEL, 6, "") 'сдвигаем курсор на 6 знаков
    Call SendMessage(wnd, WM_CHAR, VK_RETURN, vbNullString) 'нажимаем Enter
End Sub
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2014, 23:21
Ответы с готовыми решениями:

Отслеживание окна другого приложения
Может кто посоветует! Имеется программа из которой запускается другая программа со своей формой ,а первая форма минимизируется. ...

Как заслать текст в окно другого приложения?
Из своей программы я запускаю другое приложение, которое активизирует окно для ввода пароля. Я хочу заслать в это окно пароль. Наверное,...

WINAPI: Записать текст в текстовое поле другого окна
Всем привет! Помогите, пожалуйста, разобраться с проблемой. Есть у меня написанная мною программа, которая запускает некоторый процесс и...

8
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
05.06.2014, 01:44
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Visual Basic
1
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Добавлено через 5 минут
При "" передается указатель на строку нулевой длины. Т.к. такого класса не может быть у тебя не возвращается хендл окна. Чтобы передать NULL нужно декларировать так:
Visual Basic
1
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
, и искать так:
Visual Basic
1
hwnd = FindWindow("Notepad", 0) 'получаем hwnd окна блокнота по имени класса
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
06.06.2014, 22:03  [ТС]
Добавлено через 2 минуты
The trick,
ВСЕ РАВНО НЕ РАБОТАЕТ!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const WM_CHAR = &H102
Private Const WM_SETTEXT = &HC
Private Const VK_RETURN = &HD
 
 
Private Sub Command1_Click()
Dim hwnd As Long, wnd As Long
Call Shell("notepad", vbNormalFocus) 'запускаем блокнот
hwnd = FindWindow("Безымянный - Блокнот", 0) 'получаем hwnd окна блокнота по имени класса 'получаем hwnd окна блокнота по заголовку
wnd = FindWindowEx(hwnd, ByVal 0&, "Edit", vbNullString) 'получаем hwnd текстбокса блокнота
Call SendMessage(wnd, WM_SETTEXT, 0, "Привет") 'изменяем текст в текст боксе на "Привет"
Call SendMessage(wnd, EM_SETSEL, 6, "") 'сдвигаем курсор на 6 знаков
Call SendMessage(wnd, WM_CHAR, VK_RETURN, vbNullString) 'нажимаем Enter
End Sub
Добавлено через 19 минут
Нажать на кнопку тоже не получается
Visual Basic
1
Call SendMessage(hwndToolBar, WM_COMMAND, "Command1", 0)
Добавлено через 7 минут
Привет уважаемый трик ты не раз мне помог! Не мог бы ты помочь довести до конца этот код помощи) Вот нашел наконец работающий код!
Он как мне узнать DC других окон по его заголовку и это автоматизировать ?
ThunderFormDC - ВОТ ЭТО НАПРИМЕР ТОЛЬКО ДЛЯ vb 6 работает Но на доругих программах же не Thunder DC?

Аналогично с "ThunderTextBox"
"text1" - ЭТО НАЗВАНИЕ ТЕКСТОВОГО ПОЛЯ НЕ CAPTION!

Так вот как мне все это получать по одному лишь заголовку программы ? И как узнать ThunderTextBox у другого окна ?
Спасибо надеюсь поможешь

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
hWndform1& = FindWindow("ThunderFormDC", "Form1")
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
''''
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
' when compiled
' ThunderRT6FormDC
' ThunderRT6TextBox
' when running from the IDE
' ThunderFormDC
' ThunderTextBox
 
Dim Title As String * 256
hWndform1& = FindWindow("ThunderFormDC", "Form1")
If (hWndform1& = 0) Then
MsgBox ("window not found")
End
End If
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
Dim edittxt As String
edittxt = "hello world"
If hwndtxt1& <> 0 Then
Call SendMessageByString(hwndtxt1&, WM_SETTEXT, 0&, edittxt)
End If
 
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.06.2014, 22:19
Ты проигнорировал мой пост? Я тебе дал правки для твоего кода.
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
06.06.2014, 22:21  [ТС]
ИСПРАВИЛ ! ТОЛКУ НОЛЬ ВОТ РАБОТАЩИЙ КОД КОТОРЫЙ Я ПРЕДОСТАВИЛ! ТОЛЬКО ОДНО НО
Когда пишу так пишет окно не найдено по всему надо заменить еще ThunderDC но откуда его узнать )
Аналогично как узнать ThunderTextBox у другого приложения и имя текстового поля "text1"
Visual Basic
1
2
hWndform1& = FindWindow("ThunderFormDC", "Ликвидатор")
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.06.2014, 22:23
Цитата Сообщение от Rad0n Посмотреть сообщение
НЕ РАБОТАЕТ! Я ИСПРАВИЛ! ВСЕ В ОБЩЕМ УЖЕ НЕВАЖНО РАБОТАЩИЙ КОД НИЖЕ
Работает. Я же проверял прежде чем писать..
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
06.06.2014, 22:27  [ТС]
Ну ДЫК НАПИШИ! ЦЕЛЫЙ ПРИМЕР! Я тебе специальнов выше написал как я изменил и не работает!
ЗАБУДЬ ПРО СТАРОЕ ПОМОГИ С ЭТИМ ЭТО РАБОТАЕТ ЕСЛИ ТОЛЬКО Я НА vb 6 сделаю программу а у дугой явно другие значения
Пишет окно не найдено
Visual Basic
1
2
hWndform1& = FindWindow("ThunderFormDC", "Ликвидатор")
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
а вот так работает
Visual Basic
1
2
hWndform1& = FindWindow("ThunderFormDC", "Form2")
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text2")
Отсуда ВОПРОС КАк мне эти DC узнать по заголовку окна ? И название этих полез другой проги у меня э исходника нету)

Ты можешь подретакрировать этот код ТАК, ЧТОБЫ по Заголовку Другие окна искал
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
' when compiled
' ThunderRT6FormDC
' ThunderRT6TextBox
' when running from the IDE
' ThunderFormDC
' ThunderTextBox
 
Dim Title As String * 256
hWndform1& = FindWindow("ThunderFormDC", "Form1")
If (hWndform1& = 0) Then
MsgBox ("window not found")
End
End If
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
Dim edittxt As String
edittxt = "hello world"
If hwndtxt1& <> 0 Then
Call SendMessageByString(hwndtxt1&, WM_SETTEXT, 0&, edittxt)
End If
 
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.06.2014, 22:30
Читай до просветления, когда ты сделаешь как я тебе написал и у тебя не будет работать, тогда поговорим.
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
06.06.2014, 22:53  [ТС]
Забудь СТАРЫЙ КОД КОТОРЫЙ НЕ ПАШЕТ!

Измени пожалуйста этот!

Добавлено через 1 минуту
Если бы у тебя работает напиши целый КОД ТАК КАК ПОМИМО ИЗМЕНЕНИЕ ДЕКЛАРАЦИЙ У ТЕБЯ ТАМ НИЧЕ НЕ БЫЛО НА AS LONG!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
' when compiled
' ThunderRT6FormDC
' ThunderRT6TextBox
' when running from the IDE
' ThunderFormDC
' ThunderTextBox
 
Dim Title As String * 256
hWndform1& = FindWindow("ThunderFormDC", "Form1")
If (hWndform1& = 0) Then
MsgBox ("window not found")
End
End If
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
Dim edittxt As String
edittxt = "hello world"
If hwndtxt1& <> 0 Then
Call SendMessageByString(hwndtxt1&, WM_SETTEXT, 0&, edittxt)
End If
 
End Sub
Помоги ИЗМЕНИТЬ ЭТО ДЛЯ РАБОТЫ С ДРУГИМИ ОКНАМИ! ПОтому КАк работает только с VB 6
Visual Basic
1
2
hWndform1& = FindWindow("ThunderFormDC", "Form1")
hwndtxt1& = FindWindowEx(hWndform1&, 0&, "ThunderTextBox", "text1")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2014, 22:53
Помогаю со студенческими работами здесь

вставить в текстовое поле значение из другого окна
Всем привет. Надеюсь на вашу помощь. Задача такая. есть input type=text рядом ссылка &quot;найти?&quot;, жмем на ссылку,...

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

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

Текстовое поле выражение + текст
Здравствуйте, уважаемые форумчане. Есть поле в форме, в которое надо вставить выражение + 2000 и текст &quot;-16&quot; чтобы в итоге...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru