Что нового

Выбрать пункт меню из стороннего приложения при помощи мыши

Автор
Ежевика

Ежевика

Новичок
Сообщения
10
Репутация
0
Запускаю через F5, мне сразу попалось.

Код:
$hWnd = WinGetHandle('[Title:Имя программы [progr_maingui];Class:AppGUI]')
If Not $hWnd Then Exit 1
ControlClick($hWnd, '', '[CLASS:Static; INSTANCE:10]','left',1,10,10)
MouseClick ("left")

MouseClick срабатывает в месте, где находится курсор.
ControlClick не срабатывает.
Exit code: 0
Может, можно как-то установить курсор на нужный элемент, а потом дать команду MouseClick без координат?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Можно, через MouseMove Вот тут все функции http://autoit-script.ru/autoit3_docs/functions/ ищите mouse


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

и еще можно делать клики относительно окна программы.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ежевика,
А если так попробовать?
Код:
;~ Заголовок окна поменяйте на свой
$hWnd = WinGetHandle('[Title:Заголовок окна;Class:AppGUI]')
;~ или
;~ $hWnd = WinWait('[Title:Заголовок окна;Class:AppGUI]', '', 3)
If Not $hWnd Then Exit 1
$hStatic = ControlGetHandle($hWnd, '', '[CLASS:Static; INSTANCE:10]')
If Not $hStatic Then Exit 2
ControlFocus($hWnd, '', $hStatic)
ControlClick($hWnd, '', $hStatic)



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

Или так?
Код:
Opt('MouseCoordMode', 2)

;~ Заголовок окна поменяйте на свой
$hWnd = WinGetHandle('[Title:Заголовок окна;Class:AppGUI]')
If Not $hWnd Then Exit 1
$hStatic = ControlGetHandle($hWnd, '', '[CLASS:Static; INSTANCE:10]')
If Not $hStatic Then Exit 2
$aPos = ControlGetPos($hWnd, '', $hStatic)
If @error Then Exit 3
If Not WinActive($hWnd) Then WinActivate($hWnd)
If Not WinWaitActive($hWnd, '', 3) Then Exit 4
MouseClick('primary', $aPos[0] + $aPos[2] / 2, $aPos[1] + $aPos[3] / 2, 1, 0)
 
Автор
Ежевика

Ежевика

Новичок
Сообщения
10
Репутация
0
madmasles, второй вариант работает!

Спасибо большое.
Теперь надо научиться делать клик за кликом подряд, и все будет готово. :stars:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ежевика [?]
Теперь надо научиться делать клик за кликом подряд
Можно сделать примерно так.
Код:
;~ Заголовок окна поменяйте на свой
$hWnd = WinGetHandle('[Title:Заголовок окна;Class:AppGUI]')
If Not $hWnd Then Exit 1

ConsoleWrite('_MouseClickControl: ' & _MouseClickControl($hWnd, '[CLASS:Static; INSTANCE:10]') & @LF)
ConsoleWrite('_MouseClickControl: ' & _MouseClickControl($hWnd, '[CLASS:Static; INSTANCE:11]') & @LF);11 - для примерва

Func _MouseClickControl($h_Wnd, $h_Control, $s_Text = '', $s_Button = 'primary', $i_Clicks = 1, $f_NoMoveMouse = True)
	Local $i_Ret = 0, $a_Mouse, $i_OptMCM, $i_OptWWD, $ai_Opt[2], $a_Pos

	Do
		If Not IsHWnd($h_Wnd) Then $h_Wnd = WinGetHandle($h_Wnd, $s_Text)
		If Not $h_Wnd Then ExitLoop
		If Not IsHWnd($h_Control) Then $h_Control = ControlGetHandle($h_Wnd, '', $h_Control)
		If Not $h_Control Then ExitLoop
		If $f_NoMoveMouse Then $a_Mouse = MouseGetPos()
		$i_OptMCM = Opt('MouseCoordMode', 2)
		$ai_Opt[0] = 1
		$i_OptWWD = Opt('WinWaitDelay', 50)
		$ai_Opt[1] = 1
		$a_Pos = ControlGetPos($h_Wnd, '', $h_Control)
		If @error Then ExitLoop
		If Not WinActive($h_Wnd) Then WinActivate($h_Wnd)
		If Not WinWaitActive($h_Wnd, '', 3) Then ExitLoop
		If Not MouseClick($s_Button, $a_Pos[0] + $a_Pos[2] / 2, $a_Pos[1] + $a_Pos[3] / 2, $i_Clicks, 0) Then ExitLoop
		$i_Ret = 1
	Until 1
	If $ai_Opt[0] Then Opt('MouseCoordMode', $i_OptMCM)
	If $ai_Opt[1] Then Opt('WinWaitDelay', $i_OptWWD)
	If IsArray($a_Mouse) Then MouseMove($a_Mouse[0], $a_Mouse[1], 0)
	Return $i_Ret
EndFunc   ;==>_MouseClickControl
 
Верх