Проверьте, открыт ли Microsoft Edge - PullRequest
1 голос
/ 05 марта 2019

Моя проблема заключается в следующем:

В настоящее время я открываю Microsoft Edge с помощью кода .NET, чтобы иметь возможность читать PFD-файлы. Но я хочу открыть Edge только с PDF-файлом, если он еще не открыт.

Проблема с Edge заключается в том, что окно размещается в ApplicationFrameHost, который также содержит другие приложения Windows, такие как Minesweaper из магазина. Так, когда я открываю, например, Minesweaper после открытия моего pdf-файла с помощью Edge, текущий MainWindowTitle ApplicationFrameHost имеет значение «Minesweaper».

Но если я запускаю свой код, он должен проверить в начале, открыт ли Edge, но я не могу проверить его через ApplicationFrameHost MainWindowTitle, потому что он из текущего активного ApplicationFrameHost, который является "Minesweaper", потому что Я был последним активным окном ApplicationFrameHost.

Я также не могу проверить, запущен ли процесс MicrosoftEdgeCP, потому что он всегда запущен, даже если я закрываю Microsoft Edge.

У вас есть какие-нибудь решения для моей проблемы?

1 Ответ

0 голосов
/ 07 марта 2019

При запуске Edge (как минимум) создаются два процесса: MicrosoftEdge и MicrosoftEdgeCP.

Вы можете попробовать использовать следующий код, чтобы проверить, открыт ли браузер Edge:

//We need to find the most recent MicrosoftEdgeCP process that is active
Process[] EdgeCPProcessList = Process.GetProcessesByName("MicrosoftEdgeCP");

Process newestEdgeCPProcess = null;

foreach (Process theprocess in EdgeCPProcessList)
{
    if (newestEdgeCPProcess == null || theprocess.StartTime > newestEdgeCPProcess.StartTime)
    {
        newestEdgeCPProcess = theprocess;
        Console.WriteLine("EdgeCP Process: "+theprocess.ProcessName.ToString());
    }
}


Process[] edgeProcessList = Process.GetProcessesByName("MicrosoftEdge");
Process newestEdgeProcess = null;

foreach (Process edgeProcess in edgeProcessList)
{
    if (newestEdgeProcess == null || edgeProcess.StartTime > newestEdgeProcess.StartTime)
    {
        newestEdgeProcess = edgeProcess;
        Console.WriteLine("Edge Process: " + edgeProcess.ProcessName.ToString());
    }
}

Console.ReadKey();

Если бы мы могли получить ProcessName, значит, Edge уже открыт.Код выше, хорошо работает на моей стороне.

...