【问题标题】:Getting textbox value from a 3rd party app in C#从 C# 中的 3rd 方应用程序获取文本框值
【发布时间】:2019-01-22 14:09:20
【问题描述】:

我正在尝试开发一个后台工作的 C# 应用程序,它需要检测何时打开、填写并单击了一个按钮。

我知道我可以作为一个进程获取 3rd 方应用程序的一些信息,但是是否可以遍历它的所有控件并获取它们的值?

我读过一些关于“匿名管道”的文章,但不知道这些是否可以在这样的案例中实现,以及如何实现。

我的最终目标是在同一应用中单击“打印”按钮时获取应用中特定文本框的值。第三方应用程序不是我开发的,所以我只有一个 .exe,但我可以看到它有文本框、标签和按钮。

【问题讨论】:

  • 嗯——您想检测“随机”应用程序何时启动,然后捕获放入该应用程序初始对话框的信息?您现在不会尝试捕获用户名、电子邮件或密码——您会……吗?
  • 使用UI Automation。所涉及过程的描述here
  • @Jazimov 这也是我的担忧之一,如果这实际上是合法的。我需要一个不包含任何密码的文本框字段的值,而是一些字符串。问题是 2 个应用程序应该作为一个应用程序工作,但我没有源代码,他们不喜欢第 3 方的任何更改 - 所以我必须找到一种方法从我的 c# 应用程序中处理它。
  • @Jimi UI Automation 帮我做了,谢谢。您可以使用它通过不同的参数访问表单,并获得所需的一切 - 就像使用 Microsoft 的 Inspect 一样

标签: c# winforms textbox anonymous-pipes


【解决方案1】:

你需要的是进程间通信 有多种方法可以解决您的问题:

1.使用通用数据存储

单击打印按钮后,您可以在数据库/文件中设置一些标志和文本框文本。其他应用程序可以轮询以检查是否设置了此标志。

一旦设置,其他应用程序就可以从数据库/文件中读取它。

2。您可以从其他应用程序托管一个 Net Pipe Binding WCF 端点。

如果我必须将数据从一个进程发送到同一台机器上的另一个进程,我会更喜欢这个选项。
您的主要应用程序将具有 wcf 服务的代理。 Wcf 服务将成为其他需要知道文本框文本的应用程序的一部分。

单击“打印”按钮后,您的主应用程序会将文本框文本发送到此 WCF 服务。

因为这是使用命名管道绑定,所以该服务只能在该机器上使用。

参考示例from this blog

也可以有其他方式(例如,托管 web api,它只允许从 localhost 访问)。方法的选择取决于程序的高级设计。

希望对你有帮助

【讨论】:

  • 是的,OP 可能需要进程间通信,你的想法有一定的价值。但是“随机第三方应用程序”和“我只有...一个 exe”的哪些部分您没有完全理解? :)
  • 正如@Jazimov 提到的,我只有一个 .exe,因此不可能对代码进行任何更改。
猜你喜欢
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多