如何在SikuliX(Java)中单击当前鼠标位置?

问题描述 投票:0回答:1

这是我尝试过的:

Screen screenWithCalendarField = new Screen();
Match calendar = new Match();

try{
    calendar = screenWithCalendarField.find(new File("D:\\Sikuli\\CalendarField.png").getAbsolutePath());
}
catch(Exception e){
}

calendar.hover();
delay(5)
calendar.mouseMove(25, 0)
delay(10)
calendar.click();

鼠标按预期移动(距离比赛右侧 25 像素),但随后又向后移动,并且仍然在比赛位置执行单击。

我应该使用什么来在距离比赛右侧 25 像素处完成点击?

sikuli-x
1个回答
0
投票

这是来自 SikuliX 的 RaiMan。

由于

calendar
是一场比赛,因此
click()
将始终单击当前与比赛一起存储的位置(在您的情况下为中心)。
mouseMove()
只移动鼠标,但不会改变比赛中存储的位置。

要单击当前鼠标位置而不是

calendar.click()
,请使用
screenWithCalendarField.click(Mouse.at())
。 您也可以使用
calendar.click()
,但使用 Screen 类更清晰,因为无论如何当前鼠标位置都在屏幕坐标中。

如果您想要单击的偏移量从一开始就已知,您应该使用 Pattern 类来定义要搜索的对象,因为它允许设置要搜索的图像的偏移量。

这就是我的版本(简化以显示基础知识):

Screen scr = new Screen;
String image = "D:\\Sikuli\\CalendarField.png";
Pattern pattern = new Pattern(image).targetOffset(25, 0);

Match calendar = scr.exists(pattern, 0);   
if (offset != null) calendar.click();
else doSomethingIfNotFound(pattern); //doSomethingIfNotFound to be defined ;-)

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.