是否可以从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
答案 0 :(得分:5)
最后我发现了问题。你必须告诉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))
答案 1 :(得分:2)
什么操作系统?在Linux中,您可以使用xdotool
并从R system
函数调用它。
> mousemove=function(x,y){system(paste0("xdotool mousemove ",x," ",y))}
> mousemove(0,0)
> mousemove(500,500)
请注意,这些是屏幕坐标,与R图形窗口中的坐标无关,但您不清楚自己想要什么。您可以使用其他一些X11实用程序获取R图形窗口的屏幕坐标,并在图表上定位,如果这是您想要的。
在Windows中,可能还有一些其他鼠标调整程序可供您使用。 IDK。
xdotool info:http://tuxradar.com/content/xdotool-script-your-mouse
进一步阅读该文章展示了如何激活特定窗口并在其中执行鼠标操作。
答案 2 :(得分:1)
截至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的机器人。
类似地,2018年发布的KeyboardSimulator
软件包似乎在做同样的事情
答案 3 :(得分:1)
如果您使用的是Windows,library(KeyboardSimulator)
是最简单的方法。
您可以使用它在R中制作机器人。
请参见示例: Move Mouse in R (RStudio) make a bot in R (Rstudio) for social media