Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2013, 21:48   #1
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию Найти окно и послть ему команду(поясните)

У меня задача по нажатию button послать нажатие enter в edit(все в одной форме). Допустим edit-ов несколько, и нужно послать именно в edit с текстом "999". Работает если я делаю вот так:
Код:
SendMessage(Edit1.Handle,WM_KeyDown,VK_Return,0);
SendMessage(Edit1.Handle,WM_KeyUp,VK_Return,0);
Но нужно исходить из того, что я не знаю какой именно это edit (edit1 или edit2). Запрещено также делать проверку на if edit1.text:= и тд.. Нужно именно определить содержимое всех окон Form1 и увидеть "999" взять хендл этого окна и ему передать. В spy++ вот что:

тоесть там не видно, где edit1 где edit2, разлечаеться только набор букв и цифр(это и есть хендл?). Как получить то что получает spy++ себе в прогу на делфи - наверно исходя из того, что известно название формы Form1. Там еще написано Tedit -я пытался писать так:
Код:
SendMessage(Tedit.Handle,WM_KeyDown,VK_Return,0);
SendMessage(Tedit.Handle,WM_KeyUp,VK_Return,0);
и ошибка выходит. Вопрос скорее что нужно передать первым параметром в функцие SendMessage
igrok111 вне форума Ответить с цитированием
Старый 24.06.2013, 22:35   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

сначала ищешь окно потом на нем едит, получаешь его handle и текст, проверяешь и посылаешь.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 24.06.2013, 22:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно именно определить содержимое всех окон Form1 и увидеть "999"
и
Цитата:
Запрещено также делать проверку на if edit1.text:= и тд..
Протеворечат друг другу.
Цитата:
Как получить то что получает spy++
Используя в паре EnumWindows() и EnumChildWindows() для прохода по дереву окон.
Примеры тут выкладывались: http://yandex.ua/yandsearch?text=Enu...oc=10&lr=20554
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.06.2013, 22:53   #4
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
и

Протеворечат друг другу.

Используя в паре EnumWindows() и EnumChildWindows() для прохода по дереву окон.
Примеры тут выкладывались: http://yandex.ua/yandsearch?text=Enu...oc=10&lr=20554
допустим едиты на другой проге и мы не видим, где там едит1 едит2, но как-то их надо различать, по хендлу, а я не совсем понимаю что-это( то какие-то цифры вижу то едит1.хендл. непонятно

Последний раз редактировалось igrok111; 24.06.2013 в 22:56.
igrok111 вне форума Ответить с цитированием
Старый 24.06.2013, 23:12   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как-то их надо различать
Только по порядку (который тебе spy++ показывает) и по содержимому.
И то и другое переменчиво (хотя порядок более устойчив чем значение эдита).
В общем случае твоя задача решается примерно так:
Код:
h:=findWindow('TForm1','Form1');
h:=FindWindowEx(h,0,'TEdit','999');
Это если ты будешь выполнять эти операции тогда когда и эдиты будут в окне и 999 будет в нужном эдите.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.06.2013, 23:15   #6
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Только по порядку (который тебе spy++ показывает) и по содержимому.
И то и другое переменчиво (хотя порядок более устойчив чем значение эдита).
В общем случае твоя задача решается примерно так:
Код:
h:=findWindow('TForm1','Form1');
h:=FindWindowEx(h,0,'TEdit','999');
Это если ты будешь выполнять эти операции тогда когда и эдиты будут в окне и 999 будет в нужном эдите.
а если я зарение не буду знать именно "TEdit" -как его вытащить? это класс (form1 известно, но не класс)
igrok111 вне форума Ответить с цитированием
Старый 25.06.2013, 00:25   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от igrok111 Посмотреть сообщение
а если я зарение не буду знать именно "TEdit" -как его вытащить? это класс (form1 известно, но не класс)
TEdit не изменно, класс можно узнать любыми оконными просмотровщиками, тем же spy++
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.06.2013, 01:16   #8
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
TEdit не изменно, класс можно узнать любыми оконными просмотровщиками, тем же spy++
а если там есть и мемо и другие поля для ввода текста. А мне нужно сделать так - увидеть где 999 - и определить в чем оно, тоесть класс tedit или tmemo ?
igrok111 вне форума Ответить с цитированием
Старый 25.06.2013, 04:03   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от igrok111 Посмотреть сообщение
а если там есть и мемо и другие поля для ввода текста. А мне нужно сделать так - увидеть где 999 - и определить в чем оно, тоесть класс tedit или tmemo ?
можно сделать два FindWindow.
а можно применить EnumChildWindows, и в калбэке проверять условию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.06.2013, 08:20   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если там есть и мемо и другие поля для ввода текста.
Как я уже говорил
Цитата:
Используя в паре EnumWindows() и EnumChildWindows() для прохода по дереву окон.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удалось найти в среде окружения сборки команду: make iPashqa Общие вопросы C/C++ 9 08.02.2011 18:34
Программно найти окно nikolas0 Общие вопросы Delphi 11 14.01.2011 01:45
Описать команду, представление адреса и найти результат crasheg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.05.2010 07:35
Найти окно по маске Иллидан Общие вопросы Delphi 2 28.02.2008 01:06
TWebBrowser-как перехватить команду скрипта для закрытия окна и не дать ему закрыться Вовик Компоненты Delphi 5 03.10.2007 12:17