【问题标题】:C# process start focus issueC# 进程启动焦点问题
【发布时间】:2015-07-01 22:50:08
【问题描述】:


当我开始一个新进程时,它会自动获得焦点。如何防止它获得焦点,或者将焦点重新返回到我的应用程序?

这是我正在使用的代码:

string path = @"c:\temp\myprocess.exe";  
ProcessStartInfo info = new ProcessStartInfo(path);  
info.WorkingDirectory = path;  
Process p = Process.Start(info);  

我只需要执行的过程而不是获得焦点。

非常感谢,
阿迪巴尔达

【问题讨论】:

    标签: c# process focus


    【解决方案1】:

    也许将WindowStyle 属性设置为Minimized 会有所帮助。

    【讨论】:

    • 我认为它仍然需要关注,即使它没有显示
    【解决方案2】:

    如果你根本不需要展示流程,试试这个:

    string path = @"c:\temp\myprocess.exe";
    ProcessStartInfo info = new ProcessStartInfo(path);
    info.WorkingDirectory = path;
    info.WindowStyle = ProcessWindowStyle.Hidden;
    

    如 Uwe Keim 所说,如果您希望它可见但最小化,则将 WindowStyle 设置为 ProcessWindowStyle.Minimized。

    【讨论】:

      【解决方案3】:

      你能做到吗

      myForm.Focus();
      

      myForm 是主应用程序中的表单

      【讨论】:

      • 它不起作用,因为在您启动线程的那一刻,在显示其 UI 之前会有延迟。到那时,您已经在表单上调用 Focus,但外部进程仍然排在最后并窃取焦点。
      • 为什么这是公认的答案!?它没有回答问题。
      【解决方案4】:

      我所做的是等待一点延迟,直到其他应用程序成功加载,然后聚焦我的应用程序窗口。

      //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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多