Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отправить в TextBox другого приложения из VB, В TextBox другого приложения из VB 
:(
    Опции темы
KUSHNIR
  Дата 10.2.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем здравствуйте ! Столкнулся с проблемой отправки набора символов из приложения на VBA в текстовое поле другого приложения.
Определить имя окна другого приложения по его наименованию  я могу. 
Окно приложения состоит из Label, TextBox, кнопка [OK], кнопка [Отмена].
Необходимо программно отправить из VBA нобор символов в TextBox и нажать кнопку [OK]
Подскажите пожалуйста как это сделать?
PM MAIL   Вверх
I_Am_Rock
Дата 10.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Вот код.
Он работает, учитывая, что текстбокс находится в проге, написанной на VB.
Если прога написана не на VB, надо будет кое-что изменить...

Код

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 hWndParent As Long, ByVal hWndChildAfter As Long, 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
Dim g, k

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Form1") ' Здесь Form1 - заголовок окна с текстбоксом
k = FindWindowEx(g, 0, "ThunderRT6TextBox", vbNullString) ' ищем хэндл текстбокса
SendMessage k, &HC, 0, ByVal "Текст"
End Sub

PM MAIL WWW   Вверх
KUSHNIR
  Дата 10.2.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!
Программа написана не на VB.
Проблема в том как программно определить имя и обратиться к TextBox.
PM MAIL   Вверх
I_Am_Rock
Дата 10.2.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Т.е. нужно определить класс текстбокса? (то, что в моем коде - ThunderRT6TextBox)

Это можно узнать при помощи Spy++, который находится на диске с VB

Если не сможете это сделать, передайте как-нибудь прогу мне. Я сам определю. Написать адрес почты в личку?

Добавлено через 5 минут и 40 секунд
Я тут подумал.
Если в ТекстБоксе ничего нет, то его, скорее всего, можно найти, заменив одну строчку

Код

k = FindWindowEx(g, 0, vbNullString, "") ' ищем хэндл текстбокса

PM MAIL WWW   Вверх
I_Am_Rock
Дата 10.2.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Я сразу не заметил - Вам еще нужно нажатие на OK.

Подождите - через минут 10-15 будет код...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 10.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Вот как делается нажатие.

Код

Private Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Dim z

' В какой-то процедуре
z = FindWindowEx(g, 0, vbNullString, "OK") ' Ищем кнопочку...
' Проследите, чтобы слово OK здесь и в кнопке была написано на одном языке...
SendNotifyMessage z, WM_LBUTTONDOWN, 0, 0 ' Нажимаем ее
SendNotifyMessage z, WM_LBUTTONUP, 0, 0 ' Отжимаем ее


Я смогу сделать полноценный код (т.е. посылка текста в текстбокс и нажатие), только если у меня будет прога, с которой это все проделывается...
PM MAIL WWW   Вверх
KUSHNIR
  Дата 10.2.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(I_Am_Rock @  10.2.2008,  14:26 Найти цитируемый пост)
код Visual Basic
k = FindWindowEx(g, 0, vbNullString, "") ' ищем хэндл текстбокса


k > 0 функция что-то нашла но в текстбокс ничего незаписалось.
Причём при повторном выполнение процедуры к=0
SPY++ посмотрю должно быть где-то на дисках.


Спасибо. Есть направление в котором нужно искать.
PM MAIL   Вверх
I_Am_Rock
Дата 10.2.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Да, так найти (через пустую строку) действительно не получается...

Можно попробовать найти хэндл текстбокса методом исключения, т.е. проверить по очереди все дочерние объекты и если GetWindowText не равен "OK" "Отмена" или тексту в Лэйбле, то это, то что нужно...

Если не найдете spy++ или не разберетесь в нем, то могу посоветовать программу InqSoft Sign 0f Misery - у нее есть удобный сканер окон...

Добавлено через 1 минуту и 2 секунды
Насколько я знаю, эта прога бесплатна, небольшой по мегам дистрибутив и ее не сложно найти в Сети...
PM MAIL WWW   Вверх
KUSHNIR
  Дата 10.2.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да на шел SPY++
С помощью этой программы нашел параметры TextBox.
Теперь задача какие из найденных параметров вставить в код 
Вот представляю ScreeShot

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  Screen.zip 20,25 Kb
PM MAIL   Вверх
I_Am_Rock
Дата 10.2.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



По всей видимости, нужно вместо ThunderRT6TextBox в моем коде вставить ClaEdit...

А потом нажатие кнопки, как я уже писал...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 10.2.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Я обратил внимание, что между родительским окном и ТекстБоксом находится "промежуточное" дочернее окно ClaChildClient...
Вот код. Напишите - работает или нет...

Код

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 hWndParent As Long, ByVal hWndChildAfter As Long, 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 Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Dim g, f, k, z

Private Sub Command1_Click()
g = FindWindow(vbNullString, "TopScan") ' Здесь TopScan - заголовок окна с текстбоксом
f = FindWindowEx(g, 0, "ClaChildClient", vbNullString)
k = FindWindowEx(f, 0, "ClaEdit", vbNullString) ' Ищем хэндл текстбокса
SendMessage k, &HC, 0, ByVal "Текст"
z = FindWindowEx(f, 0, "ClaButton", "OK") ' Ищем кнопочку...
' Проследите, чтобы слово OK здесь и в кнопке была написано на одном языке...
SendNotifyMessage z, WM_LBUTTONDOWN, 0, 0 ' Нажимаем ее
SendNotifyMessage z, WM_LBUTTONUP, 0, 0 ' Отжимаем ее
End Sub


Это сообщение отредактировал(а) I_Am_Rock - 10.2.2008, 18:06
PM MAIL WWW   Вверх
KUSHNIR
  Дата 11.2.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Я отлучался на некоторое время, Работа...
немного модифицировал код
Код

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 hWndParent As Long, ByVal hWndChildAfter As Long, 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 Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Dim g, f, k, z

Private Sub Command1_Click()
g = FindWindow(vbNullString, "TopScan") ' Здесь TopScan - заголовок окна с текстбоксом
f = FindWindowEx(g, 0, "ClaChildClient", vbNullString)
k = FindWindowEx(f, 0, "ClaEdit", vbNullString) ' Ищем хэндл текстбокса
EnableWindow k, 1
SendMessage k, &HC, 0, ByVal "ТNHH"
z = FindWindowEx(f, 0, "ClaButton", "&OK") ' Ищем кнопочку...
'  Немного модифицировал "&OK" т.к. на форме она с подчеркиванием
' Проследите, чтобы слово OK здесь и в кнопке была написано на одном языке...
' на всякий случай включаем кнопку т.е. делаем Enabled True
EnableWindow z, 1

SendNotifyMessage z, WM_LBUTTONDOWN, 0, 0 ' Нажимаем ее
SendNotifyMessage z, WM_LBUTTONUP, 0, 0 ' Отжимаем ее
End Sub

 
Товарищу I_Am_Rock огромнешее спасибо !!! и много плюсов!
Спасибо smile 
PM MAIL   Вверх
I_Am_Rock
Дата 11.2.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Я отправил персональное сообщение...)

Рад что смог помочь...
PM MAIL WWW   Вверх
Akina
Дата 11.2.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 34
Всего: 454



Цитата(KUSHNIR @  11.2.2008,  16:36 Найти цитируемый пост)
Товарищу I_Am_Rock огромнешее спасибо !!! и много плюсов!

Done


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
suvorr
Дата 7.4.2008, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



I Am Rock-y  Попытался вставить указанным образом текст в поле навигации FireFox-a. Ни фига не вышло! Хэндла толком не нашел, слал всем подряд чилдренам родительского окна до третьего поколения. Мне кажется что он его засылает не в текст а в заголовок (которого не видно!). Может надо мессадж другой? Что такое &HC и откуда взялось? (Хотя с другими окнами все работает тип-топ) 
PM MAIL WWW Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




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


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

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