| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > пРОГРАММНО НАЖАТЬ КНОПКУ! |
| Автор: Puoar 27.11.2007, 05:46 |
| Можно ли программно нажать произволную кнопку на окне, а так-же нажать ее вообще не выводя окно на экран. Короче как запустить некий установщик имеющий диалоги, но их не показывать и на все задаваемые в диалогах вопросы овечать "да" ну или "нет" по моему усмотрению? |
| Автор: dumb 27.11.2007, 05:52 |
| практически все установщики имеют silent режим(обычно опции -s -q), в котором инсталляция проходит без вопросов. |
| Автор: Puoar 27.11.2007, 07:12 |
| Но не все ( . И все же как можно добиться такого самому... |
| Автор: AndreyK 28.11.2007, 20:35 |
| Нажать кнопку просто - послать ей сообщение WM_COMMAND (функцией SendMessage). Или ,если у всего диалога есть обработка клавиши Enter (действия по умолчанию), послать (всему диалогу) сообщение о нажатии Enter. Для этого ,кажеться, надо послать несколько сообщений - нажатия, отжатия ... в общем можно подсмотреть в обработчике сообщений любой программы. Хотя щас инсталляторы предлагают ответить : "Вы согласны с лицензионным соглашением?" а без этого ответа "по умолчанию" не пройдёшь. |
| Автор: alias_trinity 11.12.2007, 13:17 |
| 1. Найди дескриптор кнопочки : hButton = GetDlgItem(hWnd, ID_BUTTON); 2. Пошли сообщение BM_CLICK : SendMessage(hButton, BM_CLICK, 0, 0); Или просто SendDlgItemMessage(hWnd, ID_BUTTON, BM_CLICK, 0, 0); Сам диалог просто сделай ShowWindow(hWnd, 0); |
| Автор: Earnest 11.12.2007, 20:35 |
Просто жуть, что советуешь... в MSDN бы заглянул... нет такого сообщения... Должно быть WM_COMMAND, с wParam = идентификатор кнопки, lParam - 0. Хотя это не гарантирует, что кнопка будит правильно обработана, т.к. такой формат у команды меню - мало ли что этот диалог себе думает, может и проверить... От реального нажатия кнопки придет команда с wParam = MAKEWORD (btnID, BN_CLICKED) и lParam = hWndBtn. Так и надо делать для гарантии. Только это не нажатие кнопки будет визуальное), а прямая посылка этой команды. Если хочешь именно нажатие, вызывай mouse_event, определив экранные координаты нужной кнопки. Диалог на экран не выводить не получиться - если нет silent-режима - не ты же этим управляешь. Можно его, конечно, и спрятать, но мелькать все равно будет. Но основная проблема - определить, когда очередное окно готово к нажатию кнопки... И какую из имеющихся кнопок нужно жать... Если знаешь, как сделать это, то нажать-то... |
| Автор: alias_trinity 12.12.2007, 16:20 | ||||
А ты утруди себя и скомпиль вот этот код :
Про результаты напишеш... |
| Автор: Earnest 12.12.2007, 19:08 |
| Да, ты прав, это мне надо было сначала посмотреть в MSDN. Не знала про это сообщение - теперь буду, может и пригодится когда. |