Перенесите несколько процессов в окна переднего плана

В настоящее время у меня есть приложение с несколькими мониторами на электронном движке, которое открывает другое окно с отдельным содержимым на каждом мониторе. Он использует 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 отдельных окна на передний план с помощью консольного приложения С#?


person Jack    schedule 30.03.2016    source источник
comment
Я бы не хотел, чтобы они оба были в фокусе. SetForegroundWindow — это единственный способ, который я смог найти, чтобы вернуть окно на передний план любого монитора, на котором оно было открыто, и, поскольку они являются полноэкранными приложениями, им нужно скрыть панель задач (что делает SetForegroundWindow). Смысл делать это с обоими заключался в том, что первый будет установлен как передний план, и, следовательно, он будет полноэкранным и получит фокус. Затем второй запустит SetForegroundWindow, а затем уберет фокус и станет полноэкранным на своем мониторе. Мне просто нужно, чтобы оба были выведены на передний план и были на весь экран.   -  person Jack    schedule 30.03.2016
comment
Извините, удалил мой комментарий, потому что я понял, что вы хотели сделать. Поможет ли это stackoverflow.com/questions/3750113/? Части положения окон.   -  person Jacobr365    schedule 30.03.2016
comment
Я думаю, что пробовал это раньше, но я попробую еще раз, чтобы увидеть, не неправильно ли я его настроил. Спасибо.   -  person Jack    schedule 30.03.2016