如何确保Process.Start(ProcessStartInfo)启动的流程窗口具有所有Forms的焦点?

时间:2010-06-23 10:49:43

标签: c#

c#。如何确保Process.Start(ProcessStartInfo)启动的流程窗口具有所有Forms的焦点? 谢谢,

2 个答案:

答案 0 :(得分:2)

使用SetForegroundWindow和其他设置焦点的方法有很多限制。如果你真的想确定,启动过程将获得焦点,我建议你使用以下本机(非托管)函数

SystemParametersInfo (SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, 0);
SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)0,
                      SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

在流程启动和恢复之前

SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout,
                      SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

最后。像

这样的电话
WaitForInputIdle (pi.hProcess, 5000);
在程序启动之后和恢复SPI_SETFOREGROUNDLOCKTIMEOUT之前

如果您遇到问题立即可以提供帮助

答案 1 :(得分:1)

Process.Start返回一个Process对象。要重点关注流程,首先要设置以下PInvoke:

[DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);

然后,使用:

MyProcess = Process.Start(ProcessStartInfo);
SetForegroundWindow(MyProcess.MainWindowHandle);