Что нового

Клик по координатам в JAVA приложении

Ruganin

Новичок
Сообщения
1
Репутация
0
Как сделать клик без перемещения курсора?

DllCall не знаю как прописать правильно параметры.
Пробовал разные варианты, используя поиск.
Один из вариантов из поиска, который у меня не работает:
Код:
;RBUTTONDOWN   =  0x0204;  // Правая кнопка мыши нажата.
;RBUTTONUP     =  0x0205;  // Правая кнопка мыши отпущена.
;MOUSEMOVE     =  0x0200;  // Мышь передвинута.

Run("notepad.exe")
WinWaitActive("Безымянный — Блокнот")
$hWnd = WinGetHandle("[ACTIVE]")

$x = 100; // Координата по X
$y = 100; // Координата по Y

DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd, 'int', 0x0200, 'int', 0, 'dword', _WinAPI_MakeLong($X, $Y))
Sleep(50)
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd, 'int', 0x0204, 'int', 1, 'dword', _WinAPI_MakeLong($X, $Y))
Sleep(50)
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd, 'int', 0x0205, 'int', 1, 'dword', _WinAPI_MakeLong($X, $Y))

Func _WinAPI_MakeLong($iLo, $iHi)
	Return BitOR(BitShift($iHi, -16), BitAND($iLo, 0xFFFF))
EndFunc   ;==>_WinAPI_MakeLong
На Win8 х64 не работает. Блокнот запускается, правого клика не происходит.


ControlClick не могу использовать из за Java.
Java UDF пока сложновато для меня, и не ясно рабочая ли, автор 5 лет не появлялся.

Вот функция которую надо исправить, использует MouseClick, от которого требуется отказаться:
Код:
Func _Click($button)
	Opt("WinTitleMatchMode", 2); Параметр поиска по тайтлу
	Opt("MouseCoordMode", 0); Параметр - вести относительный окна, отсчет координат

	$cTab = "SunAwtFrame"; Класс окна
	$tTab = "ID=R5"; Уникальная часть тайтла

	$hWnd = WinGetHandle("[CLASS:" & $cTab & ";TITLE:" & $tTab & "]") ; Получаем дескриптор окна
	WinActivate($hWnd)
	$aPos = WinGetPos($hWnd); Получаем координаты и размер окна

	; Позиция кнопки всегда одинакова относительно нижнего левого угла окна
	$x = 18
	$y = $aPos[3] - 70

	$aMousePos = MouseGetPos(); Получаем позицию курсора для возврата назад

	If $button = "left" Then
		MouseClick("left", $x, $y, 1, 0); Совершаем клик левой кнопкой
	EndIf
	If $button = "right" Then
		MouseClick("right", $x, $y, 1, 0); Совершаем клик правой кнопкой
	EndIf

	MouseMove($aMousePos[0], $aMousePos[1], 0); Возвращаем курсор в исходное положение
EndFunc   ;==>_Click

Func _ClickL()
	_Click("left")
EndFunc   ;==>_ClickL

Func _ClickR()
	_Click("right")
EndFunc   ;==>_ClickR

HotKeySet("{F5}", _ClickL)
HotKeySet("{F6}", _ClickR)

While 1
	Sleep(100)
WEnd
 
Верх