【问题标题】:How to ensure process window launched by Process.Start(ProcessStartInfo) has focus of all Forms?如何确保 Process.Start(ProcessStartInfo) 启动的进程窗口具有所有窗体的焦点?
【发布时间】:2010-06-23 10:49:43
【问题描述】:

c#.如何保证Process.Start(ProcessStartInfo)启动的进程窗口拥有所有Forms的焦点? 谢谢,

【问题讨论】:

    标签: c#


    【解决方案1】:

    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 如果您遇到即时问题,也会很有帮助

    【讨论】:

      【解决方案2】:

      Process.Start 返回一个 Process 对象。为了给流程重点,首先设置以下PInvoke:

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

      然后,使用:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-23
        • 2011-01-31
        • 2012-08-05
        • 1970-01-01
        • 2012-06-07
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        相关资源
        最近更新 更多