C#进程启动焦点问题

4
当我启动一个新进程时,它会自动获得焦点。如何防止它获取焦点,或者将焦点返回到我的应用程序?以下是我正在使用的代码:
string path = @"c:\temp\myprocess.exe";  
ProcessStartInfo info = new ProcessStartInfo(path);  
info.WorkingDirectory = path;  
Process p = Process.Start(info);  

我只需要执行的进程不获得焦点。

非常感谢,
Adi Barda

4个回答

4

4
我认为即使它没有显示出来,仍然需要集中注意力。 - mcmillab

4
如果您不需要显示过程,请尝试以下方法:
string path = @"c:\temp\myprocess.exe";
ProcessStartInfo info = new ProcessStartInfo(path);
info.WorkingDirectory = path;
info.WindowStyle = ProcessWindowStyle.Hidden;

如果你想让窗口可见但最小化,可以将WindowStyle设置为ProcessWindowStyle.Minimized,就像Uwe Keim所说的那样。


0

你能做吗?

myForm.Focus();

其中 myForm 是您主应用程序上的表单


1
它无法工作,因为在启动线程的那一刻,直到其UI显示出来之前会有延迟。在此期间,您已经调用了表单上的焦点,但外部进程仍然是最后一个并夺取了焦点。 - Liviu Mandras
1
为什么这是被接受的答案!?它并没有回答问题。 - Nir Kornfeld

0
我所做的是等待一小段时间,直到另一个应用程序成功加载,然后将焦点放在我的应用程序窗口上。
//Test window
const string strCmdText = "/C cd C:\\sqlcipher";
Process.Start("CMD.exe", strCmdText);

//Delay
int liMilliseconds = 50;
Thread.Sleep(liMilliseconds);

//Code to bring window to front
this.WindowState = FormWindowState.Minimized;
this.Show();
this.WindowState = FormWindowState.Normal;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接