В настоящее время у меня есть приложение с несколькими мониторами на электронном движке, которое открывает другое окно с отдельным содержимым на каждом мониторе. Он использует 2 отдельных процесса с одинаковым именем для отображения этих окон, «дом».
Затем приложение можно использовать для запуска разных окон. Один из них называется «игра». Эта игра открывает окно стиля управления на основном мониторе, а затем саму игру на втором мониторе. Оба эти процесса называются «игрой».
В настоящее время у нас есть небольшое консольное приложение C#, которое можно вызвать и передать строку, чтобы попытаться вывести эти приложения на передний план, как показано ниже:
class Program
{
[DllImport("user32.dll")]
private static extern IntPtr SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
static void Main(string[] args)
{
BringToFront(args[0]);
}
private static void BringToFront(string title)
{
// Get a handle to the Calculator application.
Process[] processes = Process.GetProcessesByName(title);
if (processes.Length > 1)
{
foreach(Process process in processes)
{
IntPtr mainWindowHandle = process.MainWindowHandle;
if (mainWindowHandle == GetForegroundWindow()) return;
SetForegroundWindow(mainWindowHandle);
}
}
}
}
Проблема в том, что это всегда выводит только 1 окно на передний план, а не оба. Я исследовал это и обнаружил, что это связано с правилами, окружающими SetForegroundWindow, и, если я не ошибаюсь, когда мы устанавливаем первое окно переднего плана, нам не разрешается устанавливать любые другие в качестве консольного приложения/процесса, который вызывает консольное приложение. больше не является процессом переднего плана.
Есть ли способ вывести 2 отдельных окна на передний план с помощью консольного приложения С#?