示例#1
0
        /// <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, "上传");
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);//查找
        }
示例#6
0
        /// <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);
        }
示例#7
0
        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);
        }
示例#8
0
        /// <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);
        }
示例#9
0
        /// <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);
        }
示例#10
0
        /// <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);
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        /// <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);
            }
        }
示例#13
0
        /// <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
        }
示例#14
0
        /// <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...");
        }
示例#15
0
        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);
        }
示例#16
0
        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);
        }