zoukankan      html  css  js  c++  java
  • 【自动化__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 + "
    ";
    			//}
    			//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();
    		}
    		
    	}
    	
    	
    	
    	
    }
    
  • 相关阅读:
    Postgresql 常用操作
    捡回reset的未提交修改
    Excel 97-2003版本内部结构与查看方法
    【WPF】EntityframeworkCore Update注意事项
    Mac版StarUML破解方法
    Excel2016 自定义RTDServer添加方法
    apache中开启SSL设置方法
    软件开发中的常用工具
    编程风格统一配置EditorConfig
    Windows10简单启动项目添加方法
  • 原文地址:https://www.cnblogs.com/wujianbo123/p/7468105.html
Copyright © 2011-2022 走看看