我在Windows上用C#制作一个启动器应用程序。但是,这个过程并不是由我的C#应用程序直接启动的,而是使用url来启动它,例如" steam:// rungameid / xxxxxxx"
我需要它以下列方式按名称(例如XYZ.exe)监视进程:
XYZ.exe启动时收到事件 在XYZ.exe退出时接收事件
我只想在应用程序运行且不分别运行时最小化并恢复我的C#应用程序表单
感谢
答案 0 :(得分:1)
制作一个计时器(使用您首选的计时器方法)并每隔'n'毫秒轮询一次(找到最适合您的...我想说最小化/恢复游戏,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");