【问题标题】:How to access a public field on process? C#如何访问进程中的公共字段? C#
【发布时间】:2010-03-03 18:33:20
【问题描述】:

我正在使用 C# 和 Process newProcess = Process.Start("someProgram.exe");

这个 someProgram.exe 有一个带有公共文本框的表单。

无论如何我可以使用 newProcess 来设置文本框吗? 我希望会有类似 newProcess.GetField(textField1).Text = "Awesome";

我在调试时查看了 Process API 和属性,但没有跳出来。

编辑: 我确实有 someProgram.exe 的源代码,所以我知道文本框字段是公开的。我无法编辑 someProgram 的源代码。 使用 Process.Start 的代码已经流传下来,如果我可以将一些参数传递给新进程,我不想花时间改变它的工作方式。

我真正的目标是当 Process.Start("someProgram.exe") 运行时,我可以在文本字段中放置文本,这样我就可以偷懒,而不是每次都输入用户名和密码。 :)

谢谢

【问题讨论】:

  • 您无法进入其他进程并玩弄其中的内容!你想完成什么?
  • 他可能正在尝试检测一个他没有源代码的 GUI 应用程序。这实际上是一个很好的问题,即使通常你不应该这样做。

标签: c# process


【解决方案1】:

你不能。看到这个问题。

IPC Mechanisms in C# - Usage and Best Practices..

【讨论】:

    【解决方案2】:

    你不能直接访问它。

    成员仅在其运行的应用程序中是公开的。您不能以这种方式(直接)访问其他应用程序中的类型。

    顺便说一句,这是一件非常好的事情。如果允许您干扰其他应用程序的内部操作,您将能够完全违反几乎任何应用程序中存在的任何安全模型。系统安全性和稳定性会受到很大影响。

    此方案有两种选择:

    1. 如果其他应用程序是您的,请将其构建为库而不是单独的应用程序。只需直接显示您的应用程序中的表格。然后您就可以访问这些类型了。
    2. 使用某种形式的Interprocess Communication 允许两个进程相互“对话”,并按要求传递值。 Windows Communication Foundation 非常适合这个。

    【讨论】:

    • 这两个应用都是我的。我想到了这一点,但是我所拥有的代码已经流传下来,并且它是我正在查看的一个侧面/个人项目。我想用最少的工作量来做到这一点。我会调查 #2 谢谢
    【解决方案3】:

    简短的回答可能是否定的。长的答案是也许。如果您打开 someProgram.exe 并使用 Spy++,您可能能够收集有关窗口信息的信息,然后向右侧窗口句柄发送 WM_* 消息,该消息将模拟在该文本框中键入文本。

    如果您没有 someProgram.exe 的源代码,我只会走这条路,因为它可以让您使用更传统的方式。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 2013-06-22
      • 2019-06-24
      • 2013-09-11
      • 1970-01-01
      • 2011-01-28
      • 2020-06-20
      • 2022-12-13
      • 2020-12-10
      相关资源
      最近更新 更多