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

Clarion, Clarion 7

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

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

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

Сообщение morkovin » 10 Июнь 2019, 9:47

Цитата из хелпа:
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
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 9:55

Ну, HANDLE окна или контрола получить просто:
0{PROP:HANDLE} - Handle окна;
?Control{PROP:HANDLE} - Handle контрола.
Непонятно, что такое ControlID... Это из какого хелпа цитата?

Аватара пользователя
morkovin
Ветеран
Сообщения: 610
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Подучить ControlID

Сообщение morkovin » 10 Июнь 2019, 11:43

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
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 12:47

Так, теперь понятно.
Как получить Handle, написано выше, а Control ID, в данном случае, можно получить функцией:
https://docs.microsoft.com/en-us/window ... tdlgctrlid
Соответственно, делать все после открытия окна.

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 12:53

На всякий случай, прототип функции:
GetDlgCtrlID(LONG),LONG,PASCAL

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 13:09

И еще непонятно: нужно в кларионовской программе нажать на кнопку или из кларионовской программы нажать на кнопку в другой программе?

Аватара пользователя
morkovin
Ветеран
Сообщения: 610
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Подучить ControlID

Сообщение morkovin » 10 Июнь 2019, 14:17

Из кларионовской (моей) проги хотел заполнять Логин+Пароль+ОК в другой проге.
WBR, morkovin

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 14:22

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

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

Подучить ControlID

Сообщение Constantine » 10 Июнь 2019, 14:26

Пример можно посмотреть здесь:
https://stackoverflow.com/questions/122 ... -c-windows

Аватара пользователя
morkovin
Ветеран
Сообщения: 610
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Подучить ControlID

Сообщение morkovin » 10 Июнь 2019, 16:20

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
Ветеран
Сообщения: 1220
Зарегистрирован: 25 Март 2009, 21:55

Подучить ControlID

Сообщение gopstop2007 » 10 Июнь 2019, 17:16

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

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 11 Июнь 2019, 8:31

morkovin писал(а):
10 Июнь 2019, 16:20
hLoginId=16387
hPswId =16389
hOkBtn=16394 !get from WinSpy
Что-то я сомневаюсь, что эти ControlID всегда будут такими...
Однозначно, лучше получать их в динамике.

Аватара пользователя
morkovin
Ветеран
Сообщения: 610
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

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

Сообщение morkovin » 11 Июнь 2019, 9:14

Constantine писал(а):
11 Июнь 2019, 8:31
Что-то я сомневаюсь, что эти ControlID всегда будут такими...
проверил на рабочем сервере - всё совпадает.
WBR, morkovin

Constantine
Активист
Сообщения: 140
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 11 Июнь 2019, 9:51

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

Ответить