【问题标题】:How to focus WPF windows application from App.xaml.cs如何从 App.xaml.cs 聚焦 WPF Windows 应用程序
【发布时间】:2014-08-01 10:43:01
【问题描述】:

我知道这可能不是一个好的做法,但它仍然是我想要实现的。

我有一个 WPF Windows 应用程序,我只想运行一个实例。如果用户尝试再次启动该程序,则会显示一个消息框,告知该程序已经在运行。此检查在 app.xaml.cs 中执行。

到目前为止一切顺利。一切正常。

我想扩展此功能以提供焦点并将程序的主窗口带到用户桌面的前面,而不是其他窗口和应用程序。我尝试了多种方法,但无法使其正常工作。这也应该发生在 app.xaml.cs 中,我在其中测试应用程序是否已经在运行。

在 WPF 中不能这样做吗?我已经尝试过 pinvokes 和其他东西,但似乎没有什么对我有用。

最好的问候

尼基

【问题讨论】:

    标签: wpf app.xaml


    【解决方案1】:

    你试过激活它吗?

    Application.Current.MainWindow.Activate();
    

    当然,如果您希望它始终保持领先,那么:

    Application.Current.MainWindow.Topmost = true;
    

    【讨论】:

    • 是的,我已经尝试过了。问题是启动的应用程序不是正在运行的应用程序,出于同样的原因 Application.Current.MainWindow 为空。我找到了解决方案,所以我会回答我自己的问题。感谢您的建议
    【解决方案2】:

    我找到了解决方案。

    添加对 VisualBasic 的引用可以访问 Interactive.AppActivate,它可以激活给定我已经实现的 processid 的任何进程。

    这个页面给了我解决方案AppActivate In C#

    我通过以下方式检查正在运行的进程

    Process currentProcess = Process.GetCurrentProcess();
            var runningProcess = (from process in Process.GetProcesses()
                                  where
                                    process.Id != currentProcess.Id &&
                                    process.ProcessName.Equals(
                                      currentProcess.ProcessName,
                                      StringComparison.Ordinal)
                                  select process).FirstOrDefault();
            if (runningProcess != null)
            {
                Microsoft.VisualBasic.Interaction.AppActivate(runningProcess.Id);
                return;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 2021-06-30
      • 2010-11-03
      • 2017-10-17
      • 2017-06-04
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      相关资源
      最近更新 更多