/// <summary> /// 根据信息表流水账号,查询对应的信息表流水账号账单并点击上传按钮 /// </summary> public static void step7() { //获取所有桌面窗体句柄 var alldeskBar = WinApi.FindChildInfo(IntPtr.Zero); //获取开票软件句柄 var kprjBar = alldeskBar.Find(bar => bar.szWindowName != null && bar.szWindowName.Contains("开票软件")); //获取开票软件下面的所有子句柄 var kprjList = WinApi.EnumChildWindowsCallback(kprjBar.hWnd); //获取toolStrip1句柄 var toolStripBar = kprjList.Find(bar => bar.szWindowName != null && bar.szWindowName == "toolStrip1"); var inputTextBar = WinApi.FindWindowEx(toolStripBar.hWnd, IntPtr.Zero, null, null); WinApi.SendMessage(inputTextBar, 0X0C, IntPtr.Zero, "661735289405190530193705"); Thread.Sleep(1000); WinApi.SendKey(inputTextBar, KeySnap.VK_ENTER); var indexClickBar = 0; for (var i = 0; i < kprjList.Count; i++) { if (kprjList[i].szWindowName == "红字发票信息表查询导出") { indexClickBar = i + 2; } } //ClickBtnByName(kprjList[indexClickBar].hWnd, ""); WinApi.ClickLocation(kprjList[indexClickBar].hWnd, 10, 55); HxShengQing.ClickBtnByName(toolStripBar.hWnd, "上传"); }
/// <summary> /// 开票软件前置,detail填写,暂时这样--如果分辨率调整肯定会受到影响的 /// </summary> static void InfoTianKai() { Thread.Sleep(100); WinApi.ShowWindow((IntPtr)1442640, 2); Thread.Sleep(100); WinApi.ShowWindow((IntPtr)1442640, 3); Thread.Sleep(100); WinApi.SetFocus((IntPtr)1442640); Thread.Sleep(100); WinApi.SetForegroundWindow((IntPtr)1442640); Thread.Sleep(2000); for (var i = 0; i < 5; i++) { WinApi.ClickLocation((IntPtr)7145062, 10, 25 + 23 * i + 12); //可以点中第一行第一块 HxShengQing.GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait($"{i}aaaaa"); WinApi.keybd_event(Keys.Tab, 0, 0, 0); HxShengQing.WriteGoodsTaxNoAdd(IntPtr.Zero, null); Thread.Sleep(1000); HxShengQing.ClickBtnByName((IntPtr)7472786, "增行"); Thread.Sleep(1000); } }
/// <summary> /// 点击红字成功~ /// </summary> public static void ClickRedChar() { var fpkj = WinApi.FindWindow(null, "开具增值税专用发票"); var list = WinApi.EnumChildWindowsCallback(fpkj); var redBar = list[list.Count - 1].hWnd; RECT rect; WinApi.GetClientRect(redBar, out rect); WinApi.ClickLocation(redBar, rect.right - rect.left - 500, 25); }
public static bool UploadHzInfo(IntPtr hwnd, string hzbm, bool isDebug = true) { if (isDebug) { hwnd = WinApi.FindWindow(null, "增值税发票税控开票软件(金税盘版) V2.2.34.190427 - [红字发票信息表查询导出]"); } var toolStripBar = IntPtr.Zero; var tableGridBar = IntPtr.Zero; TryRetry(bar => { var ChildList = WinApi.EnumChildWindowsCallback(hwnd); toolStripBar = ChildList.Find(b => b.szWindowName == "toolStrip1").hWnd;//toolStrip1 var dataGridBar = ChildList.Find(b => b.szWindowName == "红字发票信息表查询导出").hWnd; dataGridBar = WinApi.FindWindowEx(dataGridBar, IntPtr.Zero, null, null); tableGridBar = WinApi.FindWindowEx(dataGridBar, IntPtr.Zero, null, null); //tableGridMation = winMations.FindFirst(TreeScope.Descendants, // new PropertyCondition(AutomationElement.NameProperty, "DataGridView"));//DataGridView return(toolStripBar != IntPtr.Zero); }, hwnd, 20, 500); //输入数据 var inputMation = AutomationElement.FromHandle(toolStripBar).FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); inputMation.TryGetCurrentPattern (ValuePattern.Pattern, out var patternObject); if (patternObject == null) { throw new Exception("编辑按钮出错"); } ((ValuePattern)patternObject).SetValue(hzbm); //var rowMations = tableGridMation.FindAll(TreeScope.Children, Condition.TrueCondition); Thread.Sleep(500); //点击选中 WinApi.ClickLocation(tableGridBar, 10, 50); //点击上传 ClickBtnByName(toolStripBar, "上传"); //点击确认 SystemOpera("确认"); return(true); }
/// <summary> /// 查找按钮点击 /// </summary> public static void XuanZe() { var bar = WinApi.FindWindow(null, "信息表选择"); ShowForm(bar); var list = WinApi.EnumChildWindowsCallback(bar); var tooltrip = list.Find(b => b.szWindowName == "toolStrip1"); var flag = ClickBtnByName(tooltrip.hWnd, "查找"); if (flag) { return; } RECT rect; WinApi.GetClientRect(tooltrip.hWnd, out rect); WinApi.ClickLocation(tooltrip.hWnd, rect.right - rect.left - 175, 25);//查找 }
/// <summary> /// 第一个接口最后一步,红字信息表上传 /// </summary> /// <param name="hzbm"></param> /// <returns></returns> public static bool UploadHzInfoBak(IntPtr hwnd, string hzbm) { AutomationElement toolStripMation = null; AutomationElement tableGridMation = null; TryRetry(bar => { var winMations = AutomationElement.FromHandle(bar); toolStripMation = winMations.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "toolStrip1"));//toolStrip1 tableGridMation = winMations.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "DataGridView"));//DataGridView return(toolStripMation.Current.NativeWindowHandle != 0 && tableGridMation.Current.NativeWindowHandle != 0); }, hwnd, 20, 500); //输入数据 var inputMation = toolStripMation.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); inputMation.TryGetCurrentPattern (ValuePattern.Pattern, out var patternObject); if (patternObject == null) { throw new Exception("编辑按钮出错"); } ((ValuePattern)patternObject).SetValue(hzbm); //var rowMations = tableGridMation.FindAll(TreeScope.Children, Condition.TrueCondition); Thread.Sleep(500); //点击选中 WinApi.ClickLocation((IntPtr)tableGridMation.Current.NativeWindowHandle, 10, 50); //点击上传 ClickBtnByName((IntPtr)toolStripMation.Current.NativeWindowHandle, "上传"); SystemOpera("确认"); return(true); }
public static bool ClickBtnByNameWin32(IntPtr toolBar, string name) { if (toolBar == IntPtr.Zero) { return(false); } try { var winBarUia = UiaHelper.GetUIAutomation().ElementFromHandle(toolBar); var element = winBarUia.FindFirst(UIAutomationClient.TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation(). CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, name)); var toolBarRect = winBarUia.CurrentBoundingRectangle; var elementRect = element.CurrentBoundingRectangle; WinApi.ClickLocation(toolBar, elementRect.left - toolBarRect.left + 10, (elementRect.bottom - elementRect.top) / 2); return(true); } catch (Exception e) { } return(false); }
/// <summary> /// 直接操作日历控件 成功 /// </summary> public static void Method11() { var winBar = WinApi.FindWindow(null, "红字发票信息表查询条件"); var childs = WinApi.FindChildInfo(winBar); var rizhiBar = childs.Find(b => b.szWindowName == "填开日期"); var subChilds = WinApi.EnumChildWindowsCallback(rizhiBar.hWnd); WinApi.GetWindowRect(new HandleRef(null, subChilds[0].hWnd), out var rect); WinApi.ClickLocation(subChilds[0].hWnd, rect.right - rect.left - 10, 11); Thread.Sleep(1000); //日历控件 var winBarUia = UiaHelper.GetUIAutomation().ElementFromHandle(winBar); var riliUia = winBarUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, "日历控件")); var riliRect = riliUia.CurrentBoundingRectangle; var upBtnUia = riliUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, "上一个按钮")); var upBtnRect = upBtnUia.CurrentBoundingRectangle; //Console.WriteLine($"upBtnUia.CurrentNativeWindowHandle:{upBtnUia.CurrentNativeWindowHandle}"); for (var i = 0; i < 1; i++) { WinApi.ClickLocation(riliUia.CurrentNativeWindowHandle, upBtnRect.left - riliRect.left + 5, upBtnRect.top - riliRect.top + 5); Thread.Sleep(500); } Thread.Sleep(1000); var chooseRect = riliUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, "1")).CurrentBoundingRectangle; WinApi.ClickLocation(riliUia.CurrentNativeWindowHandle, chooseRect.left - riliRect.left + 5, chooseRect.top - riliRect.top + 5); }
/// <summary> /// 表格数据填写 /// </summary> /// <param name="dataBar"></param> /// <param name="toolBar"></param> /// <param name="details"></param> /// <returns></returns> public static bool RedInfoFpTianKaiData(IntPtr dataBar, IntPtr toolBar, List <RednotificationDetail> details) { for (var i = 0; i < details.Count; i++) { WinApi.ClickLocation(dataBar, 10, 25 + 23 * i + 12); //可以点中第一行第一块 GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait(details[i].ItemName); WinApi.keybd_event(Keys.Tab, 0, 0, 0); Thread.Sleep(200); var ssbmszBar = IntPtr.Zero; var ssbmtjBar = IntPtr.Zero; TryRetry(str => { ssbmszBar = WinApi.FindWindow(null, "税收分类编码设置"); ssbmtjBar = WinApi.FindWindow(null, "商品编码添加"); return(ssbmszBar != IntPtr.Zero || ssbmtjBar != IntPtr.Zero); }, "", 4, 500); WriteGoodsTaxNoSetting(ssbmszBar, details[i]); WriteGoodsTaxNoAdd(ssbmtjBar, details[i]); //规格型号 GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait(details[i].ItemSpec); WinApi.keybd_event(Keys.Tab, 0, 0, 0); Thread.Sleep(500); //单位 GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait(details[i].Unit); WinApi.keybd_event(Keys.Tab, 0, 0, 0); Thread.Sleep(500); //数量 GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait(details[i].Quantity); WinApi.keybd_event(Keys.Tab, 0, 0, 0); Thread.Sleep(500); //单价不含税 GetTableFocus(); Thread.Sleep(100); SendKeys.SendWait(details[i].UnitPrice); WinApi.keybd_event(Keys.Tab, 0, 0, 0); Thread.Sleep(500); if (i == details.Count - 1) { break; } ClickBtnByName(toolBar, "增行"); Thread.Sleep(500); } return(true); }
/// <summary> /// 商品编码添加 /// </summary> public static void WriteGoodsTaxNoAdd(IntPtr goodNoAddHw, RednotificationDetail detail) { try { if (goodNoAddHw == IntPtr.Zero) { //AmLogger.Info("WriteGoodsTaxNoAdd", "未找到:商品编码添加界面"); return; } //写入分类编码 var ssflName = WinApi.FindWindowEx((IntPtr)goodNoAddHw, IntPtr.Zero, null, "税收分类名称"); var temp1 = WinApi.FindWindowEx((IntPtr)goodNoAddHw, ssflName, null, null); var temp2 = WinApi.FindWindowEx(temp1, IntPtr.Zero, null, null); var ssflBar = WinApi.FindWindowEx(temp1, temp2, null, null); //获取税收分类编码句柄 //AmLogger.Info("WriteGoodsTaxNoAdd", $"税收分类编码句柄获取成功ssflBar{ssflBar}"); WinApi.SendMessage(ssflBar, WinApi.BM_TEXT, IntPtr.Zero, TaxSub(detail.GoodsTaxNo)); //对文本框进行赋值 Thread.Sleep(200); WinApi.SendKey(ssflBar, WinApi.VK_DOWN); Thread.Sleep(30); WinApi.SendKey(ssflBar, WinApi.VK_RETURN); WinApi.ClickLocation((IntPtr)goodNoAddHw, 300, 10); Thread.Sleep(200); //优惠政策 if ("1".Equals(detail.TaxPer) && !string.IsNullOrEmpty(detail.TaxPerCon)) { //AmLogger.Info("WriteGoodsTaxNoAdd", "享受优惠政策"); var spflbmBar = WinApi.FindWindow(null, "商品编码添加"); var guiGebar = WinApi.FindWindowEx(spflbmBar, IntPtr.Zero, null, "规格型号"); var guiGeSelectBar = WinApi.FindWindowEx(spflbmBar, guiGebar, null, null); WinApi.ClickLocation(guiGeSelectBar, 10, 10); Thread.Sleep(30); int selected = WinApi.SendMessage(guiGeSelectBar, WinApi.CB_SETCURSEL, (IntPtr)0, ""); Thread.Sleep(1000); //等待优惠政策enable var jianma = WinApi.FindWindowEx(spflbmBar, IntPtr.Zero, null, "简码"); var temp = WinApi.FindWindowEx(spflbmBar, jianma, null, null); temp = WinApi.FindWindowEx(spflbmBar, temp, null, null); var yhzclxBar = WinApi.FindWindowEx(spflbmBar, temp, null, null); int index = detail.TaxPerCon.Trim() == "免税" ? 1 : 2; WinApi.ClickLocation(yhzclxBar, 10, 10); for (var i = 0; i < index; i++) { WinApi.SendKey(yhzclxBar, WinApi.VK_DOWN); Thread.Sleep(30); } Thread.Sleep(100); WinApi.SendKey(ssflBar, WinApi.VK_RETURN); //AmLogger.Info("WriteGoodsTaxNoAdd", $"享受优惠政策:{guiGeSelectBar},yhzclxBar{yhzclxBar}"); } //正常税率采用平台传过来的税率 else { //修改实际传入的税率 var child = WinApi.FindWindowEx((IntPtr)goodNoAddHw, IntPtr.Zero, null, "*税率"); var suilvBar = WinApi.FindWindowEx((IntPtr)goodNoAddHw, child, null, null); //AmLogger.Info("WriteGoodsTaxNoAdd", $"suilvBar{suilvBar}"); //通过索引设置下拉框选项 Thread.Sleep(500); //WinApi.SendMessage(suilvBar, WinApi.CB_SETCURSEL, (IntPtr) GetIndexByTaxRate(detail.TaxRate), ""); //调整税率为传入税率 WinApi.SetComboxItemValue(suilvBar, GetByTaxRate(detail.TaxRate)); } var stripHw = WinApi.FindWindowEx((IntPtr)goodNoAddHw, IntPtr.Zero, null, "toolStrip1"); Thread.Sleep(500); WinApi.ClickLocation(stripHw, 40, 13); //点击保存 //点击保存的时候可能弹出错误提示 Thread.Sleep(500); //GetErrorInfo(); //AmLogger.Info("WriteGoodsTaxNoAdd", "商品编码添加填写成功"); } catch (Exception e) { //CaptureScreen.TakeScreenShot("商品编码添加", $"{e.Message}"); //AmLogger.Error("WriteGoodsTaxNoAdd", e); } }
/// <summary> /// 填写税收分类编码设置框 /// </summary> /// <param name="detail"></param> public static void WriteGoodsTaxNoSetting(IntPtr goodNoSettingHw, RednotificationDetail detail) { try { if (goodNoSettingHw == IntPtr.Zero) { //日志--税收分类编码设置页面查找失败 return; } var goodNoSettingChildBars = new List <WindowInfo>(); var flag = TryRetry(str => { goodNoSettingChildBars = WinApi.EnumChildWindowsCallback(goodNoSettingHw); return(goodNoSettingChildBars != null && goodNoSettingChildBars.Count >= 11); }, goodNoSettingHw, 20, 500); if ("1".Equals(detail.TaxPer) && !string.IsNullOrEmpty(detail.TaxPerCon)) { //把优惠政策标识设置成 “是” var child = WinApi.FindWindowEx((IntPtr)goodNoSettingHw, IntPtr.Zero, null, "享受优惠政策"); var yhzcBar = WinApi.FindWindowEx((IntPtr)goodNoSettingHw, child, null, null); WinApi.LeftClick(yhzcBar); WinApi.SendKey(yhzcBar, 38); //上 Thread.Sleep(30); WinApi.SendKey(yhzcBar, 13); //enter Thread.Sleep(300); int index = detail.TaxPerCon.Trim() == "免税" ? 1 : 2; //设置优惠政策内容 var ssflbmBar = WinApi.FindWindowEx((IntPtr)goodNoSettingHw, IntPtr.Zero, null, "税收分类编码"); var yhlxBar = WinApi.FindWindowEx((IntPtr)goodNoSettingHw, ssflbmBar, null, null); WinApi.LeftClick(yhlxBar); for (var i = 0; i < index; i++) { WinApi.SendKey(yhlxBar, 40);//下 Thread.Sleep(300); } WinApi.SendKey(yhlxBar, 13);//enter } else { var suilvBar = goodNoSettingChildBars[goodNoSettingChildBars.Count - 1].hWnd; //AmLogger.Info("WriteGoodsTaxNoAdd", $"suilvBar{suilvBar}"); //通过索引设置下拉框选项 Thread.Sleep(500); WinApi.SetComboxItemValue(suilvBar, GetByTaxRate(detail.TaxRate)); } var stripHw = goodNoSettingChildBars.Find(b => b.szWindowName == "toolStrip1").hWnd; WinApi.ClickLocation(stripHw, 40, 13); //点击保存--之后会有弹框 Thread.Sleep(500); var bar = WinApi.FindWindow(null, "SysMessageBox"); if (bar == IntPtr.Zero) { return; } var list = WinApi.EnumChildWindowsCallback((IntPtr)bar); if (list == null || list.Count <= 7) { return; } if (list[4].szWindowName != "修改成功!") { throw new Exception(list[4].szWindowName); } WinApi.LeftClick(list[7].hWnd); //点击确定返回 return; } catch (Exception e) { //AmLogger.Error("WriteGoodsTaxNoSetting", e); } }
/// <summary> /// 红字申请测试 /// </summary> public static void Method14() { Thread.Sleep(10000); var winBar = WinApi.FindWindow(null, "增值税发票税控开票软件(金税盘版) V2.2.34.190628 - [红字发票信息表填开]"); var tkUia = UiaHelper.GetUIAutomation().ElementFromHandle(winBar).FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_AutomationIdPropertyId, "SqdTianKai")); var toolBarUia = tkUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation() .CreatePropertyCondition(UIA_PropertyIds.UIA_AutomationIdPropertyId, "toolStrip2")); for (var i = 0; i < 7; i++) { HxShengQing.ClickBtnByName(toolBarUia.CurrentNativeWindowHandle, "增行"); Thread.Sleep(100); } var tableUia = tkUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, "DataGridView")); var tableBar = tableUia.CurrentNativeWindowHandle; var shUia = tableUia.FindFirst(TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation() .CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, "首行")); var shRect = shUia.CurrentBoundingRectangle; for (var i = 0; i < 8; i++) { var row = tableUia.FindFirst(TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation() .CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, $"行 {i}")); var cols = row.FindAll(TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation().CreateTrueCondition()); Console.WriteLine($"{i}:col0:{cols.GetElement(0).CurrentName},col1:{cols.GetElement(1).CurrentName}"); var nameRect = cols.GetElement(0).CurrentBoundingRectangle; WinApi.ClickLocation(tableBar, nameRect.left - shRect.left + 50, nameRect.top - shRect.top + 10); Thread.Sleep(100); WinApi.ClickLocation(tableBar, nameRect.left - shRect.left + 50, nameRect.top - shRect.top + 10); Thread.Sleep(500); var childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, $"BBB{i}"); WinApi.SendKey(tableBar, 9);//发送tab按键 //var guigeRect = cols.GetElement(1).CurrentBoundingRectangle; //WinApi.ClickLocation(tableBar, guigeRect.left - shRect.left + 10, guigeRect.top - shRect.top + 10); Thread.Sleep(2000); var noaddBar = WinApi.FindWindow(null, "商品编码添加"); if (noaddBar != IntPtr.Zero) { Bug.WriteGoodsTaxNoAdd(noaddBar, "101010104"); Thread.Sleep(500); } var pt1 = (IUIAutomationLegacyIAccessiblePattern)cols.GetElement(1) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt1.DoDefaultAction(); Thread.Sleep(500); childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, "大"); pt1.DoDefaultAction(); Thread.Sleep(200); var pt6 = (IUIAutomationLegacyIAccessiblePattern)cols.GetElement(6) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt6.DoDefaultAction(); Thread.Sleep(500); childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, "10%"); Thread.Sleep(500); pt6.DoDefaultAction(); Thread.Sleep(500); //var danweiRect = cols.GetElement(2).CurrentBoundingRectangle; //WinApi.ClickLocation(tableBar, danweiRect.left - shRect.left + 10, danweiRect.top - shRect.top + 10); var pt2 = (IUIAutomationLegacyIAccessiblePattern)cols.GetElement(2) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt2.DoDefaultAction(); Thread.Sleep(500); childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, "kg"); //var numRect = cols.GetElement(3).CurrentBoundingRectangle; //WinApi.ClickLocation(tableBar, numRect.left - shRect.left + 10, numRect.top - shRect.top + 10); var pt3 = (IUIAutomationLegacyIAccessiblePattern)cols.GetElement(3) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt3.DoDefaultAction(); Thread.Sleep(500); childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, "-3"); //var priceRect = cols.GetElement(4).CurrentBoundingRectangle; //WinApi.ClickLocation(tableBar, priceRect.left - shRect.left + 10, priceRect.top - shRect.top + 10); var pt4 = (IUIAutomationLegacyIAccessiblePattern)cols.GetElement(4) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt4.DoDefaultAction(); Thread.Sleep(500); childs = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childs[childs.Count - 1].hWnd, 12, IntPtr.Zero, "100.00"); Thread.Sleep(100); pt4.DoDefaultAction(); Thread.Sleep(500); } }
/// <summary> /// 日期控件操作---思路--操作日期控件成功 /// </summary> public static void Method9() { var infoBar = WinApi.FindWindow(null, "信息表选择"); var winBar = WinApi.FindWindow(null, "红字发票信息表查询条件"); var childs = WinApi.FindChildInfo(winBar); var rizhiBar = childs.Find(b => b.szWindowName == "填开日期"); var subChilds = WinApi.EnumChildWindowsCallback(rizhiBar.hWnd); WinApi.GetWindowRect(new HandleRef(null, subChilds[0].hWnd), out var rect); WinApi.ClickLocation(subChilds[0].hWnd, rect.right - rect.left - 10, 11); Thread.Sleep(1000); #region UI操作失败 //var allMaitons = AutomationElement.FromHandle(winBar) // .FindAll(System.Windows.Automation.TreeScope.Descendants, Condition.TrueCondition); //for (var i = 0; i < allMaitons.Count; i++) //{ // Console.WriteLine($"Name:{allMaitons[i].Current.Name}"); //} //allMaitons[3].TryGetCurrentPattern(InvokePattern.Pattern, out var upPt); //for (var i = 0; i < 24; i++) //{ // ((InvokePattern)upPt).Invoke(); // Thread.Sleep(500); //} //WinApi.SendMessage(dataHwnd, 12, IntPtr.Zero, "2018-01-01"); #endregion #region 采用uia方式--成功 var winBarUia = UiaHelper.GetUIAutomation().ElementFromHandle(winBar); var allUiaMations = winBarUia.FindAll(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreateTrueCondition()); IUIAutomationElement upbtnUia = null; for (var i = 0; i < allUiaMations.Length; i++) { var mation = allUiaMations.GetElement(i); Console.WriteLine($"Num:{i}, name:{mation.CurrentName}"); if (mation.CurrentName.Contains("上一个按钮")) { upbtnUia = mation; break; } } if (upbtnUia != null) { var invokePt = (IUIAutomationLegacyIAccessiblePattern)upbtnUia.GetCurrentPattern(UIA_PatternIds .UIA_LegacyIAccessiblePatternId); for (var i = 0; i < 24; i++) { invokePt.DoDefaultAction(); Thread.Sleep(500); } } Thread.Sleep(1000); winBarUia = UiaHelper.GetUIAutomation().ElementFromHandle(winBar); allUiaMations = winBarUia.FindAll(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreateTrueCondition()); IUIAutomationElement ttbtn = null; for (var i = 0; i < allUiaMations.Length; i++) { var mation = allUiaMations.GetElement(i); Console.WriteLine($"Num:{i}, name:{mation.CurrentName}"); if (mation.CurrentName.Contains("23")) { ttbtn = mation; break; } } //选择时间 if (ttbtn != null) { var invokePt = (IUIAutomationLegacyIAccessiblePattern)ttbtn.GetCurrentPattern(UIA_PatternIds .UIA_LegacyIAccessiblePatternId); invokePt.DoDefaultAction(); } #endregion }
/// <summary> /// 卷票测试--通过--有点小问题需要调整--调整完毕,大于5的话从4开始,其他从3开始--默认五条数据 /// </summary> public static void Method10() { var winBar = WinApi.FindWindow(null, "开具增值税普通发票(卷票)"); var winBarUia = UiaHelper.GetUIAutomation().ElementFromHandle(winBar); var toolBarUia = winBarUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_AutomationIdPropertyId, "toolStrip3")); var dataGridUia = winBarUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_AutomationIdPropertyId, "DataGrid1")); var tableBar = (IntPtr)dataGridUia.CurrentNativeWindowHandle; var shouhangRetc = dataGridUia.FindFirst(TreeScope.TreeScope_Descendants, UiaHelper.GetUIAutomation().CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, "首行")).CurrentBoundingRectangle; for (var i = 0; i < 2; i++) { HxShengQing.ClickBtnByName(toolBarUia.CurrentNativeWindowHandle, "减行"); Thread.Sleep(100); } for (var i = 0; i < 3; i++) { ClickBtnUia(toolBarUia.CurrentNativeWindowHandle, "增行"); Thread.Sleep(500); //对名称进行赋值 var childinfos1 = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childinfos1[childinfos1.Count - 1].hWnd, 12, IntPtr.Zero, $"uuyy{i}"); var element = dataGridUia.FindFirst(TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation() .CreatePropertyCondition( UIA_PropertyIds.UIA_NamePropertyId, $"行 {i}")); var elementChilds = element.FindAll(TreeScope.TreeScope_Children, UiaHelper.GetUIAutomation().CreateTrueCondition()); var pt2 = (IUIAutomationLegacyIAccessiblePattern)elementChilds.GetElement(2) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); var rectcol2 = elementChilds.GetElement(2).CurrentBoundingRectangle; //触发商品编码添加窗体 pt2.DoDefaultAction(); Thread.Sleep(2000); var noaddBar = WinApi.FindWindow(null, "商品编码添加"); if (noaddBar != IntPtr.Zero) { Bug.WriteGoodsTaxNoAdd(noaddBar, "101010104"); Thread.Sleep(500); WinApi.ClickLocation(tableBar, rectcol2.left - shouhangRetc.left + 10, rectcol2.top - shouhangRetc.top + 10); Thread.Sleep(500); } childinfos1 = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childinfos1[childinfos1.Count - 1].hWnd, 12, IntPtr.Zero, "2.00"); var pt3 = (IUIAutomationLegacyIAccessiblePattern)elementChilds.GetElement(3) .GetCurrentPattern(UIA_PatternIds.UIA_LegacyIAccessiblePatternId); pt3.DoDefaultAction(); Thread.Sleep(500); childinfos1 = WinApi.EnumChildWindowsCallback(tableBar); WinApi.SendMessage(childinfos1[childinfos1.Count - 1].hWnd, 12, IntPtr.Zero, "200.00"); pt3.DoDefaultAction(); Thread.Sleep(500); var rect = elementChilds.GetElement(5).CurrentBoundingRectangle; WinApi.ClickLocation(tableBar, rect.left - shouhangRetc.left + 10, rect.top - shouhangRetc.top + 10); Thread.Sleep(500); childinfos1 = WinApi.EnumChildWindowsCallback(tableBar); //修改税率 UIHelper.SetCombox(childinfos1.Find(b => b.szClassName.Contains("COMBOBOX")).hWnd, "17%"); } Console.WriteLine("success..."); }
public static void WriteGoodsTaxNoAdd(IntPtr goodNoAddHw, RednotificationDetail detail) { if (detail == null) { detail = new RednotificationDetail() { GoodsTaxNo = "101010102", TaxPer = "1", TaxPerCon = "不征税", TaxRate = "0.17" }; } if (goodNoAddHw == IntPtr.Zero) { return; } //税收分类编码 var ssflbmBar = IntPtr.Zero; var toolStrip = IntPtr.Zero; var suilvBar = IntPtr.Zero; var yhBar = IntPtr.Zero; var yhlBar = IntPtr.Zero; HxShengQing.TryRetry(str => { var childInfos = WinApi.FindChildInfo(goodNoAddHw); if (childInfos == null || childInfos.Count < 30) { return(false); } //获取分类名称 var flmnBar = childInfos.Find(b => b.szWindowName == "税收分类名称").hWnd; var temp1 = WinApi.FindWindowEx(goodNoAddHw, flmnBar, null, null); var temp2 = WinApi.FindWindowEx(temp1, IntPtr.Zero, null, null); ssflbmBar = WinApi.FindWindowEx(temp1, temp2, null, null); //获取toolStrip toolStrip = childInfos.Find(b => b.szWindowName == "toolStrip1").hWnd; //获取税率句柄 var suilv = childInfos.Find(b => b.szWindowName == "*税率").hWnd; suilvBar = WinApi.FindWindowEx(goodNoAddHw, suilv, null, null); //获取享受优惠政策 var yh = childInfos.Find(b => b.szWindowName == "规格型号").hWnd; yhBar = WinApi.FindWindowEx(goodNoAddHw, yh, null, null); //优惠政策类型 yhlBar = childInfos[8].hWnd; return(ssflbmBar != IntPtr.Zero && toolStrip != IntPtr.Zero && suilvBar != IntPtr.Zero && yhBar != IntPtr.Zero && yhlBar != IntPtr.Zero); }, "", 20, 500); if (ssflbmBar == IntPtr.Zero || toolStrip == IntPtr.Zero || suilvBar == IntPtr.Zero || yhBar == IntPtr.Zero || yhlBar == IntPtr.Zero) { throw new Exception("商品编码窗体,句柄获取失败"); } WinApi.SendMessage(ssflbmBar, WinApi.BM_TEXT, IntPtr.Zero, TaxSub(detail.GoodsTaxNo)); Thread.Sleep(100); WinApi.SendKey(ssflbmBar, WinApi.VK_DOWN); Thread.Sleep(100); WinApi.SendKey(ssflbmBar, WinApi.VK_RETURN); Thread.Sleep(100); WinApi.ClickLocation(goodNoAddHw, 300, 10); Thread.Sleep(500); if ("1".Equals(detail.TaxPer) && !string.IsNullOrEmpty(detail.TaxPerCon)) { UIHelper.SetCombox(yhBar, "是"); //等待优惠政策enable Thread.Sleep(1000); UIHelper.SetCombox(yhlBar, detail.TaxPerCon.Trim()); } else { UIHelper.SetCombox(suilvBar, GetByTaxRate(detail.TaxRate)); } ClickBtnByName(toolStrip, "保存"); Thread.Sleep(500); }
public static void JuanPiaoTianKai(Entitys.InvoiceInfo invoiceInfo) { //有时候会有插件加载 Thread.Sleep(3000); var winJuanBar = IntPtr.Zero; var toolBar = IntPtr.Zero; var dataBar = IntPtr.Zero; var FPtiankai_new = IntPtr.Zero; //购方名称 var gfmcBar = IntPtr.Zero; //纳税人识别号 var nsrsbhBar = IntPtr.Zero; //收款员 var skyBar = IntPtr.Zero; //备注 var remarkBar = IntPtr.Zero; var flag = TryRetry(str => { winJuanBar = WinApi.FindWindow(null, str); if (winJuanBar == IntPtr.Zero) { return(false); } var child = WinApi.FindWindowEx(winJuanBar, IntPtr.Zero, null, "FPtiankai_new"); var child1 = WinApi.FindWindowEx(child, IntPtr.Zero, null, null); toolBar = WinApi.FindWindowEx(child, child1, null, null); var parentBar = WinApi.FindWindowEx(child1, IntPtr.Zero, null, null); var childs = WinApi.FindChildBar(parentBar); skyBar = childs[18]; remarkBar = childs[19]; gfmcBar = childs[childs.Count - 1]; nsrsbhBar = childs[childs.Count - 2]; dataBar = childs[childs.Count - 5]; if (toolBar == IntPtr.Zero || skyBar == IntPtr.Zero || remarkBar == IntPtr.Zero || gfmcBar == IntPtr.Zero || nsrsbhBar == IntPtr.Zero || dataBar == IntPtr.Zero) { return(false); } return(true); }, "开具增值税普通发票(卷票)", 20, 500); if (flag == false) { Console.Write("句柄查找错误"); return; } //窗体前置 SetForHead(winJuanBar, false); Thread.Sleep(100); HxShengQing.ClickBtnByName(toolBar, "减行"); //填写备注 if (!string.IsNullOrEmpty(invoiceInfo?.Head.Remark)) { WinApi.SendMessage(remarkBar, WinApi.BM_TEXT, IntPtr.Zero, invoiceInfo?.Head.Remark); } //收款人 if (!string.IsNullOrEmpty(invoiceInfo?.Head.CashierName)) { var nsMation = AutomationElement.FromHandle(skyBar); var temp = nsMation.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); if (temp != null) { temp.TryGetCurrentPattern(ValuePattern.Pattern, out var objPattern); ((ValuePattern)objPattern)?.SetValue(invoiceInfo?.Head.CashierName); } else { var list = WinApi.FindChildBar(skyBar); foreach (var b in list) { WinApi.SendMessage(b, WinApi.BM_TEXT, IntPtr.Zero, invoiceInfo?.Head.CashierName); } } } //填写购买方名称 if (!string.IsNullOrEmpty(invoiceInfo?.Head.PurchaserName)) { var nsMation = AutomationElement.FromHandle(gfmcBar); var temp = nsMation.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); if (temp != null) { temp.TryGetCurrentPattern(ValuePattern.Pattern, out var objPattern); ((ValuePattern)objPattern)?.SetValue(invoiceInfo?.Head.PurchaserName); } else { var list = WinApi.FindChildBar(gfmcBar); foreach (var b in list) { WinApi.SendMessage(b, WinApi.BM_TEXT, IntPtr.Zero, invoiceInfo?.Head.PurchaserName); } } Thread.Sleep(500); WinApi.keybd_event(Keys.Down, 0, 0, 0); Thread.Sleep(500); WinApi.keybd_event(Keys.Enter, 0, 0, 0); } //填写纳税人识别号 if (!string.IsNullOrEmpty(invoiceInfo?.Head.PurchaserTaxNo)) { //var txtbar = WinApi.FindChildInfo(nsrsbhBar); var nsMation = AutomationElement.FromHandle(nsrsbhBar); var temp = nsMation.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); if (temp != null) { temp.TryGetCurrentPattern(ValuePattern.Pattern, out var objPattern); if (((ValuePattern)objPattern)?.Current.Value != invoiceInfo?.Head.PurchaserTaxNo) { ((ValuePattern)objPattern)?.SetValue(invoiceInfo?.Head.PurchaserTaxNo); } } else { var list = WinApi.FindChildBar(nsrsbhBar); foreach (var b in list) { WinApi.SendMessage(b, WinApi.BM_TEXT, IntPtr.Zero, invoiceInfo?.Head.PurchaserTaxNo); } } WinApi.ClickLocation(FPtiankai_new, 100, 100); } //填写明细 for (var i = 0; i < invoiceInfo.InvoiceDetails.Count; i++) { if (invoiceInfo.InvoiceDetails[i].DetailKind == "1") { continue; } HxShengQing.ClickBtnByName(toolBar, "增行"); Thread.Sleep(500); //WinApi.ClickLocation(dataBar, 40, 24 + 30 * i + 15); //可以点中第一行第一块 //Thread.Sleep(200); if (invoiceInfo.InvoiceDetails[i].DetailKind == "2") { var next = invoiceInfo.InvoiceDetails.Find(detail => detail.DetailKind == "1" && detail.ItemName == invoiceInfo.InvoiceDetails[i].ItemName); JuanPiaoMingXi(toolBar, invoiceInfo.InvoiceDetails[i], next); //填写卷票明细 } else { JuanPiaoMingXi(toolBar, invoiceInfo.InvoiceDetails[i]); //填写卷票明细 } } Thread.Sleep(500); }