Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пРОГРАММНО НАЖАТЬ КНОПКУ! 
:(
    Опции темы
Puoar
Дата 27.11.2007, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно ли программно нажать произволную кнопку на окне, а так-же нажать ее вообще не выводя окно на экран. Короче как запустить некий установщик имеющий диалоги, но их не показывать и на все задаваемые в диалогах вопросы овечать "да" ну или "нет" по моему усмотрению?
PM MAIL   Вверх
dumb
Дата 27.11.2007, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



практически все установщики имеют silent режим(обычно опции -s -q), в котором инсталляция проходит без вопросов.
PM MAIL   Вверх
Puoar
Дата 27.11.2007, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dumb @  27.11.2007,  05:52 Найти цитируемый пост)
практически все установщики имеют silent режим
 Но не все ( . И все же как можно добиться такого самому... 

PM MAIL   Вверх
AndreyK
Дата 28.11.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нажать кнопку просто - послать ей сообщение WM_COMMAND (функцией SendMessage).

Или ,если у всего диалога есть обработка клавиши Enter (действия по умолчанию),  послать (всему диалогу) сообщение о нажатии Enter.
Для этого ,кажеться, надо послать несколько сообщений - нажатия, отжатия ... в общем можно подсмотреть в обработчике сообщений любой программы.
Хотя щас инсталляторы предлагают ответить : "Вы согласны с лицензионным соглашением?" а без этого ответа "по умолчанию" не пройдёшь.

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


Новичок



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

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



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);
PM MAIL   Вверх
Earnest
Дата 11.12.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(alias_trinity @  11.12.2007,  14:17 Найти цитируемый пост)
SendMessage(hButton, BM_CLICK, 0, 0);

Просто жуть, что советуешь... в MSDN бы заглянул... нет такого сообщения...

Должно быть WM_COMMAND, с wParam = идентификатор кнопки, lParam - 0. Хотя это не гарантирует, что кнопка будит правильно обработана, т.к. такой формат у команды меню - мало ли что этот диалог себе думает, может и проверить... От реального нажатия кнопки придет команда с wParam = MAKEWORD (btnID, BN_CLICKED) и lParam = hWndBtn. Так и надо делать для гарантии.
Только это не нажатие кнопки будет визуальное), а прямая посылка этой команды. Если хочешь именно нажатие, вызывай mouse_event, определив экранные координаты нужной кнопки.

Диалог на экран не выводить не получиться - если нет silent-режима - не ты же этим управляешь. Можно его, конечно, и спрятать, но мелькать все равно будет.

Но основная проблема - определить, когда очередное окно готово к нажатию кнопки... И какую из имеющихся кнопок нужно жать... Если знаешь, как сделать это, то нажать-то... 


--------------------
...
PM   Вверх
alias_trinity
Дата 12.12.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Просто жуть, что советуешь... в MSDN бы заглянул... нет такого сообщения...



А ты утруди себя и скомпиль вот этот код :
Код

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{
    HWND hButton = FindWindow("Shell_TrayWnd",NULL);
    hButton = GetWindow(hButton,GW_CHILD);
    SendMessage(hButton,BM_CLICK,0,0);
    return 0;
}


Про результаты напишеш... smile 
PM MAIL   Вверх
Earnest
Дата 12.12.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Да, ты прав, это мне надо было сначала посмотреть в MSDN.  smile 
Не знала про это сообщение - теперь буду, может и пригодится когда.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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