windows之UIAutomation鼠标操作
来源:互联网 发布:淘宝碧素堂面膜怎么样 编辑:程序博客网 时间:2024/06/04 17:48
UIAutomation鼠标操作
方法封装:
[Flags]enum MouseEventFlag : uint{ Move = 0x0001, //移动鼠标 LeftDown = 0x0002, //模仿鼠标左键按下 LeftUp = 0x0004, //模仿鼠标左键抬起 RightDown = 0x0008, //模仿鼠标右键按下 RightUp = 0x0010, //模仿鼠标右键抬起 MiddleDown = 0x0020, // 模仿鼠标中键抬起 MiddleUp = 0x0040, // 模仿鼠标中键抬起 XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 //标示是否采取绝对坐标 }// 根据对象坐标模拟鼠标点击操作public class MousexyOpera{ [DllImport("user32.dll")] extern static bool SetCursorPos(int x, int y); [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); [DllImport("user32.dll")] static extern byte MapVirtualKey(uint uCode, uint uMapType); [DllImport("user32.dll")] extern static void mouse_event(MouseEventFlag mouseEventFlag, int incrementX, int incrementY, uint data, UIntPtr extraInfo); // 根据XY轴坐标点击左键 public static void ClickLeftMouse(int incrementX, int incrementY) { SetCursorPos(incrementX, incrementY); mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, incrementX, incrementY, 0, UIntPtr.Zero); } // 根据XY轴坐标双击左键 public static void DoubleClickLeftMouse(int incrementX, int incrementY) { SetCursorPos(incrementX, incrementY); mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, incrementX, incrementY, 0, UIntPtr.Zero); mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, incrementX, incrementY, 0, UIntPtr.Zero); } // 根据XY轴坐标点击右键 public static void ClickRightMouse(int incrementX, int incrementY) { SetCursorPos(incrementX, incrementY); mouse_event(MouseEventFlag.RightDown | MouseEventFlag.RightUp, incrementX, incrementY, 0, UIntPtr.Zero); } // 根据XY轴坐标双击右键 public static void DoubleClickRightMouse(int incrementX, int incrementY) { SetCursorPos(incrementX, incrementY); mouse_event(MouseEventFlag.RightDown | MouseEventFlag.RightUp, incrementX, incrementY, 0, UIntPtr.Zero); mouse_event(MouseEventFlag.RightDown | MouseEventFlag.RightUp, incrementX, incrementY, 0, UIntPtr.Zero); }}public class SimulateOpera{ [DllImport("user32.dll")] extern static bool SetCursorPos(int x, int y); [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); [DllImport("user32.dll")] static extern byte MapVirtualKey(uint uCode, uint uMapType); [DllImport("user32.dll")] extern static void mouse_event(MouseEventFlag mouseEventFlag, int incrementX, int incrementY, uint data, UIntPtr extraInfo); //调用pattern点击一个botton static public void InvokeBtn(AutomationElement ae) { InvokePattern ivkp = (InvokePattern)ae.GetCurrentPattern(InvokePattern.Pattern); ivkp.Invoke(); } // 根据图片等对象用鼠标左键点击该对象 public static void ClickImage(AutomationElement ae) { Rect rect = ae.Current.BoundingRectangle; int incrementX = (int)(rect.Left + rect.Width / 2); int incrementY = (int)(rect.Top + rect.Height / 2); SetCursorPos(incrementX, incrementY); MousexyOpera.ClickLeftMouse(incrementX, incrementY); } // 根据图片等对象用鼠标左键双击该对象 public static void DoubleClickImage(AutomationElement ae) { Rect rect = ae.Current.BoundingRectangle; int incrementX = (int)(rect.Left + rect.Width / 2); int incrementY = (int)(rect.Top + rect.Height / 2); SetCursorPos(incrementX, incrementY); MousexyOpera.DoubleClickLeftMouse(incrementX, incrementY); } // 根据起始和终点元素拖拽对象 static public void DragElement(AutomationElement aeStart, AutomationElement aeEnd) { Rect rectS = aeStart.Current.BoundingRectangle; int incrementSx = (int)(rectS.Left + rectS.Width / 2); int incrementSy = (int)(rectS.Top + rectS.Height / 2); Rect rectE = aeEnd.Current.BoundingRectangle; int incrementEx = (int)(rectE.Left + rectE.Width / 2); int incrementEy = (int)(rectE.Top + rectE.Height / 2); SetCursorPos(incrementSx, incrementSy); Thread.Sleep(300); mouse_event(MouseEventFlag.LeftDown, incrementSx, incrementSy, 0, UIntPtr.Zero); Thread.Sleep(300); SetCursorPos(incrementEx, incrementEy); mouse_event(MouseEventFlag.LeftUp, incrementEx, incrementEy, 0, UIntPtr.Zero); } // 根据起始和终点坐标拖拽对象 public static void DragElementByPosition(int xStart, int yStart, int xEnd, int yEnd) { SetCursorPos(xStart, yStart); Thread.Sleep(300); mouse_event(MouseEventFlag.LeftDown, xStart, yStart, 0, UIntPtr.Zero); Thread.Sleep(300); SetCursorPos(xEnd, yEnd); mouse_event(MouseEventFlag.LeftUp, xEnd, yEnd, 0, UIntPtr.Zero); } // 设置文本输入框的值 public static void SetEditorValue(AutomationElement aeEdit, string str) { ValuePattern vpt = (ValuePattern)aeEdit.GetCurrentPattern(ValuePattern.Pattern); vpt.SetValue(str); }}public class KeyboradOpera{ [DllImport("user32.dll")] extern static bool SetCursorPos(int x, int y); [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); [DllImport("user32.dll")] static extern byte MapVirtualKey(uint uCode, uint uMapType); [DllImport("user32.dll")] extern static void mouse_event(MouseEventFlag mouseEventFlag, int incrementX, int incrementY, uint data, UIntPtr extraInfo); public static void SendKey(bool bDown, byte key) { if (!bDown) { keybd_event(key, MapVirtualKey(key, 0), 0x2, 0); } else { keybd_event(key, MapVirtualKey(key, 0), 0, 0); } }}
调用:
// 点击主界面的菜单按钮public static bool menuBtnClick(){ OperateObject.mainwin = GetObject.GetMainWindow(); AutomationElement menuBtn = GetObject.GetMenuBtn(OperateObject.mainwin); if (menuBtn == null) { return false; } else { SimulateOpera.InvokeBtn(menuBtn); AutomationElement menuWin = GetObject.GetMenuWin(OperateObject.mainwin); if (menuWin == null) { return false; } return true; }}//设置保存窗口的输入框的值public static bool SetSaveFileName(String fileName){ OperateObject.mainwin = GetObject.GetMainWindow(); OperateObject.popSaveWin = GetObject.GetPopSaveWin(OperateObject.mainwin); if (OperateObject.popSaveWin == null) { return false; } AutomationElement TextField = GetObject.GetSaveTextField(OperateObject.popSaveWin); if (TextField == null) { return false; } else { SimulateOpera.SetEditorValue(TextField, fileName); return true; }}
阅读全文
0 0
- windows之UIAutomation鼠标操作
- windows之UIAutomation的UI元素操作
- windows之UIAutomation简介
- windows之UIAutomation压测
- windows之UIAutomation查找元素
- windows之UIAutomation识别UI元素
- uiautomation之AccessibilityNodeInfo
- 不用鼠标操作windows
- Python之Windows控件操作系列一:模拟鼠标点击
- Windows编程之鼠标
- 《Windows程序设计》之鼠标
- bootstrap之鼠标操作
- OpenCV之鼠标操作
- iOS自动化测试之UIAutomation
- wondows之UIAutomation的优缺点
- 《Windows程序设计》之鼠标1
- 《Windows程序设计》之鼠标2
- 《Windows程序设计》之鼠标3
- Spring MVC之DispatcherServlet解析
- MyBatis事物处理
- Myeclipse2014编辑JavaScript点"."的时候会卡死的解决办法
- Python正则表达式
- Android跨进程通信中,对Binder的不完全理解
- windows之UIAutomation鼠标操作
- web uploader在Firefox下上传点击无效的解决方法
- 如何设置输入框input中placeholder的字体颜色、字号
- Java集合框架之_泛型
- hdu4405[Aeroplane chess] 有点懂了期望概率DP
- Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
- 编写MANIFEST.MF文件时的注意事项:
- mkv210_image.c文件
- 条件随机场CRF