Что нового

[Автоматизация] Эмуляция наведения мышки.

lazarxxx

Новичок
Сообщения
53
Репутация
2
Доброго всем времени и с наступающим!
Возник такой вопрос, возможно-ли имитировать наведения мышки на объект так как некоторые клики просто не проходят если на них не наведена мышка!
Заранее благодарен!
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
Не пойдёт!
Пример того что я хочу! клик должен пройти вот так
Код:
for $=20
ControlClick("Имя окна","" ,"id","Left",1,30,76)
sleep (1000)
next

Всем понятно что кнопка находится в панели по координатам 30-76
Дело в том что клик не проходит пока не навести мышку на это место!
Сама кнопка не имеет id
Смысл во всём этом сделать так чтоб курсор мыши не двигался а операция прошла!
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
lazarxxx [?]
Код:
$aPos = ControlGetPos( "Имя окна", "" ,"id" )
MouseClick( "left", $aPos[0] + 30, $aPos[1] + 76, 1 )


Пойдет. Функция MouseClick автоматически наводит курсор(MouseMove) и кликнет.
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
В том то и дело мне нужно чтоб курсор мышки не двигался при выполнении этой задачи!!!


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

Основной вопрос в том, как сделать чтоб программа думала что курсор мыши находится по координатам допустим (100,100,101,101) при этом курсор мыши на экране находился бы в другом месте (неважно где или в пустой зоне)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
lazarxxx
Можно передать элементу WM_MOUSEHOVER, а следом и WM_KEYDOWN / WM_KEYUP.

Я конечно наверняка не знаю что в этом случае лучше подойдет, да и сработает ли оно вообще, опытные должны найти решение получше:

Код:
$hWnd = ControlGetHandle( "Имя окна", "" ,"id" )
_ControlClickEx( $hWnd, "left", 1, 30, 76 )

Func _ControlClickEx( $hWnd, $sButton = "left", $iClicks = 1, $iX = 0, $iY = 0, $iClickDownTime = 0, $iClickDelay = 200 )
	Local $User32Dll = DllOpen( "user32.dll" ), $vButton, $Idx, $tPOINT, $pPOINT
	; ---
	Switch $sButton
		Case "middle"
			$vButton = 0x04
		Case "right"
			$vButton = 0x02
		Case Else
			$vButton = 0x01
	EndSwitch
	If Not $iX And Not $iY Then
		$pPOINT = 0
	Else
		$tPOINT = DLLStructCreate( $tagPOINT )
			DLLStructSetData( $tPOINT, "X", $iX )
			DLLStructSetData( $tPOINT, "Y", $iY )

		$pPOINT = DllStructGetPtr( $tPOINT )
	EndIf
	; ---
	DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x02A1, "int", 0, "int", $pPOINT ) ;На счет wParam не уверен.
	For $Idx = 1 To $iClicks Step 1
		DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x0100, "int", $vButton, "int", $pPOINT )
		If $iClickDownTime Then _
			Sleep( $iClickDownTime )

		DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x0101, "int", $vButton, "int", $pPOINT )
		If $iClickDelay And $Idx < $iClicks Then _
			Sleep( $iClickDelay )
	Next
    ; ---
    DllClose( $User32Dll )
EndFunc
 
Верх