Обработка диалоговых окон

Программирование для CATIA.

Обработка диалоговых окон

Сообщение likemilk » 22 авг 2012 21:49

Нужен пример кода обработки стандартного диалогового окна с кнопками: Да, Нет, Отмена.
Часто бывает что в процессе выполнения макроса (на VBA) вылетает какое либо окно. Например, "Такой файл уже существует. Вы хотите пересохранить его?"
Так вот нужно сделать так чтоб пользователю не приходилось жать на кнопки.
likemilk
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 02 дек 2008 15:23

Re: Обработка диалоговых окон

Сообщение ЧПУшник » 23 авг 2012 10:27

viewtopic.php?f=140&t=3686 думаю полезно будет. Вообще твой метод - Win Api, искать окна через WInSpy, и определив его Caption или Class найти именно свое окно и послать команду нажатия клавиши.
ЧПУшник
Участник
Участник
 
Сообщения: 122
Зарегистрирован: 06 июл 2011 11:01
Откуда: Казань

Re: Обработка диалоговых окон

Сообщение Wireless_Fidelity » 24 авг 2012 11:27

Здравствуйте.

CATIA.DisplayFileAlerts = False убирает почти все сообщения.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Обработка диалоговых окон

Сообщение likemilk » 28 авг 2012 10:25

Wireless_Fidelity писал(а):Здравствуйте.

CATIA.DisplayFileAlerts = False убирает почти все сообщения.


спасибо, помогло. проверил пока на одном макросе.
likemilk
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 02 дек 2008 15:23

Re: Обработка диалоговых окон

Сообщение illidge » 01 авг 2013 17:43

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

Re: Обработка диалоговых окон

Сообщение Artem » 02 авг 2013 09:07

viewtopic.php?f=140&t=3547 есть пример использования винапи.....ну и вообще по форуму инету глянь - скачай готовые РАБОТАЮЩИЕ примеры, а не пиши с нуля
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Обработка диалоговых окон

Сообщение illidge » 02 авг 2013 16:57

Спасибо!
Активировать окно получилось, отправить нажатие 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. В чем может быть причина?
illidge
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 10 июл 2013 14:01

Re: Обработка диалоговых окон

Сообщение illidge » 05 авг 2013 13:16

Все. Проблема решилась. Правда не с помощью клавиатурного Enter, а кликом мыши по кнопке.
hButton = FindWindowEx(hand, 0, "Button", "OK")
sendMessage(hButton, BM_CLICK, 0, 0)
illidge
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 10 июл 2013 14:01


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron