控制台模拟鼠标、键盘操作

控制台模拟鼠标、键盘操作 

模拟鼠标、键盘操作,能让命令行顿然强大,想想,制作批处理版屏幕键盘等都不在话下(已制作过,效果很不错)。虽然这也跟CUI无关。本教程教会你如何让命令行模拟鼠标、键盘的操作。

鼠标的击键操作,需要用到mouse_event这个API函数。

示例代码:

模拟左键单击:

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

注意到了,其实一次击键是由两部分组成的:按下与释放。所以模拟一次单击要有DOWN及UP两次。

其他键位的属性如下,更改以上代码即可实现:

MOUSEEVENTF_RIGHTDOWN、MOUSEEVENTF_RIGHTUP;
MOUSEEVENTF_MIDDLEDOWN、MOUSEEVENTF_MIDDLEUP;

模拟鼠标移位需要用到SetCursorPos这个API函数。尽管mouse_event也能实现模拟移位的效果,但是个人认为用SetCursorPos可能要简单一点。

示例代码:

将鼠标移位到屏幕(120,100)处:

SetCursorPos(120,100);

模拟键盘击键,可以使用keybd_event这个API函数。这个API函数没有太多需要注意的地方,直接看示例代码:

模拟按下A键:

keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);

可以发现,跟mouse_event一样,也有按下和释放两个部分。65是A的ASCII码(也可称为扫描码),其他键位对应的码值可以查Winuser.h中“Virtual Keys, Standard Set的部分。

你可以使用Java AWT和Robot类来模拟鼠标键盘操作。下面是一个简单的例子,可以录制鼠标键盘操作。 ```java import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; public class Recorder { private Robot robot; private List<Action> actions; public Recorder() throws AWTException { this.robot = new Robot(); this.actions = new ArrayList<>(); } public void start() { robot.mouseMove(0, 0); robot.mousePress(MouseEvent.BUTTON1_DOWN_MASK); actions.add(new Action(ActionType.MOUSE_PRESSED, robot.getPixelColor(0, 0), robot.getPixelColor(0, 0), robot.getMousePosition(), 0)); } public void stop() { robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK); actions.add(new Action(ActionType.MOUSE_RELEASED, robot.getPixelColor(0, 0), robot.getPixelColor(0, 0), robot.getMousePosition(), 0)); } public void type(String text) { for (char c : text.toCharArray()) { int keyCode = KeyEvent.getExtendedKeyCodeForChar(c); robot.keyPress(keyCode); robot.keyRelease(keyCode); actions.add(new Action(ActionType.KEY_PRESSED, null, null, null, keyCode)); actions.add(new Action(ActionType.KEY_RELEASED, null, null, null, keyCode)); } } public List<Action> getActions() { return actions; } public static void main(String[] args) throws AWTException { Recorder recorder = new Recorder(); recorder.start(); recorder.type("Hello, World!"); recorder.stop(); System.out.println(recorder.getActions()); } } enum ActionType { MOUSE_PRESSED, MOUSE_RELEASED, KEY_PRESSED, KEY_RELEASED } class Action { private ActionType type; private Color beforeColor; private Color afterColor; private Point mousePosition; private int keyCode; public Action(ActionType type, Color beforeColor, Color afterColor, Point mousePosition, int keyCode) { this.type = type; this.beforeColor = beforeColor; this.afterColor = afterColor; this.mousePosition = mousePosition; this.keyCode = keyCode; } public ActionType getType() { return type; } public Color getBeforeColor() { return beforeColor; } public Color getAfterColor() { return afterColor; } public Point getMousePosition() { return mousePosition; } public int getKeyCode() { return keyCode; } @Override public String toString() { return "Action{" + "type=" + type + ", beforeColor=" + beforeColor + ", afterColor=" + afterColor + ", mousePosition=" + mousePosition + ", keyCode=" + keyCode + '}'; } } ``` 这个例子演示了如何记录鼠标点击键盘输入。当你调用`start()`方法时,程序会模拟鼠标按下,然后将这个操作添加到一个操作列表中。当你调用`type(String text)`方法时,程序会模拟键盘输入,然后将每个按键按下和释放的操作添加到操作列表中。最后,当你调用`stop()`方法时,程序会模拟鼠标释放,并将这个操作添加到操作列表中。 你可以在控制台中查看操作列表,或者将它们保存到文件中以供以后使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值