C#使用Automation实现控制自动拨打接听电话

 更新时间:2024年02月23日 16:40:44   作者:搬砖的诗人Z  
这篇文章主要为大家详细介绍了C#如何使用Automation实现控制自动拨打接听电话,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

效果图

启动找到第三方软件的进程,并获取到它的句柄

实现代码

int pid = 0;
  private void Form2_Load(object sender, EventArgs e)
  {
      Process[] ps = Process.GetProcessesByName("MicroSIP");
      if (ps.Length > 0)
      {
          foreach (Process p in ps)
              p.Kill();
      }

      pid = StartExe(@"D:\Users\lenovo\AppData\Local\MicroSIP\microsip.exe");
      
  }

  private void Button_Click(object sender, EventArgs e)
  {
      Button btn = (Button)sender as Button;
      int btntext = Convert.ToInt32(btn.Text);
      ButtonLeftClick(btnList[btntext]);
  }

  private void button1_Click(object sender, EventArgs e)
  {
      automationElement = GetWindowHandle(pid, 1);
      var autoBtn = automationElement.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "Button"));
      btnList = autoBtn;

      var textBox_str = automationElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "ComboBox"));

      textBox1.Text = textBox_str.Current.Name;

      timer1.Start();
  }

  ///<summary>
  ///根据传入的路径启动相应的可执行程序,并返回进程ID
  ///</summary>
  public Int32 StartExe(string strExePath)
  {
      if (null == strExePath)
      {
          return 0;
      }

      Process ps = Process.Start(strExePath);
      Thread.Sleep(3000);

      return ps.Id;
  }

  ///<summary>
  ///根据进程ID,查找相应窗体,并返回窗体句柄
  ///</summary>
  public AutomationElement GetWindowHandle(Int32 pid, int iWaitSecond)
  {
      AutomationElement targetWindow = null;
      int iWaitTime = 0;

      try
      {
          Process ps = Process.GetProcessById(pid);
          targetWindow = AutomationElement.FromHandle(ps.MainWindowHandle);

          while (null == targetWindow)
          {
              if (iWaitTime > iWaitSecond)
              {
                  break;
              }

              Thread.Sleep(500);

              targetWindow = AutomationElement.FromHandle(ps.MainWindowHandle);
          }

          return targetWindow;
      }
      catch (System.Exception ex)
      {
          string msg = "没有找到指定的窗口,请确认窗口已经启动!";

          throw new InvalidProgramException(msg, ex);
      }
  }

定位button按钮

///<summart>
///根据Button按钮句柄,进行鼠标左键单击
///</summary>
public static bool ButtonLeftClick(AutomationElement ButtonHandle)
{
    object objButton = null;
    InvokePattern ivkpButton = null;

    try
    {
        if (null == ButtonHandle)
        {
            return false;
        }

        if (!ButtonHandle.TryGetCurrentPattern(InvokePattern.Pattern, out objButton))
        {
            return false;
        }

        ivkpButton = (InvokePattern)objButton;

        ivkpButton.Invoke();

        return true;
    }
    catch (System.Exception ex)
    {
        string msg = "鼠标左键单击失败!";

        throw new InvalidProgramException(msg, ex);
    }
}

定位复选框

/// <summary>
      /// 判断复选框的值
      /// </summary>
      /// <param name="element"></param>
      /// <returns></returns>
      private bool IsElementToggledOn(AutomationElement element)
      {
          if (element == null)
          {
              return false;
          }

          Object objPattern;
          TogglePattern togPattern;
          if (true == element.TryGetCurrentPattern(TogglePattern.Pattern, out objPattern))
          {
              togPattern = objPattern as TogglePattern;
              return togPattern.Current.ToggleState == ToggleState.On;
          }
          return false;
      }

      /// <summary>
      /// 点击复选框
      /// </summary>
      /// <param name="element"></param>
      private void ClickToggledOn(AutomationElement element)
      {
          if (element == null)
          {
              // TODO: Invalid parameter error handling.
              return;
          }

          Object objPattern;
          TogglePattern togPattern;
          if (true == element.TryGetCurrentPattern(TogglePattern.Pattern, out objPattern))
          {
              togPattern = objPattern as TogglePattern;
              togPattern.Toggle();
          }
      }

      private void timer1_Tick(object sender, EventArgs e)
      {
          try
          {


              var status = automationElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "msctls_statusbar32"));
              string name = status.Current.Name;
              label1.Text = name;

              var textBox_str = automationElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "ComboBox"));
              textBox1.Text = textBox_str.Current.Name;
              
          }
          catch (Exception ex)
          {

          }
      }

      private void button22_Click(object sender, EventArgs e)
      {
          Form3 form = new Form3();
          form.ShowDialog();
          var textBox_str = automationElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "ComboBox"));

          ValuePattern valuePattern = (ValuePattern)textBox_str.GetCurrentPattern(ValuePattern.Pattern);

          valuePattern.SetValue(Form3.textNumber);
      }

到此这篇关于C#使用Automation实现控制自动拨打接听电话的文章就介绍到这了,更多相关C# Automation控制自动拨打接听电话内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 轻松学习C#的方法

    轻松学习C#的方法

    轻松学习C#的方法,对C#的方法感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的方法
    2015-11-11
  • 使用C#连接SQL Server的详细图文教程

    使用C#连接SQL Server的详细图文教程

    初学者学习上位机开发遇到数据库连接不上,是很常见的情况,可能会以各种形式呈现出来,下面这篇文章主要给大家介绍了关于使用C#连接SQL Server的详细图文教程,需要的朋友可以参考下
    2023-02-02
  • C# 委托(跨窗体操作控件)实例流程讲解

    C# 委托(跨窗体操作控件)实例流程讲解

    今天研究了一下,在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托。
    2013-03-03
  • C#中截取字符串的的基本方法详解

    C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 深入了解c# 迭代器和列举器

    深入了解c# 迭代器和列举器

    这篇文章主要介绍了c# 迭代器和列举器的相关资料,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-08-08
  • C# 在PDF文档中创建表格的实现方法

    C# 在PDF文档中创建表格的实现方法

    表格能够一目了然的让用户看到数据信息,使信息显得有条理化,那么在pdf类型的文档中如何来添加表格并对表格进行格式化操作呢?下面小编给大家带来了C# 在PDF文档中创建表格的实现方法,需要的朋友参考下吧
    2017-12-12
  • C#中Clone一个对象的值到另一个对象案例

    C#中Clone一个对象的值到另一个对象案例

    这篇文章主要介绍了C#中Clone一个对象的值到另一个对象案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C# httpwebrequest访问HTTPS错误处理方法

    C# httpwebrequest访问HTTPS错误处理方法

    下面小编就为大家带来一篇C# httpwebrequest访问HTTPS错误处理方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • c#将list类型转换成DataTable方法示例

    c#将list类型转换成DataTable方法示例

    将List类型转换成DataTable的通用方法,大家参考使用吧
    2013-12-12
  • c# 实现图片查看器

    c# 实现图片查看器

    这篇文章主要介绍了c# 如何实现图片查看器,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论