【发布时间】:2011-11-30 17:32:34
【问题描述】:
我正在使用System.Diagnostics.Process 启动一个外部应用程序,这个外部进程在某一时刻会打开一个对话框,用户在其中输入一些内容,然后单击“确定”。我需要的是等待我的应用程序(我启动外部进程的那个),直到用户插入一些东西并单击确定。在那之后,我必须对该外部进程执行更多任务,然后将其关闭。
【问题讨论】:
标签: c# automation
我正在使用System.Diagnostics.Process 启动一个外部应用程序,这个外部进程在某一时刻会打开一个对话框,用户在其中输入一些内容,然后单击“确定”。我需要的是等待我的应用程序(我启动外部进程的那个),直到用户插入一些东西并单击确定。在那之后,我必须对该外部进程执行更多任务,然后将其关闭。
【问题讨论】:
标签: c# automation
是的,这是可能的。有多种方法可以从进程句柄和/或 ID 开始获取窗口信息。请参阅此question and responses 以了解入门。您很可能最终会使用 P/Invoke 到 Win32 API 来完成此任务,但有许多很好的示例可以完成此任务。
一旦您有了窗口句柄,您就可以使用计时器轮询方案来测试是否存在,或者在您的情况下,测试存在然后消失。
【讨论】:
如果您正在启动的应用程序在用户与对话框交互后存在,那么您只需调用Process.WaitFroExit(),您的代码将不会继续,直到您启动的进程退出。
System.Diagnostics.Process 类中有很多有用的函数可用于与进程交互(我假设您正在使用它们来启动这个外部应用程序)
【讨论】:
这是可能的,但背后有一些工作要做。首先,您需要将代码作为非托管代码运行,因为您需要使用 Win32 API 挂钩 Windows 操作系统事件。
因此,一个选项是循环寻找要打开的对话框,暂停您的代码正在执行的操作,并在对话框消失时继续。
【讨论】: