Java实现系统快捷键
大约 2 分钟
jkeymaster
原生javaJDK并未提供访问操作,可能这是JVM的局限性吧 需要用到一个第三方包 jkeymaster 支持windows,mac,linux(X11) https://github.com/tulskiy/jkeymaster 可以选择自行构建,或者引入maven github介绍得很齐全
//引入依赖 keymaster 负责监听热键
import com.tulskiy.keymaster.common.HotKey;
import com.tulskiy.keymaster.common.HotKeyListener;
import com.tulskiy.keymaster.common.Provider;
//awt负责鼠标键盘信息获取和事件生成 例如鼠标移动,键盘输入
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
监听热键
private void initWindow() {
// 主类是Provider,获取当前平台(操作系统)的提供者
// Provider provider = Provider.getCurrentProvider(useSwingEventQueue);
Provider provider = Provider.getCurrentProvider(true);
// 注册热键,键值是以字符串的形式传递的
provider.register(KeyStroke.getKeyStroke("control alt D"), new HotKeyListener() {
@Override
public void onHotKey(HotKey arg0) {
syset.out.println("按下了ctrl+alt+d");
}
});
}
模拟按键
// 获取剪贴板内容
public String getPaste() {
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL); // 按下ctrl键
robot.keyPress(KeyEvent.VK_C); // 按下c键
robot.delay(50); //延迟50ms
robot.keyRelease(KeyEvent.VK_CONTROL); // 抬起ctrl键
robot.keyRelease(KeyEvent.VK_C); // 抬起c键
robot.delay(100); // 延时100ms
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//参见 开发-示例集合-Java-系统粘贴板
return Paste.getSysClipboardText().trim();
}
模拟鼠标
// 获取鼠标位置
Point p = MouseInfo.getPointerInfo().getLocation();
syset.out.println("鼠标位置:" + (int) p.getX()+ (int) p.getY());
try {
Robot robot = new Robot();
//移动鼠标
robot.mouseMove(100, 100);
//鼠标左键
robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);
//如果要实现鼠标双击左键,需要在中间延迟一定事件,否则系统无法捕捉过快双击
robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);
robot.delay(100); //延迟100ms
robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);
//鼠标中键
robot.mousePress(KeyEvent.BUTTON2_DOWN_MASK);
robot.mouseRelease(KeyEvent.BUTTON2_DOWN_MASK);
//鼠标右键
robot.mousePress(KeyEvent.BUTTON3_DOWN_MASK);
robot.mouseRelease(KeyEvent.BUTTON3_DOWN_MASK);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}