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

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

04.06.2014, 23:21. Показов 5313. Ответов 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru