Как повторно использовать существующее / уже открытое окно Windows Explorer для запуска Explorer - PullRequest
4 голосов
/ 28 января 2011

У меня есть приложение, которое часто использует запуск explorer.exe.Я хотел бы повторно использовать существующие / уже открытые окна обозревателя вместо создания нового при каждом запуске процесса.

Вот как выглядит мой код:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo
{
    UseShellExecute = true,
    FileName = "Explorer.exe",
    Arguments = myDirectoryPath
};
System.Diagnostics.Process.Start(info);

Я не видел командной строки , чтобы сделать это.Один из подходов, которые я попробовал, состоял в том, чтобы просто убить 1 существующий процесс проводника и заменить его новым:

var processes = System.Diagnostics.Process.GetProcesses(Environment.MachineName);int kills = 0;
for (int i = 0; i < processes.Length; i++)
{
    System.Diagnostics.Process p = processes[i];
    if (p.ProcessName == "explorer" && kills < 1)
        ++kills
    p.Kill();
}

Но это приводит к нежелательному эффекту не просто уничтожения одного процесса, но и полного уничтожения проводника,даже панель задач исчезает.

Итак, как использовать существующее окно Проводника, если оно существует, для запуска Проводника?

Ответы [ 2 ]

1 голос
/ 28 января 2011

COM-интерфейс IShellWindows предоставит вам список открытых окон проводника, вы можете получить и установить адрес любого окна обозревателя, см. эту запись блога для примера C ++.Я сомневаюсь, что .NET имеет собственную реализацию этого, поэтому вам, вероятно, нужно PInvoke

0 голосов
/ 31 августа 2012

Другим вариантом было бы (если вы не знаете HWND окна проводника, которое вы уже открыли / хотите использовать повторно), перечислить и найти окно с заголовком, «похожим» на то, что вы хотите, а затем указать это окно.выйти на первый план.В нем не будет указан нужный файл, но он может быть проще, чем другие параметры:)

...