Страница 1 из 1

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

Добавлено: 10 Июнь 2019, 9:47
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?

Подучить ControlID

Добавлено: 10 Июнь 2019, 9:55
Constantine
Ну, HANDLE окна или контрола получить просто:
0{PROP:HANDLE} - Handle окна;
?Control{PROP:HANDLE} - Handle контрола.
Непонятно, что такое ControlID... Это из какого хелпа цитата?

Подучить ControlID

Добавлено: 10 Июнь 2019, 11:43
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 меняются при каждом запуске

Подучить ControlID

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

Подучить ControlID

Добавлено: 10 Июнь 2019, 12:53
Constantine
На всякий случай, прототип функции:
GetDlgCtrlID(LONG),LONG,PASCAL

Подучить ControlID

Добавлено: 10 Июнь 2019, 13:09
Constantine
И еще непонятно: нужно в кларионовской программе нажать на кнопку или из кларионовской программы нажать на кнопку в другой программе?

Подучить ControlID

Добавлено: 10 Июнь 2019, 14:17
morkovin
Из кларионовской (моей) проги хотел заполнять Логин+Пароль+ОК в другой проге.

Подучить ControlID

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

Подучить ControlID

Добавлено: 10 Июнь 2019, 14:26
Constantine
Пример можно посмотреть здесь:
https://stackoverflow.com/questions/122 ... -c-windows

Подучить ControlID

Добавлено: 10 Июнь 2019, 16:20
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-ми случайных символов, а Копи-паст не проходит.

Подучить ControlID

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

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

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

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

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

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

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