使用C#WinForms应用访问另一个应用的元素

时间:2012-05-26 16:45:24

标签: c# winforms handle

我希望能够在另一个应用程序中执行以下操作:

  • 更改标签
  • 从TextBox中复制文本
  • 点击按钮
  • 将文本输入TextBox
  • 选择DropDownList元素

现在我正在使用单独的方法,例如:

  • mouse_event()更改鼠标坐标并单击按钮
  • 另一个mouse_event(LeftMouseClick后跟RightMouseClick)复制TextBox中的文本
  • Clipboard.GetText(System.Windows.Forms.TextDataFormat.Text)复制剪贴板内的内容
  • SendInput(对于每个键) - 将文本输入TextBox

这种方法的缺点是:

  • (并不重要)PC变得无法使用(脚本运行时无法工作)
  • 我必须知道应用程序中每个元素的精确像素(读取 - 位置/坐标)
  • 执行时间慢(每个键必须单独输入)

我期待创建一个可以单击TextBox / Button / List 的应用程序,而无需具有这些元素的精确坐标

使用C#WinForms可以执行此类任务吗?我目前的方法有效,但它有缺陷。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

了解Mutex。如果您计划扩展能力,请阅读有关网络通信的信息(例如,TCP协议。TcpListnerTcpClient)。

答案 1 :(得分:0)

有一个完整的框架可以完成这种事情,它被称为UI Automation Framework

Here's some examples如何使用它。
您还可以使用UI Spy将此技术应用于通用窗口,以确定自动化元素。

答案 2 :(得分:0)

这听起来像是UI Automation的工作。我只用它来从另一个应用程序获取文本,但是它具有按名称激活控件的功能,或者如果没有名称则导航控制树。

您可以使用使用模式或导航控件树的AutomationElement来获取文本并与控件交互。