C# 监控外部进程状态
C# monitor external process state
我正在 windows 上用 C# 制作启动器应用程序。但是,该过程不是由我的 C# 应用程序直接启动的,而是使用 url 来启动它,例如 "steam://rungameid/xxxxxxx"
我需要它以下列方式按名称(例如 XYZ.exe)监视进程:
在 XYZ.exe 开始时接收事件
XYZ.exe 退出时接收事件
我只想在应用程序分别为 运行 而不是 运行 时最小化和恢复我的 C# 应用程序的表单
谢谢
制作一个计时器(使用您喜欢的计时器方法)并每隔 'n' 毫秒轮询一次(找到最适合您的...我会说 minimizing/restoring 从游戏中,500 毫秒可以是一个好的开始,但要实验),然后你可以使用类似的东西:
bool processRunning = false;
void timerTickMethod()
{
var procIsRunning = Process.GetProcessesByName("xyz.exe").Any();
if(procIsRunning && !processRunning)
ProcessIsStartedEvent(); // or directly minimize your app
else if(!procIsRuning && processRunning)
ProcessIsEndedEvent(); // or directly restore your app
processRunning = procIsRunning;
}
如果你想确定是你的 xyz.exe
即运行,你可以传入GetProcessesByName
的完整路径(这样如果您的系统中还有其他 xyz.exe
,它就不会混淆您的应用程序)
更新
我是凭记忆写的,所以可能 GetProcessesByName
只适用于友好名称(没有 exe 或路径)。
如果是这样(我没试过),你需要完整的路径,你可以这样做:
var procIsRunning = Process.GetProcesses().Any(x => x.MainModule.Filename == @"c:\your\full\path.exe");
我正在 windows 上用 C# 制作启动器应用程序。但是,该过程不是由我的 C# 应用程序直接启动的,而是使用 url 来启动它,例如 "steam://rungameid/xxxxxxx"
我需要它以下列方式按名称(例如 XYZ.exe)监视进程:
在 XYZ.exe 开始时接收事件 XYZ.exe 退出时接收事件
我只想在应用程序分别为 运行 而不是 运行 时最小化和恢复我的 C# 应用程序的表单
谢谢
制作一个计时器(使用您喜欢的计时器方法)并每隔 'n' 毫秒轮询一次(找到最适合您的...我会说 minimizing/restoring 从游戏中,500 毫秒可以是一个好的开始,但要实验),然后你可以使用类似的东西:
bool processRunning = false;
void timerTickMethod()
{
var procIsRunning = Process.GetProcessesByName("xyz.exe").Any();
if(procIsRunning && !processRunning)
ProcessIsStartedEvent(); // or directly minimize your app
else if(!procIsRuning && processRunning)
ProcessIsEndedEvent(); // or directly restore your app
processRunning = procIsRunning;
}
如果你想确定是你的 xyz.exe
即运行,你可以传入GetProcessesByName
的完整路径(这样如果您的系统中还有其他 xyz.exe
,它就不会混淆您的应用程序)
更新
我是凭记忆写的,所以可能 GetProcessesByName
只适用于友好名称(没有 exe 或路径)。
如果是这样(我没试过),你需要完整的路径,你可以这样做:
var procIsRunning = Process.GetProcesses().Any(x => x.MainModule.Filename == @"c:\your\full\path.exe");