使用SWT模拟鼠标键盘事件
2009-05-26 22:09
716 查看
最近在学习SWT/JFace,在做一个小东西的时候需要模拟鼠标键盘事件,在网上搜了一下,在java中模拟这些事件,主要有两种方法:
此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot的主要目的是便于Java平台实现自动测试。类中几个主要的模拟函数如下:
二、使用SWT中的鼠标键盘事件
在SWT的snippets中有两个例子用来介绍这两个方法的使用,如下:
(1)、模拟鼠标事件
*UIAutomation(fortestingtools)snippet:postmouseevents
importorg.eclipse.swt.*;
publicclassSnippet142{
publicstaticvoidmain(String[]args){
finalDisplaydisplay=newDisplay();
finalShellshell=newShell(display);
finalButtonbutton=newButton(shell,SWT.NONE);
button.setSize(100,100);
button.setText("Click");
shell.pack();
shell.open();
button.addListener(SWT.MouseDown,newListener(){
publicvoidhandleEvent(Evente){
System.out.println("MouseDown(button:"+e.button+"x:"+e.x+"y:"+e.y+")");
}
});
finalPointpt=display.map(shell,null,50,50);
newThread(){
Eventevent;
publicvoidrun(){
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event=newEvent();
event.type=SWT.MouseMove;
event.x=pt.x;
event.y=pt.y;
display.post(event);
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event.type=SWT.MouseDown;
event.button=1;
display.post(event);
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event.type=SWT.MouseUp;
display.post(event);
}
}.start();
while(!shell.isDisposed()){
if(!display.readAndDispatch())display.sleep();
}
display.dispose();
}
}
(2)、模拟键盘事件
*UIAutomation(fortestingtools)snippet:postkeyevents
importorg.eclipse.swt.*;
publicclassSnippet146{
publicstaticvoidmain(String[]args){
finalDisplaydisplay=newDisplay();
finalShellshell=newShell(display);
finalTexttext=newText(shell,SWT.BORDER);
text.setSize(text.computeSize(150,SWT.DEFAULT));
shell.pack();
shell.open();
newThread(){
publicvoidrun(){
Stringstring="Lovethemethod.";
for(inti=0;i<string.length();i++){
charch=string.charAt(i);
booleanshift=Character.isUpperCase(ch);
ch=Character.toLowerCase(ch);
if(shift){
Eventevent=newEvent();
event.type=SWT.KeyDown;
event.keyCode=SWT.SHIFT;
display.post(event);
}
Eventevent=newEvent();
event.type=SWT.KeyDown;
event.character=ch;
display.post(event);
try{
Thread.sleep(10);
}catch(InterruptedExceptione){}
event.type=SWT.KeyUp;
display.post(event);
try{
Thread.sleep(100);
}catch(InterruptedExceptione){}
if(shift){
event=newEvent();
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)。
一、使用AWT中的Robot类
Robot
java.lang.Object java.awt.Robot
publicclassRobotextendsObject
此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot的主要目的是便于Java平台实现自动测试。类中几个主要的模拟函数如下:
void |
按下给定的键。 |
void |
释放给定的键。 |
void |
将鼠标指针移动到给定屏幕坐标。 |
void |
按下一个或多个鼠标按钮。 |
void |
释放一个或多个鼠标按钮。 |
void |
在配有滚轮的鼠标上旋转滚轮。 |
在SWT的snippets中有两个例子用来介绍这两个方法的使用,如下:
(1)、模拟鼠标事件
*UIAutomation(fortestingtools)snippet:postmouseevents
importorg.eclipse.swt.*;
publicclassSnippet142{
publicstaticvoidmain(String[]args){
finalDisplaydisplay=newDisplay();
finalShellshell=newShell(display);
finalButtonbutton=newButton(shell,SWT.NONE);
button.setSize(100,100);
button.setText("Click");
shell.pack();
shell.open();
button.addListener(SWT.MouseDown,newListener(){
publicvoidhandleEvent(Evente){
System.out.println("MouseDown(button:"+e.button+"x:"+e.x+"y:"+e.y+")");
}
});
finalPointpt=display.map(shell,null,50,50);
newThread(){
Eventevent;
publicvoidrun(){
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event=newEvent();
event.type=SWT.MouseMove;
event.x=pt.x;
event.y=pt.y;
display.post(event);
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event.type=SWT.MouseDown;
event.button=1;
display.post(event);
try{
Thread.sleep(300);
}catch(InterruptedExceptione){}
event.type=SWT.MouseUp;
display.post(event);
}
}.start();
while(!shell.isDisposed()){
if(!display.readAndDispatch())display.sleep();
}
display.dispose();
}
}
(2)、模拟键盘事件
*UIAutomation(fortestingtools)snippet:postkeyevents
importorg.eclipse.swt.*;
publicclassSnippet146{
publicstaticvoidmain(String[]args){
finalDisplaydisplay=newDisplay();
finalShellshell=newShell(display);
finalTexttext=newText(shell,SWT.BORDER);
text.setSize(text.computeSize(150,SWT.DEFAULT));
shell.pack();
shell.open();
newThread(){
publicvoidrun(){
Stringstring="Lovethemethod.";
for(inti=0;i<string.length();i++){
charch=string.charAt(i);
booleanshift=Character.isUpperCase(ch);
ch=Character.toLowerCase(ch);
if(shift){
Eventevent=newEvent();
event.type=SWT.KeyDown;
event.keyCode=SWT.SHIFT;
display.post(event);
}
Eventevent=newEvent();
event.type=SWT.KeyDown;
event.character=ch;
display.post(event);
try{
Thread.sleep(10);
}catch(InterruptedExceptione){}
event.type=SWT.KeyUp;
display.post(event);
try{
Thread.sleep(100);
}catch(InterruptedExceptione){}
if(shift){
event=newEvent();
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)。
相关文章推荐
- 使用SWT模拟鼠标键盘事件
- 使用SWT模拟鼠标键盘事件
- Android 使用 sendevent 模拟鼠标和键盘事件
- Android 使用 sendevent 模拟鼠标和键盘事件
- keybd_event,mouse_event 模拟产生键盘事件、鼠标事件的使用
- 使用JS或jQuery模拟鼠标点击a标签事件代码
- Android 模拟键盘鼠标事件
- QTP模拟鼠标和键盘事件整理
- 使用JS或jQuery模拟鼠标点击a标签事件
- 使用Actions对象模拟鼠标键盘操作
- 使用jQuery模拟鼠标点击a标签事件
- Android 模拟键盘鼠标事件(Socket+Instrumentation实现)
- C#模拟键盘鼠标事件 SendKeys 的特殊键代码表
- 总结Selenium WebDriver中一些鼠标和键盘事件的使用
- 如何使用SendMessage函数实现模拟鼠标点击按钮事件?
- C#模拟键盘鼠标事件
- 使用JS或jQuery模拟鼠标点击a标签事件代码
- .NET使用钩子捕获全局鼠标和键盘事件
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- 使用UInput模拟系统键盘鼠标动作 UInput driver分析