Как нажать кнопку!!!
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Ситуация следующая:
Есть диалоговое окно (считаем внешнее)
Есть приложение, с помощью которого находим это окно. Перебираем его элементы и находим указатель CWnd* на кнопку. Теперь ее нодо нажать.
Если есть способы или рекомендации как это сделать, нанишите.
Заранее благодарен!!!
Есть диалоговое окно (считаем внешнее)
Есть приложение, с помощью которого находим это окно. Перебираем его элементы и находим указатель CWnd* на кнопку. Теперь ее нодо нажать.
Если есть способы или рекомендации как это сделать, нанишите.
Заранее благодарен!!!
-
- Сообщения: 35
- Зарегистрирован: 12 май 2004, 15:34
- Откуда: Москва
Попробуй. У меня на билдере получилось из одного приложения в другом кнопку надавить
Код: Выделить всё
HWND WinHandle , CtrHandle;
int id;
//WinHandle - хэндл диалогового окна
//CtrHandle - хэндл контрола (кнопки)
id = GetDlgCtrlID(WinHandle);//Получим id кнопки
//Пошлем сообщение о отм что ее нажали
SendMessage(WinHandle , WM_COMMAND , (BN_CLICKED << 16) + id , (LONG)CtrHandle);
больше нечего сказать - SendMessage
Черезчур оптимистично. Это конечно способ основной, но не всегда проходит. Если не сработает другой способ состоит в программном перемещении указателя на кнопку и вызова mouse_event() с MOUSEEVENTF_LEFTDOWN/MOUSEEVENTF_LEFTUP.больше нечего сказать - SendMessage
*provided AS IS
Очень благодарен! Спасибо, Конструктор!
Все завелось, правда примерно так:
И еще, Andy, можно чуть поподробнее про указатель. Кажется прийдется реализовать именно так!
Все завелось, правда примерно так:
Код: Выделить всё
HWND WinHandle , CtrHandle;
int id;
//WinHandle - хэндл диалогового окна
//CtrHandle - хэндл контрола (кнопки)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
id = GetDlgCtrlID(CtrHandle);//Получим id кнопки !!!!!!!!!!!!!!!1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Пошлем сообщение о отм что ее нажали
SendMessage(WinHandle , WM_COMMAND , (BN_CLICKED << 16) + id , (LONG)CtrHandle);
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Чем SendMessage не устраивает?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, все нормально, все работает!
Но как объяснишь, что после передачи окну сообщения оно не реагирует, пока не подвигаешь указатель мышки по окну. Я решил эту проблему чуть по другому: после передачи сообщения, вызывал закрытие окна - теперь все работает.
Не знаю, как была построены те окна, с которыми я работаю, но глючат они здорово! Приходится изощьряться разными способами!
Но как объяснишь, что после передачи окну сообщения оно не реагирует, пока не подвигаешь указатель мышки по окну. Я решил эту проблему чуть по другому: после передачи сообщения, вызывал закрытие окна - теперь все работает.
Не знаю, как была построены те окна, с которыми я работаю, но глючат они здорово! Приходится изощьряться разными способами!
arris, SetFocus пробовал?
Даже самый дурацкий замысел можно воплотить мастерски
Способ с SendMessage не всегда проходит. SendMessage отправляет сообщение только это кнопке, а реального клика, как такового не происходит (а программа может наустановить хуков и т.п. для проверки). Тогда используют ф-ию SendInput (или mouse_event(),keybd_event()) совместно с перемещением указателя мыши в нужную точку путем SetCursorPos(). Они как бы имитируют действия пользователя.И еще, Andy, можно чуть поподробнее про указатель.
Вот-вот.Не знаю, как была построены те окна, с которыми я работаю, но глючат они здорово! Приходится изощьряться разными способами!
*provided AS IS