NotepadAutomationDemo代码V1

原创 2011年01月14日 10:31:00

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Automation;
using System.Threading;

 

namespace UIANotepad
{
    class NotepadAutomationDemo
    {
        static AutomationElement notepadWin = null;

        static string editPanelID = "15";
        static string fileMenuID = "Item 1";
        static string saveMenuItemID = "Item 3";
        static string pathTextID = "1001";
        static string saveBtnID = "1";
        static string replaceBtnID = "CommandButton_6";
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            AutomationEventHandler AEHandler = new AutomationEventHandler(OnNotepadOpen);
            Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Children, AEHandler);

            System.Diagnostics.Process.Start("notepad.exe");
            Console.ReadLine();
        }

        private static void OnNotepadOpen(object src, AutomationEventArgs args)
        {
            AutomationElement notepad;
            try
            {
                notepad = src as AutomationElement;

                if ("Untitled - Notepad" == notepad.Current.Name)
                {
                    notepadWin = notepad;

                    DoSomething();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        private static void DoSomething()
        {
            SayHello();
            SaveToFile("Hello");
        }

        private static void SaveToFile(string fileName)
        {
            ClickFileMenu();
            ClickSaveMenuItem();
            TypeFileName(fileName);
            ClickSaveButton();
            ConfirmSave();
        }

        private static void ConfirmSave()
        {
            bool diagShowUP = ConfirmSaveASExists();
            SaveASConfirmed();
        }

        private static void SaveASConfirmed()
        {
            ExecuteInvokePattern(replaceBtnID, ControlType.Button);
        }

        private static bool ConfirmSaveASExists()
        {
            AndCondition conditions = new AndCondition(new PropertyCondition(AutomationElement.ClassNameProperty, "Confirm Save As"),
                new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
            AutomationElementCollection ctrls = notepadWin.FindAll(TreeScope.Descendants, conditions);

            if (ctrls == null || ctrls.Count == 0)
                return false;
            else
                return true;
        }

        private static void ClickSaveButton()
        {
            ExecuteInvokePattern(saveBtnID, ControlType.Button);
        }

        private static void TypeFileName(string fileName)
        {
            SetValuePattern(pathTextID, ControlType.Edit, fileName);
        }

        private static void ClickSaveMenuItem()
        {
            ExecuteInvokePattern(saveMenuItemID, ControlType.MenuItem);
        }

        private static void ClickFileMenu()
        {
            ExecuteCollapsePattern(fileMenuID, ControlType.MenuItem);
        }

        private static void SayHello()
        {
            InputText(editPanelID, ControlType.Document, "Hello");
        }

        static void ExecuteInvokePattern(string ctrlID, ControlType ctrlType)
        {
            AndCondition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty, ctrlID),
                new PropertyCondition(AutomationElement.ControlTypeProperty, ctrlType));

            AutomationElement ctrl = notepadWin.FindAll(TreeScope.Descendants, conditions)[0];
            InvokePattern ip = (InvokePattern)ctrl.GetCurrentPattern(InvokePattern.Pattern);
            ip.Invoke();
        }

        static void SetValuePattern(string ctrlID, ControlType ctrlType, string str)
        {
            AndCondition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty, ctrlID),
                new PropertyCondition(AutomationElement.ControlTypeProperty, ctrlType));

            AutomationElementCollection elements = null;
            int count = 0;
            do
            {
                elements = notepadWin.FindAll(TreeScope.Descendants, conditions);
                if (count > 5)
                {
                    Console.WriteLine("Cannot find file name text box1");
                    return;
                }
                else
                {
                    count ++;
                    Thread.Sleep(100);
                }
            } while (elements == null || elements.Count == 0);
            AutomationElement ctrl = elements[0];
            ValuePattern vp = (ValuePattern)ctrl.GetCurrentPattern(ValuePattern.Pattern);
            vp.SetValue(str);
        }

        static void ExecuteCollapsePattern(string ctrlID, ControlType ctrlType)
        {
            AndCondition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty, ctrlID),
                new PropertyCondition(AutomationElement.ControlTypeProperty, ctrlType));

            AutomationElement ctrl = notepadWin.FindAll(TreeScope.Descendants, conditions)[0];
            ExpandCollapsePattern ep = (ExpandCollapsePattern)ctrl.GetCurrentPattern(ExpandCollapsePattern.Pattern);
            ep.Expand();
        }

        static void InputText(string ctrlID, ControlType ctrlType, string words)
        {
          
            AndCondition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty, ctrlID),
                new PropertyCondition(AutomationElement.ControlTypeProperty, ctrlType));

            AutomationElement ctrl = notepadWin.FindAll(TreeScope.Descendants, conditions)[0];

            ctrl.SetFocus();           
            System.Windows.Forms.SendKeys.SendWait(words);
        }
    }
}

NotepadAutomationDemo的代码V2

using System;using System.Collections.Generic;using System.Data;using System.Drawing;using System.Li...
  • ceachy
  • ceachy
  • 2011年01月14日 10:45
  • 317

Inception v1 论文及源码

论文解读 Network-in-network R-CNN Multivation and High Level Considerations Architectural Details 源码分析 函...
  • zhoujunr1
  • zhoujunr1
  • 2017年08月14日 07:31
  • 403

Hadoop 新 MapReduce 框架 Yarn 详解 及 与V1 MapReduce 框架 区别

Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分...
  • BBSETS
  • BBSETS
  • 2014年09月02日 11:30
  • 614

深度学习--Inception-ResNet-v1网络结构

Inception-ResNet-v1的总体网络结构如下所示:   下面将每个模块的网络结果展开: Stem结构 对应的代码为 with slim.arg_scope([sl...
  • lovelyaiq
  • lovelyaiq
  • 2018年01月10日 17:15
  • 318

使用(!+"\v1")判断是否是IE浏览器

之前在一牛人博客上面看到(!+"\v1")这种写法,然后马上找度娘,找到答案。 其实就是利用了ie的一个bug。 在ie浏览器中,"\v"没有转义,得到的结果为"v" 而在其他浏览器中"\v"表...
  • tyler1108
  • tyler1108
  • 2015年02月09日 10:29
  • 1132

if(!+"\v1"){IE代码}else{其他浏览器代码} 判断浏览器类型

其实就是利用各浏览器对转义字符"\v"的理解 在ie浏览器中,"\v"没有转义,得到的结果为"v" 而在其他浏览器中"\v"表示一个垂直制表符(一定程度上相当于空格) 所以ie解析的"\v1" 为 ...
  • qq_14961511
  • qq_14961511
  • 2015年08月03日 08:23
  • 238

图片自动展示代码【V1】

手机《有一说一》的著名主持人严守一,在去电视台主持节目时,把手机忘在了家里,这一个小小的失误却让他的妻子余文娟发现了他与一个陌生女子间的秘密,回想丈夫在电视上笑容满面,回到家却神情恍惚:外边滔滔不绝,...
  • AugustBlog
  • AugustBlog
  • 2011年04月13日 16:37
  • 170

Android开发之签名V1和V2的区别

在我们使用Android studio打包签名的时候可以选择两种签名方式。如下图 对于V2的官网解释如下 官网地址:https://android-developers...
  • FrancisBingo
  • FrancisBingo
  • 2017年11月28日 16:17
  • 1524

论文:Deeplab_v1

DCNN的最后一层对物体分隔的局部信息不够清楚,即DCNN最后一层都是高等级的特征,缺少局部信息。在DCNN的最后一层加上CRF解决这一个问题。 DCNN在high-level水平上取得了很大的成就...
  • xxiaozr
  • xxiaozr
  • 2017年11月16日 17:20
  • 79

androidd studio 打包签名 V1&V2

AS2.2之后,打包输出apk文件时,需要用户选择签名输出方式,V1(jar Signature)和V2(full APK Signature) ,不选则无法输出apk文件 一:现在我们对输...
  • Calvin_zhou
  • Calvin_zhou
  • 2017年11月02日 15:56
  • 237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NotepadAutomationDemo代码V1
举报原因:
原因补充:

(最多只允许输入30个字)