C# Возвращение фокуса на родительскую форму из другого приложения

Я пытаюсь запустить и.exe из дочерней формы моего основного приложения, но проблема в том, что когда я открываю другой.exe и он заканчивает свою работу (сканирование отпечатков пальцев) и завершает работу, мое приложение сворачивается, поэтому Я пытаюсь это:

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd); 


    void method {
    ..........more code...........
     using (Process proc = new Process())
                    {
                        proc.StartInfo.FileName = "WindowsFormsApplication3.exe";
                        proc.Start();
                        SetForegroundWindow(proc.MainWindowHandle);
                    }
    ............code here..............
    }

но это не работает, мое основное приложение потеряло фокус, я нахожу много решений, но любое из них работает для меня, другое.exe - приложение, которое я тоже делаю.

1 ответ

Решение

Если вы хотите активировать окно отпечатков пальцев, ваш код правильный! но добавьте ожидание перед SetForegroundWindow... вот так:

while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
    System.Threading.Thread.Sleep(100);
    proc.Refresh();
}

и, если вы хотите активировать форму вызывающего абонента (главное приложение), вам не нужно SetForegroundWindow! Ты можешь написать:

while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
    System.Threading.Thread.Sleep(100);
    proc.Refresh();
}
// Then active caller form...
this.Activate();

В любом случае, вам нужно подождать, пока не появится окно с отпечатками пальцев...

Другие вопросы по тегам