Что нового

найти координаты для MouseClick

Zomby_I

Новичок
Сообщения
6
Репутация
1
задача стояла просто - сделать так, чтоб ПО развернулось на полный экран без участия пользователя,
все нужное нашел в хелпе, но столкнулся с проблемой - MouseClick использует отсчёт координат с позиции курсора, а мне нужен клик в определенной области активной программы, причем - позиция окна ПО может измениться (многомониторный режим),
вот что получил от AutoIt Window Info:
>>>> Window <<<<
Title: iVMS-4200
Class: QWidget
Position: 1024, 122
Size: 1024, 768
Style: 0x96080000
ExStyle: 0x00000000
Handle: 0x0000000000061B3C

>>>> Control <<<<
Class: QWidget
Instance: 334
ClassnameNN: QWidget334
Name:
Advanced (Class): [CLASS:QWidget; INSTANCE:334]
ID:
Text: m_pFramePreViewCtrl
Position: 244, 682
Size: 536, 71
ControlClick Coords: 36, 29
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x0000000000071428

>>>> Mouse <<<<
Position: 1304, 833
Cursor ID: 0
Color: 0x171717

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
CAlarmEventClass
CMainViewClass
m_pStackedWidget
m_pPagePlayArea
m_pFramePlayArea
m_pFrameBottom
m_pDate
m_pFramePreViewCtrl
m_pFramePlayState
widgetGap
m_pFrameGroup
m_pGroupTree
qt_scrollarea_vcontainer
qt_scrollarea_viewport
pTopFrame


>>>> Hidden Text <<<<
CUiPlayerWndBottom
m_pPagePicture
m_pFrameSnapshot
m_pTimeSlider
qt_scrollarea_hcontainer
qt_rubberband

вот что выполнил по нелпу:
Код:
; Ожидание 5 секунд до появление окна
$hWnd = WinWait("[CLASS:QWidget]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Предупреждение', 'iVMS-4200 Client не загружен')
    Exit
EndIf

; Делает активным окном.
WinActivate($hWnd)

If WinActive($hWnd) Then
    MsgBox(4096, "", "Окно iVMS-4200 сейчас активно")
Else
    MsgBox(4096, "", "Окно iVMS-4200 не активно")
EndIf

MouseClick("left",280,712,1)

осталось только найти и подставить правильные координаты в MouseClick
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Добавь в начало скрипта такую опцию:
Код:
Opt("MouseCoordMode", 2)

теперь координаты для мышки можно указывать относительно клиентской области активного окна а не всего экрана.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
задача стояла просто - сделать так, чтоб ПО развернулось на полный экран без участия пользователя
Код:
Run("notepad.exe", "", @SW_MAXIMIZE)

:scratch:
 
Автор
Z

Zomby_I

Новичок
Сообщения
6
Репутация
1
>сделать так, чтоб ПО развернулось на полный экран без участия пользователя

я неверно сформулировал задачу :-[, правильно - перешло в полноэкранный режим,
а не развернуло окно на весь экран(второе можно просто в бат-файле прописать).
 

mr.Gbabak

Осваивающий
Сообщения
251
Репутация
22
Zomby_I [?]
MouseClick использует отсчёт координат с позиции курсора
MouseClick использует начало отсчета от верхнего левого угла монитора (при MouseCoordMode равном 1) и от левого верхнего угла клиентской части приложения при MouseCoordMode равном 2.

А горячие клавиши в приложении есть?
 

mr.Gbabak

Осваивающий
Сообщения
251
Репутация
22
Zomby_I
Скрин программы выложи, чтоб видеть хотя-бы, что оно из себя представляет, и покажи как руками твое приложение переводится в полноэкранный режим...
 
Автор
Z

Zomby_I

Новичок
Сообщения
6
Репутация
1
вот эта кнопочка:
вот скрин:



Добавлено:
Сообщение автоматически объединено:

в общем должно быть:
Код:
; Пауза в ожидании полной загрузки iVMS-4200 Client
; Sleep (45000)

; Ожидание 20 секунд до появления окна.
$hWnd = WinWait("[CLASS:QWidget]", "", 2)
If Not $hWnd Then
MsgBox(4096, 'Предупреждение', 'iVMS-4200 Client не загружен')
 Exit
EndIf

; Делает окном активным.
WinActivate($hWnd)

; Проверка активности окна > тест.
If WinActive($hWnd) Then
MsgBox(4096, "", "Окно iVMS-4200 сейчас активно")
Else
MsgBox(4096, "", "Окно iVMS-4200 не активно")
EndIf

; Устанавливает кареточный способ координат в функциях мыши
; 0 > относительно координат клиентской области активного окна
Opt("MouseCoordMode", 1)

; Перевод приложения iVMS-4200 в полноэкранный режим.
MouseClick("left",280,711,1)

перебрал все значения MouseCoordMode 0 и 2 - курсор уходит в верхний левый угол экрана,
а 1 - естественно работает как надо, только если окно сдвинуто - не поможет
 

eropov

Jury
Сообщения
195
Репутация
25
Zomby_I
Скажите, а у кнопки есть class или еще что.
Попробуйте узнать с помощью AutoIt Window Info и попробуйте функцию:
Код:
ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')
 
Автор
Z

Zomby_I

Новичок
Сообщения
6
Репутация
1

mr.Gbabak

Осваивающий
Сообщения
251
Репутация
22
Zomby_I
Тогда пробуйте ControlClick вместо MouseClick
Код:
ControlClick ("iVMS-4200", "m_pFramePreViewCtrl", "", "left", 1, 280, 711)
 

chymax3m

Новичок
Сообщения
26
Репутация
1
А если так попробовать?
Код:
ControlClick ( "iVMS-4200", "m_pFramePreViewCtrl", "QWidget334")
;или так
ControlClick ( "iVMS-4200", "", "QWidget334")
 
Автор
Z

Zomby_I

Новичок
Сообщения
6
Репутация
1
без controlID - не работает (
 

chymax3m

Новичок
Сообщения
26
Репутация
1
Попробуйте утилиту Control View (Есть здесь на форуме) иногда она видит больше чем стандартная.
 

mr.Gbabak

Осваивающий
Сообщения
251
Репутация
22
Zomby_I [?]
без controlID - не работает (
Почему не работает?!! :scratch:, странно, должно работать, ты же выставляешь опознавательные элементы и точные координаты.

А, скинь ка скрипт, вместе с ControlClick, как ты делал?
 
Верх