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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие выскакивающих окон, Нажать на ОК! 
:(
    Опции темы
steven13
  Дата 31.3.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 31.3.2005
Где: http://city.vin.c om.ua

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



Есть проблема, постоянно выскакивает окно, и там нужно нажать кнопку ОК.
В ручную конкретно надоело.

Сделал

Код

    HWND hWnd1 = ::FindWindow(NULL, _T("ПРЕДУПРЕЖДЕНИЕ"));
    if (IsWindow(hWnd1))
    {
        ::SendMessage(hWnd1, WM_CLOSE, NULL, NULL);
    };


Но она закрывает программу а но не нажимает на кнопку ОК.
Проблема в том что если назать на НЕТ или Закрыть окно, то програма перестаёт работать!

Думал так будет:
Код

        ::SendMessage(hWnd1, WM_OK, NULL, NULL);


Но пишет WM_OK - не задекларировано.

Кнопка "ОК" стоит как "First child windows"
Как на неё можно нажать?

Сейчас нажимаю мышкой по точному адресу на экране. Но это непреемлемый вариант.






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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



и правильно говорит. нет такого сообщения. кнопке можно посылать WM_LBUTTONDOWN
+ ты неправильно окно ищеш ( кнопка -- это дочернее окно ) сначала находи родительское, а уже потом в нем ищи кнопку ( EnumChildWindows() )

Это сообщение отредактировал(а) _hunter - 31.3.2005, 17:09


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
jorkug
Дата 1.4.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

char temp_buffer[2];

BOOL CALLBACK EnumChildWnd(

    HWND hwnd,
    LPARAM lParam
   )
{
                SendMessage(hwnd, WM_GETTEXT, 2, temp_buffer);
                if(!strcmp(temp_buffer, "OK"))
                  SendMessage(hwnd, WM_LBUTTONDOWN, 1, 1);
    return TRUE;
}

и:
Код

HWND hWnd = FindWindow(NULL, _T("ПРЕДУПРЕЖДЕНИЕ"));
EnumChildWindows(hWnd,&EnumChildWnd,0);


Это сообщение отредактировал(а) jorkug - 1.4.2005, 14:27
PM MAIL   Вверх
steven13
Дата 1.4.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 31.3.2005
Где: http://city.vin.c om.ua

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



hunter
Спасибо, я понял что нужно копать глубже.
Но как работает EnumChildWindows() - догнать пока немогу.

jorkug

SendMessageA' : cannot convert parameter 4 from 'char [2]' to 'LPARAM'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast


PM MAIL WWW ICQ   Вверх
_hunter
Дата 1.4.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



передаеш в эту функцию указатель на другую функцию, в которую будут передаваться все дочерние окна.

попробуй текст не скопипастить, а вручную написать ( или покажи этот кусок ). потому как должно работать...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
steven13
Дата 1.4.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 31.3.2005
Где: http://city.vin.c om.ua

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



Вот робочий вариант:

Код

char temp_buffer[1];
BOOL CALLBACK EnumChildWnd(

    HWND hwnd,
    LPARAM lParam
   )
{
                SendMessage(hwnd, WM_GETTEXT, 2, (int)temp_buffer);
                if(!strcmp(temp_buffer, "Т")) 
                {

                  SendMessage(hwnd, WM_LBUTTONDOWN, 1, 1);
                  SendMessage(hwnd, WM_LBUTTONUP, 1, 1);

//Что здесь написать, что-бы прекратить ещё искать окна?

                 }

    return TRUE;
}


Это сообщение отредактировал(а) steven13 - 1.4.2005, 19:19
PM MAIL WWW ICQ   Вверх
_hunter
Дата 1.4.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



читаем справку:
To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.
соответственно пишем return FALSE;


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
steven13
Дата 2.4.2005, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 31.3.2005
Где: http://city.vin.c om.ua

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



Первая часть:

Код

HWND HwndChild=NULL;
HWND hWndZapros=NULL; 


BOOL CALLBACK EnumChildWnd (HWND hwnd, LPARAM lParam)
{
    HwndChild=hwnd;
    return FALSE; //Так как нужная мне кнопка первая, никакие проверки не нужны.
}



Вторая часть:
Код

    hWndZapros=NULL;
        while(!hWndZapros)   
        {        
            hWndZapros = ::FindWindow(NULL, _T("Предупреждение"));
        //Ждёт пока появится окно с Предупреждением.
        }

        EnumChildWindows(hWndZapros,&EnumChildWnd,0);
        //Находит кнопку

        ::SendMessage(HwndChild, BM_CLICK, 1, 1);
        //Нажимает на кнопку [b]ОК[/b].


После нажатия на кнопку ОК, открывается ещё одно МОДАЛЬНОЕ окно, smile
где перреспрашивают, "Вы действительно уверены?". smile

Но програма дальше ничего не обрабатывает, а ждёт пока я закрою это окно. smile

Как мне нажать ещё на этом окне "ОК"?

ЗЫ: Пока сделал две отдельные програмы, которые закрываю каждая своё окно. Но это изврат какой-то получается...


PM MAIL WWW ICQ   Вверх
steven13
Дата 2.4.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 31.3.2005
Где: http://city.vin.c om.ua

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



http://forum.vingrad.ru/index.php?showtopic=39465


Цитата(p0s0l @ 14.1.2005, 22:10)
Цитата(Alexandr87 @ 11.1.2005, )
После чего, программа останавливается на втором сообщении, и следует дальше только после закрытия приложения с окном содержащим сий контрол.
А сам-то клик всё-таки срабатывает или нет ? Т.е. открывается новое окно ?
Если да, то попробуй вместо SendMessage делать PostMessage.
Отличие в том, что PostMessage добавляет сообщение в очередь, а SendMessage - передаёт сообщение сразу же на обработку оконной процедуре, и ждёт пока та не обработает сообщение...



Помогло!!!
PM MAIL WWW ICQ   Вверх
jorkug
Дата 2.4.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если не ошибаюсь, это окно является Child'oм первого. Появляется оно почти мгновенно, так что можно поставить задержку и закрыть его тем же способом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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