【发布时间】:2010-06-23 10:49:43
【问题描述】:
c#.如何保证Process.Start(ProcessStartInfo)启动的进程窗口拥有所有Forms的焦点? 谢谢,
【问题讨论】:
标签: c#
c#.如何保证Process.Start(ProcessStartInfo)启动的进程窗口拥有所有Forms的焦点? 谢谢,
【问题讨论】:
标签: c#
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 如果您遇到即时问题,也会很有帮助
【讨论】:
Process.Start 返回一个 Process 对象。为了给流程重点,首先设置以下PInvoke:
[DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);
然后,使用:
MyProcess = Process.Start(ProcessStartInfo);
SetForegroundWindow(MyProcess.MainWindowHandle);
【讨论】: