C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как нажать кнопку класса TSpeedButton из внешнего
HKarel
Отправлено: 03.02.2005, 01:52


Не зарегистрирован







У сторонней прораммы есть два edit-а и SpeedButton-кнопка. Требуется запустить программу из своего приложения, заполнить едиты инфой и нажать на конпку.
С запуском и заполнением вроде все понятно, а вот с нажатием на кнопку возникли трудности. Подскажите, плз. как это можно сделать.
Gedeon
Отправлено: 03.02.2005, 12:14


Ветеран

Группа: Модератор
Сообщений: 1742



У нее нету хэндла, поэтому, я думаю, надо найти ее координаты и послать форме сообщение нажатия крысы в этих координатах,
вот пример нажатия
CODE

   HWND X = FindWindow("TForm1", "SpeedB");
   if(X) ShowMessage("Find");
   LPARAM Low = MAKELPARAM(88,17);

   SendMessage(X,WM_LBUTTONDOWN,NULL,Low);
   SendMessage(X,WM_LBUTTONUP,NULL,Low);

Но это если кнопа всегда на одном месте, а если она перемещается надо дальше думать.
HKarel
Отправлено: 03.02.2005, 15:58


Не зарегистрирован







Спасибо, Gedeon, проблему полечило (кнопка не перемещается), правда возникла еще одна трудность: при нажатии кнопки меняетс ее капшин, можно ли отловить момент когда это произойдет.
Gedeon
Отправлено: 03.02.2005, 17:15


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (HKarel @ 03/02/2005, 17:00)
при нажатии кнопки меняетс ее капшин, можно ли отловить момент когда это произойдет.

Это произойдет при нажатии кнопки.
HKarel
Отправлено: 03.02.2005, 17:40


Не зарегистрирован







Согласен, масо масляное smile.gif Попробуем по другому: Внешнее приложение имеет кнопку с надписью "Connect". После того как я заполняю лог и пароль, по Вашему рецепту, "жму" на кнопку. Внешняя прога начинает делать какие-то свои операции, а я жду, скажем 5 секунд. Если по истечении этого времени надпись на кнопке не сменилась на "Disconnect" — я должен выдать сообщение пользователю, что мол "Фиг Вам", в противном случае минимизировать внешнюю форму.
Gedeon
Отправлено: 03.02.2005, 18:05


Ветеран

Группа: Модератор
Сообщений: 1742



Ну первое, что в данной ситуации приходит в голову — взять кусок канвы формы, и побитно сравнить ее рисунок с заранее заданным(когда например дисконнект), а так вообще может поискать другие пути определения установки соединения.
olegenty
Отправлено: 04.02.2005, 08:06


Ветеран

Группа: Модератор
Сообщений: 2412



а что мешает завязаться на пользовательские события-то? при коннекте — происходит его посыл типа
CODE
PostMessage(HWND_BROADCAST, CM_CONNECTED, 0, 0);

прога по таймеру 5 секунд ждёт этого сообщения (по таймеру), и если его не было — всё, пипец, в трей.

хуже, если внешнее приложение написано не тобой. тогда кроме предложения Gedeon меня тоже ничто не посещает, хотя я и понаблюдал бы за внешней прогой с помощью Spy++, может она генерит события при коннекте, которые можно будет хватануть...
HKarel
Отправлено: 04.02.2005, 11:29


Не зарегистрирован







Внешнее приложение — стороннее. Скорее всего придется остановится на предложении Gedeona, возиться с хуком для такой маленькой прилады — не хочется.
Vital_K
Отправлено: 04.02.2005, 13:41


Ученик-кочегар

Группа: Участник
Сообщений: 27



Too HKarel. Очень заинтересовала твоя тема. По возможности рапиши как ты отлавливаешь и заполняешь Edit'ы. По возможности простенькие исходники с комментариями.
Заранее благодарен. Мой e-mail: shodek@yandex.ru

Вернуться в Вопросы программирования в C++Builder