【问题标题】:C# Process automationC# 流程自动化
【发布时间】:2011-11-30 17:32:34
【问题描述】:

我正在使用System.Diagnostics.Process 启动一个外部应用程序,这个外部进程在某一时刻会打开一个对话框,用户在其中输入一些内容,然后单击“确定”。我需要的是等待我的应用程序(我启动外部进程的那个),直到用户插入一些东西并单击确定。在那之后,我必须对该外部进程执行更多任务,然后将其关闭。

【问题讨论】:

    标签: c# automation


    【解决方案1】:

    是的,这是可能的。有多种方法可以从进程句柄和/或 ID 开始获取窗口信息。请参阅此question and responses 以了解入门。您很可能最终会使用 P/Invoke 到 Win32 API 来完成此任务,但有许多很好的示例可以完成此任务。

    一旦您有了窗口句柄,您就可以使用计时器轮询方案来测试是否存在,或者在您的情况下,测试存在然后消失。

    【讨论】:

      【解决方案2】:

      如果您正在启动的应用程序在用户与对话框交互后存在,那么您只需调用Process.WaitFroExit(),您的代码将不会继续,直到您启动的进程退出。

      System.Diagnostics.Process 类中有很多有用的函数可用于与进程交互(我假设您正在使用它们来启动这个外部应用程序)

      【讨论】:

      • 是的,我正在启动的应用程序在对话框之后存在。问题是我需要在对话框关闭后对该应用程序执行更多任务。
      【解决方案3】:

      这是可能的,但背后有一些工作要做。首先,您需要将代码作为非托管代码运行,因为您需要使用 Win32 API 挂钩 Windows 操作系统事件。

      因此,一个选项是循环寻找要打开的对话框,暂停您的代码正在执行的操作,并在对话框消失时继续。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 2017-03-22
        • 1970-01-01
        • 2021-12-24
        相关资源
        最近更新 更多