0

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

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

到目前为止,一切都很好。一切都按预期工作。

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

在 WPF 中不可能做到这一点?我尝试过 pinvokes 和其他东西,但似乎没有什么对我有用。

此致

尼基

4

2 回答 2

0

I found a solution.

Adding a reference to VisualBasic gives access to Interactive.AppActivate, which can activate any process given a processid, which I already had implemented.

This page gave me the solution AppActivate In C#

I check for running process in the following manner

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;
        }
于 2014-08-02T21:42:25.333 回答
0

你试过激活它吗?

Application.Current.MainWindow.Activate();

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

Application.Current.MainWindow.Topmost = true;
于 2014-08-01T10:53:07.920 回答