4

是否可以从 R 控制台控制鼠标指针?

我有这样的想法:

move_mouse(x_pos=100,y_pos=200)   # move the mouse pointer to position (100,200)
mouse_left_button_down            # simulate a press of the left button
move_mouse(x_pos=120,y_pos=250)   # move mouse to select something
mouse_release_left_button          # release the pressed button

在 MATLAB 中,可以使用以下代码进行类似的操作

import java.awt.Robot;
mouse = Robot;
mouse.mouseMove(0, 0);
mouse.mouseMove(100, 200);

我尝试将上述内容直接转换为如下所示的 R:

install.packages("rJava")          # install package
library(rJava)                     # load package
.jinit()                           # this starts the JVM
jRobot <- .jnew("java/awt/Robot")  # Create object of the Robot class

一旦我在 R 中获得了 jRobot,我尝试使用下面的两个命令调用它的方法“MouseMove(100,200)”,这两个命令都导致了错误。

jRobot$mouseMove(10,10)

Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
              java.lang.NoSuchMethodException: No suitable method for the given parameters

或者

.jcall(jRobot,, "mouseMove",10,10)
Error in .jcall(jRobot, , "mouseMove", 10, 10) : 
              method mouseMove with signature (DD)V not found
4

4 回答 4

8

最后我发现了问题。您必须告诉 R 100 是一个整数,以便正确地将其传递给 java。

install.packages("rJava")          # install package
library(rJava)                     # load package
.jinit()                           # this starts the JVM
jRobot <- .jnew("java/awt/Robot")  # Create object of the Robot class

# Let java sleep 500 millis between the simulated mouse events
.jcall(jRobot,, "setAutoDelay",as.integer(500))

# move mouse to 100,200 and select the text up to (100,300)         
.jcall(jRobot,, "mouseMove",as.integer(100),as.integer(200))
.jcall(jRobot,, "mousePress",as.integer(16))
.jcall(jRobot,, "mouseMove",as.integer(100),as.integer(300))
.jcall(jRobot,, "mouseRelease",as.integer(16))
于 2013-11-01T11:10:49.173 回答
3

截至 2017 年,CRAN 有一个称为rMouse处理鼠标移动的包。

library(rMouse)
move(0,0)       # move to top left corner (0,0)
move(50,30)     # move to pixel x = 50, y = 30
left()          # left click
right()         # right click

在引擎盖下,它仍然使用 Java 的机器人。

同样,KeyboardSimulator2018 年发布的软件包似乎在做同样的事情

于 2018-10-15T21:17:54.680 回答
2

什么操作系统?在 Linux 中,您可以xdotool从 Rsystem函数中使用和调用它。

> mousemove=function(x,y){system(paste0("xdotool mousemove ",x," ",y))}
> mousemove(0,0)
> mousemove(500,500)

请注意,这些是屏幕坐标,与 R 图形窗口中的坐标无关,但您并不清楚您想要什么。您可以使用其他一些 X11 实用程序获取 R 图形窗口的屏幕坐标,并根据需要在绘图上定位。

在 Windows 中,您可能还可以利用其他一些鼠标调整程序。身份证。

xdotool 信息:http ://tuxradar.com/content/xdotool-script-your-mouse

对该文章的进一步阅读展示了如何激活特定窗口并在其中执行鼠标操作。

于 2013-11-01T09:55:48.170 回答
2

如果您使用的是 Windows,library(KeyboardSimulator)是最简单的方法。

您可以使用它在 R 中制作机器人

查看示例: 在 R (RStudio) 中移动鼠标 在 R (Rstudio) 中为社交媒体制作机器人

于 2020-06-03T12:46:57.813 回答