Получить ControlID (vuSendKeys)

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Получить ControlID (vuSendKeys)

Сообщение morkovin »

Цитата из хелпа:
vuClickButton(<hWnd>, <Ctrl ID>)
vuClickButton(WindowHandle, Control Id) will simulate a left-click of a specific control on a specific window (regardless of which control has focus).

Return Value: Always returns true
Calling Parameters: hWnd Long - containing the Window Handle of the Window containing the control
CtrlId Long - containing the specific Control ID of the control you are working with


EXAMPLE
hWnd Long
CtrlId Long

hWnd = <the handle of the window containing the control>
CtrlId = <the Control ID of the buttonb>

vuClickButton(hWnd,CtrlId)
Не пойму, как получить CtrlId? Да и hWnd?
Последний раз редактировалось morkovin 11 Июнь 2019, 3:38, всего редактировалось 2 раза.
WBR, morkovin
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

Ну, HANDLE окна или контрола получить просто:
0{PROP:HANDLE} - Handle окна;
?Control{PROP:HANDLE} - Handle контрола.
Непонятно, что такое ControlID... Это из какого хелпа цитата?
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Подучить ControlID

Сообщение morkovin »

Constantine писал(а): 10 Июнь 2019, 9:55Это из какого хелпа цитата?
vuSendKeys (www.valutilites.com)
Пришлось читать весь хелп:
In order to use these new vuSendKeys functions, you will need to use an external program (such as "Spy++" which ships with Visual Studio or "WinSpy++" a freeware program available at http://www.catch22.net/software/winspy.asp) to gleen the ID Number from the Control you want. To obtain the ID of a control, follow these few simple steps (using WinSpy):
Хрень какая-то - Id и Handle меняются при каждом запуске
WBR, morkovin
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

Так, теперь понятно.
Как получить Handle, написано выше, а Control ID, в данном случае, можно получить функцией:
https://docs.microsoft.com/en-us/window ... tdlgctrlid
Соответственно, делать все после открытия окна.
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

На всякий случай, прототип функции:
GetDlgCtrlID(LONG),LONG,PASCAL
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

И еще непонятно: нужно в кларионовской программе нажать на кнопку или из кларионовской программы нажать на кнопку в другой программе?
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Подучить ControlID

Сообщение morkovin »

Из кларионовской (моей) проги хотел заполнять Логин+Пароль+ОК в другой проге.
WBR, morkovin
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

Тогда несколько сложнее:
1. Находим Handle нужного окна с помощью FindWindow или EnumWindows (можно привязаться к заголовку или классу окна).
2. Перебираем контролы в окне с помощью EnumChildWindows.
3. Находим нужный контрол (по тексту, позиции или классу) и обрабатываем его нужным образом.
4. Нажимаем на кнопку ОК с помощью SendMessage.
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine »

Пример можно посмотреть здесь:
https://stackoverflow.com/questions/122 ... -c-windows
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Подучить ControlID

Сообщение morkovin »

C11,ABC

Код: Выделить всё

hLoginId=16387
hPswId  =16389
hOkBtn=16394         !get from WinSpy

MyData = 'Регистрация'       !window header
hWnd = vuName2Handle(MyData)

IF hWnd > 0 THEN
    !
    cLogin = 'Admin{{TAB}'
    vuSendKeys(cLogin,1)         !first focus field is Login 
    cPsw = '123'
    vuSendKeys(cPsw,1)           !second field is PSw
    vuClickButton(hWnd,hOkBtn)   !
ELSE
    MESSAGE('LOGIN NOT AVAILABLE!','Error!')
    !RUN(....)
END
Вот так работает. Осталось только логины и пароли подставлять в динамике.
З.Ы. Просто юзеров жалко - требования к паролям больше 8-ми случайных символов, а Копи-паст не проходит.
WBR, morkovin
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Подучить ControlID

Сообщение gopstop2007 »

morkovin писал(а): 10 Июнь 2019, 16:20 Вот так работает. Осталось только логины и пароли подставлять в динамике.
З.Ы. Просто юзеров жалко - требования к паролям больше 8-ми случайных символов, а Копи-паст не проходит.
Изменить шапку на - Получить :)
аналогичное viewtopic.php?p=29872#p29872 или viewtopic.php?p=24013#p24013
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Получить ControlID (vuSendKeys)

Сообщение Constantine »

morkovin писал(а): 10 Июнь 2019, 16:20hLoginId=16387
hPswId =16389
hOkBtn=16394 !get from WinSpy
Что-то я сомневаюсь, что эти ControlID всегда будут такими...
Однозначно, лучше получать их в динамике.
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Получить ControlID (vuSendKeys)

Сообщение morkovin »

Constantine писал(а): 11 Июнь 2019, 8:31Что-то я сомневаюсь, что эти ControlID всегда будут такими...
проверил на рабочем сервере - всё совпадает.
WBR, morkovin
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Получить ControlID (vuSendKeys)

Сообщение Constantine »

Если мне не изменяет мой склероз (давно не имел дела), ControlID формируется на основе номера атома класса контрола в глобальной таблице атомов (Global Atom Table). GAT штука довольно стабильная, но все же, меняющаяся. Меняться она может, например, при установке нового софта, переустановке Windows и т.п.
Думаю, лучше поостеречься и формировать ControlID динамически.
Впрочем, хозяин - барин... :-)
Ответить