From ce78f9c08458a75559e3624153de3a25a6f24a63 Mon Sep 17 00:00:00 2001 From: Edward Jakubowski Date: Wed, 30 Apr 2014 22:20:52 -0400 Subject: [PATCH] Added back ValueProperty, renamed config properties uiabridge will display ValueProperty if element supports it. if uiabridge is disabled in synthuse.properties the native library will not be loaded. Added Trigger hot key Ctrl+Shift+` Added hotkey configurations in synthuse.properties --- native/uiabridge/bin/uiabridge32.dll | Bin 77312 -> 77312 bytes native/uiabridge/bin/uiabridge64.dll | Bin 91136 -> 91136 bytes native/uiabridge/uiabridge.cpp | 7 +++- native/uiabridge/uiabridge.vcxproj | 1 + src/org/synthuse/Api.java | 17 ++++++--- src/org/synthuse/Config.java | 42 +++++++++++++++++---- src/org/synthuse/SynthuseDlg.java | 25 ++++++++---- src/org/synthuse/UiaBridge.java | 23 +++++++++-- src/org/synthuse/WindowInfo.java | 2 +- src/org/synthuse/WindowsEnumeratedXml.java | 4 +- src/org/synthuse/XpathManager.java | 12 +++--- src/org/synthuse/commands/BaseCommand.java | 4 +- synthuse.properties | 12 +++--- 13 files changed, 107 insertions(+), 42 deletions(-) diff --git a/native/uiabridge/bin/uiabridge32.dll b/native/uiabridge/bin/uiabridge32.dll index b730c4b078d0214977b0903c3f46cf4122d11a02..031f5f746cca6929722795b51cdb85497fbe3090 100644 GIT binary patch delta 12608 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 delta 12381 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 C`EMKm diff --git a/native/uiabridge/bin/uiabridge64.dll b/native/uiabridge/bin/uiabridge64.dll index 900a497838f71e7dbb47a54f986e6c29a9a39a79..739108b6facf011b84e86a49a511a400c8b1848a 100644 GIT binary patch delta 14615 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%0AG&_FEy^-lZ``QK809isL> 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 Jp2;Q|{|gT5$Ugu8 diff --git a/native/uiabridge/uiabridge.cpp b/native/uiabridge/uiabridge.cpp index 7b495c1..158ef1a 100644 --- a/native/uiabridge/uiabridge.cpp +++ b/native/uiabridge/uiabridge.cpp @@ -45,7 +45,7 @@ void AutomationBridge::initializeCache() cacheRequest->Add(AutomationElement::NameProperty); cacheRequest->Add(AutomationElement::BoundingRectangleProperty); */ - System::String ^cachedPropStr = L"RuntimeIdProperty,ParentRuntimeIdProperty,NativeWindowHandleProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ControlTypeProperty,ClassNameProperty,NameProperty,BoundingRectangleProperty"; + System::String ^cachedPropStr = L"RuntimeIdProperty,ParentRuntimeIdProperty,NativeWindowHandleProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ControlTypeProperty,ClassNameProperty,NameProperty,BoundingRectangleProperty,ValueProperty"; array ^rootProperties = AutomationElement::RootElement->GetSupportedProperties(); List ^cacheList = gcnew List(); if (cachedPropStr->Contains(L"NativeWindowHandleProperty")) //special property not in the root property list @@ -53,6 +53,11 @@ void AutomationBridge::initializeCache() cacheList->Add(AutomationElement::NativeWindowHandleProperty); cacheRequest->Add(AutomationElement::NativeWindowHandleProperty); } + if (cachedPropStr->Contains(L"ValueProperty")) //special property not in the root property list + { + cacheList->Add(ValuePattern::ValueProperty); + cacheRequest->Add(ValuePattern::ValueProperty); + } for each(AutomationProperty ^ap in rootProperties) //loop through all supported Properties for a child { System::String ^currentPropertyStr = L""; //current property values diff --git a/native/uiabridge/uiabridge.vcxproj b/native/uiabridge/uiabridge.vcxproj index c39c426..c26c978 100644 --- a/native/uiabridge/uiabridge.vcxproj +++ b/native/uiabridge/uiabridge.vcxproj @@ -112,6 +112,7 @@ Level3 WIN32;NDEBUG;%(PreprocessorDefinitions) Use + MultiThreadedDLL true diff --git a/src/org/synthuse/Api.java b/src/org/synthuse/Api.java index b29180f..6dcea55 100644 --- a/src/org/synthuse/Api.java +++ b/src/org/synthuse/Api.java @@ -299,13 +299,13 @@ public class Api { return null; } - public static String GetWindowClassName(HWND hWnd) { + public static String getWindowClassName(HWND hWnd) { char[] buffer = new char[1026]; User32.instance.GetClassName(hWnd, buffer, 1026); return Native.toString(buffer); } - public static String GetWindowText(HWND hWnd) { + public static String getWindowText(HWND hWnd) { String text = ""; byte[] buffer = new byte[1024]; User32.instance.GetWindowTextA(hWnd, buffer, buffer.length); @@ -315,19 +315,26 @@ public class Api { return text; } - public static HWND GetWindowFromPoint(Point p) { + public static Point getCursorPos() { + + long[] getPos = new long [1]; + User32.instance.GetCursorPos(getPos); + return new Point(POINT_X(getPos[0]), POINT_Y(getPos[0])); + } + + public static HWND getWindowFromCursorPos() { long[] getPos = new long [1]; User32.instance.GetCursorPos(getPos); HWND hwnd = User32.instance.WindowFromPoint(getPos[0]); - HWND childHwnd = GetHiddenChildWindowFromPoint(hwnd, getPos[0]); + HWND childHwnd = getHiddenChildWindowFromPoint(hwnd, getPos[0]); hwnd = childHwnd; //System.out.println(getPos[0] + "," + getPos[1] + " int: " + x + ", " + y); //System.out.println("child: " + GetHandleAsString(childHwnd) + " " + POINT_X(getPos[0]) +", " + POINT_Y(getPos[0])); return hwnd; } - public static HWND GetHiddenChildWindowFromPoint(HWND inHwnd, long point) + public static HWND getHiddenChildWindowFromPoint(HWND inHwnd, long point) { //int x = POINT_X(point);int y = POINT_Y(point); diff --git a/src/org/synthuse/Config.java b/src/org/synthuse/Config.java index 6886a8e..93dcf0c 100644 --- a/src/org/synthuse/Config.java +++ b/src/org/synthuse/Config.java @@ -11,8 +11,10 @@ public class Config extends PropertiesSerializer { public static String DEFAULT_PROP_FILENAME = "synthuse.properties"; - public String disableWpf = "false"; - public String disableFiltersWpf = "false"; + public String disableUiaBridge = "false"; + public String disableFiltersUia = "false"; + public String refreshKey = "3"; + public String targetKey = "`"; public String urlList = ""; public String xpathList = ""; public String xpathHightlight = ".*process=\"([^\"]*)\".*"; @@ -27,17 +29,41 @@ public class Config extends PropertiesSerializer { load(propertyFilename); } - public boolean isWpfBridgeDisabled() + public boolean isUiaBridgeDisabled() { - if (disableWpf == null) + if (disableUiaBridge == null) return false; - return disableWpf.equals("true") || disableWpf.equals("True"); + return disableUiaBridge.equals("true") || disableUiaBridge.equals("True"); } - public boolean isFilterWpfDisabled() + public boolean isFilterUiaDisabled() { - if (disableFiltersWpf == null) + if (disableFiltersUia == null) return false; - return disableFiltersWpf.equals("true") || disableFiltersWpf.equals("True"); + return disableFiltersUia.equals("true") || disableFiltersUia.equals("True"); + } + + public int getRefreshKeyCode() + { + String keyStr = ""; + if (this.refreshKey == null) + keyStr = new Config().refreshKey; //use default value + else if (this.refreshKey.isEmpty()) + keyStr = new Config().refreshKey; //use default value + else + keyStr = this.refreshKey; + return RobotMacro.getKeyCode(keyStr.charAt(0))[0]; + } + + public int getTargetKeyCode() + { + String keyStr = ""; + if (this.targetKey == null) + keyStr = new Config().targetKey; //use default value + else if (this.targetKey.isEmpty()) + keyStr = new Config().targetKey; //use default value + else + keyStr = this.targetKey; + return RobotMacro.getKeyCode(keyStr.charAt(0))[0]; } } diff --git a/src/org/synthuse/SynthuseDlg.java b/src/org/synthuse/SynthuseDlg.java index 086dfa3..a2b5d71 100644 --- a/src/org/synthuse/SynthuseDlg.java +++ b/src/org/synthuse/SynthuseDlg.java @@ -71,7 +71,7 @@ public class SynthuseDlg extends JFrame { /** * */ - public static String VERSION_STR = "1.1.2"; + public static String VERSION_STR = "1.1.3"; public static String RES_STR_MAIN_ICON = "/org/synthuse/img/gnome-robots.png"; public static String RES_STR_REFRESH_IMG = "/org/synthuse/img/rapidsvn.png"; @@ -249,7 +249,7 @@ public class SynthuseDlg extends JFrame { c.gridy = 0; c.insets = new Insets(3,3,3,3); // add padding around objects - DragTarget lblTarget = new DragTarget(); + final DragTarget lblTarget = new DragTarget(); lblTarget.setHorizontalAlignment(SwingConstants.CENTER); lblTarget.setIcon(new ImageIcon(SynthuseDlg.class.getResource(RES_STR_TARGET_IMG))); @@ -389,15 +389,24 @@ public class SynthuseDlg extends JFrame { } }); - KeyboardHook.addKeyEvent(KeyEvent.VK_3, true, true, false);// refresh xml when CTRL+SHIFT+3 is pressed + KeyboardHook.addKeyEvent(config.getRefreshKeyCode(), true, true, false);// refresh xml when CTRL+SHIFT+3 is pressed + KeyboardHook.addKeyEvent(config.getTargetKeyCode(), true, true, false);// target window when CTRL+SHIFT+~ is pressed //add global hook and event KeyboardHook.StartGlobalKeyboardHookThreaded(new KeyboardHook.KeyboardEvents() { @Override public void keyPressed(KeyboardHook.TargetKeyPress target) { //System.out.println("target key pressed " + target.targetKeyCode); - if (target.targetKeyCode == KeyEvent.VK_3){ + if (target.targetKeyCode == config.getRefreshKeyCode()){ btnRefresh.doClick(); } + if (target.targetKeyCode == config.getTargetKeyCode()){ + if (!SynthuseDlg.config.isUiaBridgeDisabled()) + uiabridge.initialize("");//need to re-initialize because it might be in a different thread. + Point p = Api.getCursorPos(); + targetX = p.x; + targetY = p.y; + targetDragged(); + } } }); @@ -445,11 +454,13 @@ public class SynthuseDlg extends JFrame { } public void targetDragged() { - HWND hwnd = Api.GetWindowFromPoint(new Point(targetX,targetY)); + HWND hwnd = Api.getWindowFromCursorPos();//new Point(targetX,targetY) String handleStr = Api.GetHandleAsString(hwnd); - String classStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.GetWindowClassName(hwnd)); + String classStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.getWindowClassName(hwnd)); String parentStr = Api.GetHandleAsString(User32.instance.GetParent(hwnd)); - String enumProperties = uiabridge.getWindowInfo(targetX, targetY, WindowInfo.UIA_PROPERTY_LIST); + String enumProperties = ""; + if (!SynthuseDlg.config.isUiaBridgeDisabled()) + enumProperties = uiabridge.getWindowInfo(targetX, targetY, WindowInfo.UIA_PROPERTY_LIST); String runtimeId = WindowInfo.getRuntimeIdFromProperties(enumProperties); lblStatus.setText("rid:" + runtimeId + " class: " + classStr + " hWnd: " + handleStr + " parent: " + parentStr + " X,Y: " + targetX + ", " + targetY); if (!lastDragHwnd.equals(handleStr) || !lastRuntimeId.equals(runtimeId)) { diff --git a/src/org/synthuse/UiaBridge.java b/src/org/synthuse/UiaBridge.java index fabaac9..b4cf59e 100644 --- a/src/org/synthuse/UiaBridge.java +++ b/src/org/synthuse/UiaBridge.java @@ -3,12 +3,26 @@ package org.synthuse; import java.awt.Point; import java.io.*; +import javax.swing.JOptionPane; + public class UiaBridge { static { - String archDataModel = System.getProperty("sun.arch.data.model");//32 or 64 bit - //System.loadLibrary("native/WpfBridge" + archDataModel); // WpfBridge32.dll (Windows) or WpfBridge32.so (Unixes) - loadNativeLibraryFromJar("/uiabridge" + archDataModel + ".dll"); + if (!SynthuseDlg.config.isUiaBridgeDisabled()) { + //System.out.println("SynthuseDlg.config.disableUiaBridge: " + SynthuseDlg.config.disableUiaBridge); + String archDataModel = System.getProperty("sun.arch.data.model");//32 or 64 bit + try { + //System.loadLibrary("native/WpfBridge" + archDataModel); // WpfBridge32.dll (Windows) or WpfBridge32.so (Unixes) + loadNativeLibraryFromJar("/uiabridge" + archDataModel + ".dll"); + } catch (Exception ex) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + ex.printStackTrace(pw); + System.out.println(sw.toString()); + JOptionPane.showMessageDialog(null, "Failed to load uiabridge library, make sure you have .Net 4.0 already installed.\n" + sw.toString() , "Native Library Load Error", JOptionPane.ERROR_MESSAGE); + SynthuseDlg.config.disableUiaBridge = "true"; + } + } } public static void loadNativeLibraryFromJar(String path) { @@ -63,7 +77,8 @@ public class UiaBridge { public UiaBridge () { - initialize(""); + if (!SynthuseDlg.config.isUiaBridgeDisabled()) + initialize(""); } public native void initialize(String properties); diff --git a/src/org/synthuse/WindowInfo.java b/src/org/synthuse/WindowInfo.java index aae79af..fa1c226 100644 --- a/src/org/synthuse/WindowInfo.java +++ b/src/org/synthuse/WindowInfo.java @@ -172,7 +172,7 @@ public class WindowInfo { //WPF_PROPERTY_LIST = "RuntimeIdProperty,ParentRuntimeIdProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ClassNameProperty,NameProperty,ValueProperty"; String[] spltProperties = enumProperties.split(","); this.isChild = isChild; - if (SynthuseDlg.config.isFilterWpfDisabled()) { //use wildcard mode + if (SynthuseDlg.config.isFilterUiaDisabled()) { //use wildcard mode extra = new LinkedHashMap(); for(String prop: spltProperties) { String[] propertyNameAndValue = prop.split(":", 2); diff --git a/src/org/synthuse/WindowsEnumeratedXml.java b/src/org/synthuse/WindowsEnumeratedXml.java index a3ee89e..8f7396e 100644 --- a/src/org/synthuse/WindowsEnumeratedXml.java +++ b/src/org/synthuse/WindowsEnumeratedXml.java @@ -121,7 +121,7 @@ public class WindowsEnumeratedXml implements Runnable{ Api.User32.instance.EnumWindows(new ParentWindowCallback(), 0); //Enumerate WPF, WinForm, Silverlight windows and add to list - if (!SynthuseDlg.config.isWpfBridgeDisabled()) + if (!SynthuseDlg.config.isUiaBridgeDisabled()) { UiaBridge uiabridge = new UiaBridge(); for (String handle : wpfParentList) { @@ -276,7 +276,7 @@ public class WindowsEnumeratedXml implements Runnable{ String parentRuntimeId = uiabridge.getWindowInfo((int) hwnd, WindowInfo.UIA_RUNTIME_ID); //System.out.println("runtimeId=" + runtimeId); String[] allIds = null; - if (SynthuseDlg.config.isFilterWpfDisabled()) + if (SynthuseDlg.config.isFilterUiaDisabled()) allIds = uiabridge.enumWindowInfo((int) hwnd, "*"); else allIds = uiabridge.enumWindowInfo((int) hwnd, WindowInfo.UIA_PROPERTY_LIST); diff --git a/src/org/synthuse/XpathManager.java b/src/org/synthuse/XpathManager.java index 08c26d7..38bed31 100644 --- a/src/org/synthuse/XpathManager.java +++ b/src/org/synthuse/XpathManager.java @@ -94,8 +94,6 @@ public class XpathManager implements Runnable{ String typeStr = wi.controlType; String txtOrig = wi.text; //String winValueOrig = wpf.getWindowValue(runtimeId); - if (typeStr == null || txtOrig == null) - return ""; //System.out.println("text: " + txtOrig); String txtStr = compareLongTextString(txtOrig); @@ -113,24 +111,24 @@ public class XpathManager implements Runnable{ String builtXpath = ""; try { String xml = this.windowsXmlTextPane.getText(); - if (enumProperties != null && !SynthuseDlg.config.isWpfBridgeDisabled()) { + if (enumProperties != null && !SynthuseDlg.config.isUiaBridgeDisabled()) { if (!enumProperties.isEmpty()) { builtXpath = buildUiaXpathStatement(); } } if (builtXpath != "") return builtXpath; - String classStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.GetWindowClassName(hwnd)); + String classStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.getWindowClassName(hwnd)); String handleStr = Api.GetHandleAsString(hwnd); - String txtOrig = Api.GetWindowText(hwnd); + String txtOrig = Api.getWindowText(hwnd); String txtStr = WindowsEnumeratedXml.escapeXmlAttributeValue(txtOrig); builtXpath = "//win[@class='" + classStr + "']"; List resultList = WindowsEnumeratedXml.evaluateXpathGetValues(xml, builtXpath); //int matches = nextXpathMatch(builtXpath, textPane, true); if (resultList.size() > 1) { // if there are multiple results with the simple xpath then include parent class and text with the xpath statement. HWND parent = User32.instance.GetParent(hwnd); - String parentClassStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.GetWindowClassName(parent)); - String parentTxtOrig = Api.GetWindowText(parent); + String parentClassStr = WindowsEnumeratedXml.escapeXmlAttributeValue(Api.getWindowClassName(parent)); + String parentTxtOrig = Api.getWindowText(parent); String parentTxtStr = WindowsEnumeratedXml.escapeXmlAttributeValue(parentTxtOrig); if (!parentTxtStr.isEmpty()) { if (parentTxtOrig.length() > 20) {// if the parent text is too long only test the first 20 characters diff --git a/src/org/synthuse/commands/BaseCommand.java b/src/org/synthuse/commands/BaseCommand.java index 03abcf1..13fbf72 100644 --- a/src/org/synthuse/commands/BaseCommand.java +++ b/src/org/synthuse/commands/BaseCommand.java @@ -16,7 +16,7 @@ public class BaseCommand { static long LAST_UPDATED_XML = 0; protected Api api = new Api(); - protected UiaBridge wpf = new UiaBridge(); + protected UiaBridge uiabridge = new UiaBridge(); protected CommandProcessor parentProcessor = null; protected int getExecuteErrorCount() { @@ -165,7 +165,7 @@ public class BaseCommand { if (handle.isWin32()) p = api.getWindowPosition(handle.hWnd); else - p = wpf.getCenterOfElement(handle.runtimeId); + p = uiabridge.getCenterOfElement(handle.runtimeId); return p; } diff --git a/synthuse.properties b/synthuse.properties index 4eb8c02..57850a8 100644 --- a/synthuse.properties +++ b/synthuse.properties @@ -1,8 +1,10 @@ # -#Tue Apr 29 23:17:11 EDT 2014 +#Wed Apr 30 22:00:36 EDT 2014 DEFAULT_PROP_FILENAME= +targetKey=` +disableFiltersUia=false urlList= -disableFiltersWpf=false -xpathList=//*[@class\='TextBlock' and starts-with(@text,'CheckBox is here')]\u00BA//win[@class\='HwndWrapper[WpfMockTestApp.exe;;e0e45a66-6643-4c32-a6b8-6313b79ee700]']\u00BA//win[starts-with(@class,'HwndWrapper[WpfMockTestApp.exe;;')]\u00BA//win[starts-with(@class,'HwndWrapper[WpfMockTestApp.exe;;' and @TEXT\="MAINWINDOW")]\u00BA//win[starts-with(@class,'HwndWrapper[WpfMockTestApp.exe;;' and @TEXT\='MAINWINDOW')]\u00BA//win[starts-with(@class,'HwndWrapper[WpfMockTestApp.exe;;') and @TEXT\='MAINWINDOW']\u00BA//win[@class\='HwndWrapper[WpfMockTestApp.exe;;7c11a88a-1622-4ec8-8a29-0d7f20d3f36d]']\u00BA//win[@class\='HwndWrapper']\u00BA//win[starts-with(@class,'HwndWrapper')]\u00BA//wpf\u00BA//*[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1' and starts-with(@text,'')]\u00BA//*[@ListViewCount]\u00BA//*[@menuCount]\u00BA//*[@dgText]\u00BA//menus\u00BA//menu\u00BA//win[@class\='SunAwtFrame']\u00BA//win[@class\='Edit']\u00BA//win[@class\='Notepad']\u00BA//*[@class\='\#32768']\u00BA//menu[@text\='Help']\u00BA//win[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1']/win[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1'][2]\u00BA//*[@tbCount]\u00BA//win[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1']/win[@class\='WindowsForms10.EDIT.app.0.2bf8098_r13_ad1']\u00BA//*[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1' and starts-with(@text,'Form1')]\u00BA//*[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1' and starts-with(@text,'Win Forms Mock Test ')]\u00BA//*[@class\='' and starts-with(@text,'toolStripButton1')]\u00BA//win[@class\='3147770']\u00BA//*[@hwnd\='52298946']\u00BA//*[@hwnd\='14222438']\u00BA//*[@hwnd\='9175840']\u00BA//*[@hwnd\='6751400']\u00BA//*[starts-with(@class,'WindowsForms')]\u00BA//win[starts-with(@class,'WindowsForms')]\u00BA/*/win[starts-with(@class,'WindowsForms')]\u00BA//winfrm\u00BA//win[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1']/win[@class\='WindowsForms10.EDIT.app.0.2bf8098_r13_ad1'][2]\u00BA//*[@class\='WindowsForms10.Window.8.app.0.2bf8098_r13_ad1']/win[@class\='WindowsForms10.EDIT.app.0.2bf8098_r13_ad1']\u00BA//*[@type\='button' and starts-with(@text,'button1')]\u00BA -disableWpf=false -xpathHightlight=.*process\="([^"]*)".* +disableUiaBridge=false +refreshKey=3 +xpathList=//wpf\u00BA +xpathHightlight=