`
hqs7636
  • 浏览: 220946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用SWT模拟鼠标键盘事件

阅读更多
  http://www.javaresearch.org/forum/thread.jsp?column=286&thread=69062


最近在学习SWT/JFace,在做一个小东西的时候需要模拟鼠标键盘事件,在网上搜了一下,在java中模拟这些事件,主要有两种方法:

一、使用AWT中的Robot类
Robot
java.lang.Object
java.awt.Robot

--------------------------------------------------------------------------------

public class Robotextends Object 此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。类中几个主要的模拟函数如下:
void keyPress(int keycode)
          按下给定的键。
void keyRelease(int keycode)
          释放给定的键。
void mouseMove(int x, int y)
          将鼠标指针移动到给定屏幕坐标。
void mousePress(int buttons)
          按下一个或多个鼠标按钮。
void mouseRelease(int buttons)
          释放一个或多个鼠标按钮。
void mouseWheel(int wheelAmt)
          在配有滚轮的鼠标上旋转滚轮。

二、使用SWT中的鼠标键盘事件
    在SWT的snippets中有两个例子用来介绍这两个方法的使用,如下:

(1)、模拟鼠标事件
* UI Automation (for testing tools) snippet: post mouse events
import org.eclipse.swt.*;
public class Snippet142 {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
final Button button = new Button(shell,SWT.NONE);
button.setSize(100,100);
button.setText("Click");
shell.pack();
shell.open();
button.addListener(SWT.MouseDown, new Listener() {
  public void handleEvent(Event e){
   System.out.println("Mouse Down (button: " + e.button + " x: " + e.x + " y: " + e.y + ")");
  }
});
final Point pt = display.map(shell, null, 50, 50);
new Thread(){
  Event event;
  public void run(){
   try {
    Thread.sleep(300);
   } catch (InterruptedException e) {}
   event = new Event();
   event.type = SWT.MouseMove;
   event.x = pt.x;
   event.y = pt.y;
   display.post(event);
   try {
    Thread.sleep(300);
   } catch (InterruptedException e) {}
   event.type = SWT.MouseDown;
   event.button = 1;
   display.post(event);
   try {
    Thread.sleep(300);
   } catch (InterruptedException e) {}
   event.type = SWT.MouseUp;
   display.post(event);
  }
}.start();
while (!shell.isDisposed()) {
  if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
(2)、模拟键盘事件

* UI Automation (for testing tools) snippet: post key events
import org.eclipse.swt.*;
public class Snippet146 {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
final Text text = new Text(shell, SWT.BORDER);
text.setSize(text.computeSize(150, SWT.DEFAULT));
shell.pack();
shell.open();
new Thread(){
  public void run(){
   String string = "Love the method.";
   for (int i = 0; i < string.length(); i++) {
    char ch = string.charAt(i);
    boolean shift = Character.isUpperCase(ch);
    ch = Character.toLowerCase(ch);
    if (shift) {
     Event event = new Event();
     event.type = SWT.KeyDown;
     event.keyCode = SWT.SHIFT;
     display.post(event);
    }
    Event event = new Event();
    event.type = SWT.KeyDown;
    event.character = ch;
    display.post(event);
    try {
     Thread.sleep(10);
    } catch (InterruptedException e) {}
    event.type = SWT.KeyUp;
    display.post(event);
    try {
     Thread.sleep(100);
    } catch (InterruptedException e) {}
    if (shift) {
     event = new Event();
     event.type = SWT.KeyUp;
     event.keyCode = SWT.SHIFT;
     display.post(event);
    }
   }
  }
}.start();
while (!shell.isDisposed()) {
  if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}

两种方法中都是先声明一个Event,然后将该Event的type类型设置为对应的SWT.KeyUp/KeyDown/MouseUp/MouseDown,最后通过Display类的post(Event)方法来模拟对应的事件。注意:如果有多个控件,需要得到对应控件的display属性,然后post该事件。
例如,在一个窗口中有一个Browser,则需要使用thisClass.browser.getDisplay().post(event)。


分享到:
评论

相关推荐

    java控制windows鼠标键盘

    AWT提供了诸如`Robot`类,它允许我们模拟鼠标和键盘事件。例如,`Robot.createRobot()`方法用于创建一个Robot实例,之后可以调用`mouseMove(int x, int y)`来移动鼠标,`mousePress(int buttonMask)`和`mouseRelease...

    Java实现软键盘代码,HOOK调用

    - **第三方库**: 如JNA(Java Native Access)或JNI(Java Native Interface),它们允许Java代码直接调用本地(操作系统)函数,包括系统级的键盘事件处理。 总的来说,这个项目提供了一个Java实现软键盘并利用...

    SWT的自动化测试框架

    3. **事件模拟**:SWTBot能够模拟各种用户事件,如键盘输入、鼠标点击、窗口操作等,从而全面覆盖用户可能的操作。 4. **断言支持**:提供丰富的断言方法来检查应用程序的状态,例如`bot.textWithLabel("Username")...

    java键盘鼠标模拟监控

    窗口装饰功能: 提供窗口置顶,透明,闪动等功能。 自定义窗口: 创建不规则的窗口。 访问Windows注册表。... 值得一提的是,您能够访问SWT提供的所有功能,因为SWT Win32 Extension是从SWT派生出来的。

    abbot eclipse plugin测试 swt测试

    - **abbot**:这是基础包,包含Abbot的核心测试工具和类,如鼠标和键盘模拟、窗口和组件的查找等。 - **abbot.swt**:这个包专门用于SWT组件的测试,提供了与SWT控件交互的方法。 - **abbot.swt.eclipse**:这...

    JAVA实现按键精灵效果

    总的来说,通过JNA和`swt.win32.extension`,Java程序员能够跨越Java和C之间的障碍,实现对操作系统底层功能的调用,比如设置全局键盘钩子,从而构建出能够自动响应键盘事件的工具,比如按键精灵。这在自动化测试、...

    Java 舰船模拟

    在舰船模拟游戏中,可能需要监听鼠标点击事件来放置舰船,或者处理键盘输入来控制舰船移动。这些事件通过SWT提供的监听器接口实现,如MouseListener和KeyListener。 此外,文件I/O操作可能也会出现在这个项目中,...

    Java语言的Hook实现[参照].pdf

    - 在上述场景中,作者想要实现一个自动答题工具,通过键盘Hook监听特定按键,然后模拟鼠标移动到特定位置并点击,以提高游戏中的答题速度。通过键盘Hook,可以在任何窗口背景下响应按键事件,而不仅仅是Java程序...

    抓快照jar包

    SWT库可能被用来创建图形化的用户界面,包括登录表单,而DJNativeSwing则可能用于实现与操作系统更紧密的交互,如模拟鼠标点击、键盘输入等,以完成自动登录的过程。DJNativeSwing-SWT的结合则可能提供了一种在Swing...

    Java语言的Hook实现

    该类实现了`HookEventListener`接口,主要用于监听键盘事件。具体实现包括: - `acceptHookData`方法:接收来自Hook系统的数据,并根据数据的不同类型做出相应处理。 - `doPress`方法:当按键被按下时触发。 - `...

    在电脑上 模拟JAVA 手机游戏 本人测试了可用

    6. `jinput-dx8.dll`:JInput是一个Java库,提供对多种输入设备(如游戏控制器、键盘和鼠标)的支持,这里的dx8可能指的是DirectX 8,表明模拟器使用DirectX进行图形渲染。 综合以上分析,这个压缩包提供了一套在...

    用java robot实现超简单爬虫.doc

    在Java编程中,`Robot`类是Java AWT(Abstract Window Toolkit)库的一部分,它允许程序员模拟用户的键盘和鼠标操作。`Robot`类通常用于自动化测试、自运行演示或者任何需要控制硬件输入的场景。通过创建`Robot`对象...

    最新手机模拟器+手机QQ

    10. `jinput-dx8.dll` - JInput是一个Java库,用于接收来自游戏设备(如键盘、鼠标、游戏手柄等)的输入,可能用于模拟器的游戏控制器支持。 这些文件共同构成了一个手机模拟器的环境,允许用户在电脑上运行和操作...

    KEmulator另一个电脑模拟手机JAVA程序软件

    8. **jinput-dx8.dll**:JInput是一个Java库,用于接收和处理输入设备的数据,如鼠标和键盘,使KEmulator能够响应用户的操作。 通过这些组件,KEmulator成功地在电脑上构建了一个模拟的手机环境,用户可以在该环境...

    SWTBot自动化测试学习软件

    3. **事件模拟**:通过SWTBot,你可以触发各种用户事件,如键盘输入、鼠标点击等,从而测试这些事件触发后程序的响应情况。 4. **断言和验证**:SWTBot提供了丰富的断言方法,可以用来验证控件的状态、内容或值是否...

    手机JAR模拟器 KEmulator

    10. `jinput-dx8.dll`:Java输入API的DirectX 8版,用于处理键盘、鼠标等输入设备的信号,使模拟器能够响应用户的操作。 这些组件共同协作,构建出一个完整的手机环境模拟,使用户能够在电脑上顺畅地运行和测试JAR...

    JAVA模拟器KEmulator.rar

    10. **jinput-dx8.dll**: JInput是Java的输入处理库,这里可能是针对DirectX 8的实现,用于捕获和处理用户输入,如键盘、鼠标和游戏控制器的操作。 这些DLL文件共同构成了KEmulator的运行环境,确保它能够顺利运行...

    Kemulator0.9.4

    10. **jinput-dx8.dll** - JInput是一个Java输入处理库,可能用于处理来自键盘、鼠标等输入设备的信号,为模拟器提供用户交互能力。 总结来说,Kemulator 0.9.4是一款强大的手机模拟软件,它利用一系列的DLL文件...

    窗口抓取、属性查看工具SPY++

    你可以跟踪一个特定窗口接收到的所有消息,包括鼠标点击、键盘输入、系统通知等。这种功能有助于开发者理解应用程序的事件处理机制,排查因消息处理不当导致的问题。 ### 四、句柄操作 句柄在Windows编程中起着至...

    kjava模拟器免安装版

    10. **jinput-dx8.dll**:JInput是Java的输入处理库,此DLL可能用于处理DirectX 8的输入设备,如键盘、鼠标或游戏控制器。 这些库文件共同构成了KJava模拟器的运行环境,确保了对KJava应用的兼容性和性能。开发者...

Global site tag (gtag.js) - Google Analytics