Страница 1 из 1
Обработка диалоговых окон

Добавлено:
22 авг 2012 21:49
likemilk
Нужен пример кода обработки стандартного диалогового окна с кнопками: Да, Нет, Отмена.
Часто бывает что в процессе выполнения макроса (на VBA) вылетает какое либо окно. Например, "Такой файл уже существует. Вы хотите пересохранить его?"
Так вот нужно сделать так чтоб пользователю не приходилось жать на кнопки.
Re: Обработка диалоговых окон

Добавлено:
23 авг 2012 10:27
ЧПУшник
viewtopic.php?f=140&t=3686 думаю полезно будет. Вообще твой метод - Win Api, искать окна через WInSpy, и определив его Caption или Class найти именно свое окно и послать команду нажатия клавиши.
Re: Обработка диалоговых окон

Добавлено:
24 авг 2012 11:27
Wireless_Fidelity
Здравствуйте.
CATIA.DisplayFileAlerts = False убирает почти все сообщения.
Re: Обработка диалоговых окон

Добавлено:
28 авг 2012 10:25
likemilk
Wireless_Fidelity писал(а):Здравствуйте.
CATIA.DisplayFileAlerts = False убирает почти все сообщения.
спасибо, помогло. проверил пока на одном макросе.
Re: Обработка диалоговых окон

Добавлено:
01 авг 2013 17:43
illidge
Добрый день. Кто-нибудь реализовывал эту функцию нажатия пользователем стандартных кнопок диалогового окна?
CATIA.DisplayFileAlerts = false закрывает только сообщения об ошибках.
Мне в частности нужно нажать ОК во всплывающем окне выбора part number.
Я не имел дела с winapi, поэтому пока не выходит через него. Handle окна определяется FindWindow Нормально.
Я хочу сделать окно активным и потом послать команду OK.
Но в случае использования SetActiveWindow(hand) выводит, что вызов функции разбалансировал стек
А если использовать SetForegroundWindow(hand) "Переполнение в результате выполнения арифметической операции"
Кто подскажет?
Re: Обработка диалоговых окон

Добавлено:
02 авг 2013 09:07
Artem
viewtopic.php?f=140&t=3547 есть пример использования винапи.....ну и вообще по форуму инету глянь - скачай готовые РАБОТАЮЩИЕ примеры, а не пиши с нуля
Re: Обработка диалоговых окон

Добавлено:
02 авг 2013 16:57
illidge
Спасибо!
Активировать окно получилось, отправить нажатие Enter - нет. Много всего перерыл, но пока остается проблема.
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
SendMessage(handle, WM_KEYDOWN, VK_RETURN, 0)
VS говорит что WM_KEYDOWN, VK_RETURN нужно объявить. Разве так должно быть? В большинстве примеров эти константы не объявляются.
Я объявил вручную как 256 и 13 соответственно. Но ничего не происходит. Окно активно. Т.е. нужно только "нажать" Enter. В чем может быть причина?
Re: Обработка диалоговых окон

Добавлено:
05 авг 2013 13:16
illidge
Все. Проблема решилась. Правда не с помощью клавиатурного Enter, а кликом мыши по кнопке.
hButton = FindWindowEx(hand, 0, "Button", "OK")
sendMessage(hButton, BM_CLICK, 0, 0)