java windows 应用_【自动化__GUI自动化】__java__Windows应用程序识别__计算器

一、代码如下

package www.woniu.gui.one;

import java.awt.AWTException;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.Transferable;

import java.awt.datatransfer.UnsupportedFlavorException;

import java.awt.event.KeyEvent;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.xvolks.jnative.JNative;

import org.xvolks.jnative.Type;

import org.xvolks.jnative.exceptions.NativeException;

public class CalcJava {

static int BM_CLICK= 0x00F5;

static int WM_CLOSE= 0x0010;

public static void main(String[] args) {

// TODO Auto-generated method stub

CalcJava cj= new CalcJava();

cj.calTest();

}

private void calTest() {

// TODO Auto-generated method stub

CalcJava cj= new CalcJava();

try {

//Process process= runtime.exec("dir d:");

//Process process= runtime.exec("ping www.woniuxy.com");

//Process process= runtime.exec("ipconfig");

//InputStream is= process.getInputStream();

//InputStreamReader isr= new InputStreamReader(is, "GBK");

//BufferedReader br= new BufferedReader(isr);

//String line= "", body="";

//while((line=br.readLine()) != null) {

//body +=line;

//body +=line + "\n";

//}

//System.out.println(body);

//被测应用程序的启动

Runtime runtime= Runtime.getRuntime();

Process process= runtime.exec("tasklist");//检查被测应用程序是否启动

InputStreamReader isr= new InputStreamReader(process.getInputStream());

BufferedReader br= new BufferedReader(isr);

String line= "";

boolean isOpen= false;

while((line=br.readLine()) != null) {

if(line.indexOf("calc.exe") >= 0) {

isOpen= true;

break;

}

}

if(!isOpen) {

runtime.exec("D:\\calcen.exe");//强子指定的计算器

Thread.sleep(2000);

}

//int parentHandle=

Thread.sleep(2000);

int window= this.findWindow("sciCalc", "Calculator");

System.out.println("应用程序编号为:"+window);

System.out.println("=========");

int control= 0;

control= this.findWindowEx(window, "Button", "3");

this.sendMessage(control, BM_CLICK);

System.out.println(control);

Thread.sleep(1000);

control= this.findWindowEx(window, "Button", "+");

this.sendMessage(control, BM_CLICK);

Thread.sleep(1000);

control= this.findWindowEx(window, "Button", "2");

this.sendMessage(control, BM_CLICK);

Thread.sleep(1000);

control= this.findWindowEx(window, "Button", "=");

this.sendMessage(control, BM_CLICK);

Thread.sleep(1000);

//将结果进行复制 Ctrl+C

Robot robot= new Robot();

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_C);

robot.keyRelease(KeyEvent.VK_CONTROL);

robot.keyRelease(KeyEvent.VK_C);

Thread.sleep(2000);

//从剪贴板取出复制的值,同预期结果进行比较,断言

String content= "";

Clipboard clip= Toolkit.getDefaultToolkit().getSystemClipboard();

Transferable clipT= clip.getContents(null);

if(clipT != null) {

if(clipT.isDataFlavorSupported(DataFlavor.stringFlavor)) {

content= (String) clipT.getTransferData(DataFlavor.stringFlavor);

}

}

System.out.println(content);

if(content.equals("5")) {

System.out.println("测试成功");

} else {

System.out.println("测试失败");

}

this.sendMessage(window, WM_CLOSE);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InterruptedException e) {

// TODO Auto-generated catch block InterruptedException

e.printStackTrace();

} catch (AWTException e) {

// TODO Auto-generated catch block InterruptedException AWTException

e.printStackTrace();

} catch (UnsupportedFlavorException e) {

// TODO Auto-generated catch block InterruptedException AWTException UnsupportedFlavorException

e.printStackTrace();

}

}

private int findWindowEx(int parentHandle, String controlClass, String windowCaption) {

// TODO Auto-generated method stub

int result= 0;

try {

JNative jnative= new JNative("user32.dll", "FindWindowExA");

jnative.setRetVal(Type.INT);

jnative.setParameter(0, Type.INT, String.valueOf(parentHandle));

jnative.setParameter(1, Type.INT, "0");

jnative.setParameter(2, Type.STRING, controlClass);

jnative.setParameter(3, Type.STRING, windowCaption);

jnative.invoke();

result= Integer.parseInt(jnative.getRetVal());

} catch (NativeException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

}catch (IllegalAccessException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

}

return result;

}

private int findWindow(String windowClass, String windowCaption ) {

// TODO Auto-generated method stub

int result= 0;

try {

JNative jnative= new JNative("user32.dll", "FindWindowA");

jnative.setRetVal(Type.INT);

jnative.setParameter(0, Type.STRING, windowClass);

jnative.setParameter(1, Type.STRING, windowCaption);

jnative.invoke();

result= Integer.parseInt(jnative.getRetVal());

} catch (NativeException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

}catch (IllegalAccessException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

}

return result;

}

private void sendMessage(int parentHandle, int message) {

// TODO Auto-generated method stub

try {

JNative jnative= new JNative("user32.dll", "SendMessageA");

jnative.setRetVal(Type.VOID);

jnative.setParameter(0, Type.INT, String.valueOf(parentHandle));

jnative.setParameter(1, Type.INT, String.valueOf(message));

jnative.setParameter(2, Type.STRING, "0");

jnative.setParameter(3, Type.STRING, "0");

jnative.invoke();

Thread.sleep(2000);

} catch (NativeException e) {

// TODO Auto-generated catch block IllegalAccessException InterruptedException

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

} catch (InterruptedException e) {

// TODO Auto-generated catch block IllegalAccessException

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值