System.Diagnostics.Process.Start with WindowStyle.Hidden не повторяет обработку

Я пытаюсь открыть простой.net exe/notepad.exe, используя process.start в скрытом режиме. позже мне понадобится дескриптор процесса, чтобы application.exe сделал его видимым через некоторое время.

  1. Возможность получить дескриптор только в WindowStyle.Minimized, WindowStyle.Maximized, WindowStyle.Normal. В скрытом стиле это всегда дает мне 0.

  2. Как получить ручку без использования Thread.Sleep. Нам нужно подождать несколько секунд, чтобы справиться. некоторые exe требуют больше времени ожидания, в зависимости от его производительности (огромные данные).

    public static void LaunchExe()
    {
        var proc = new Process
        {
            StartInfo =
            {
                FileName = "Notepad.exe", //or any simple .net exe
                WindowStyle = ProcessWindowStyle.Hidden
            }
        };
    
        proc.Start();
    
        proc.WaitForInputIdle(800); //is it possible to avoid this.
        Thread.Sleep(3000); //is it possible to avoid this.
    
        Console.WriteLine("handle {0}", proc.MainWindowHandle);
    
    
        //ShowWindowAsync(proc.MainWindowHandle, 1); //planned to use, to make it visible.
    }
    

1 ответ

Решение

Вы можете сделать что-то вроде этого:

        IntPtr ptr = IntPtr.Zero;
        while ((ptr = proc.MainWindowHandle) == IntPtr.Zero)
        { proc.WaitForInputIdle(1 * 60000); Thread.Sleep(10); }   // (1*60000 = 1min, will give up after 1min)

Таким образом, вы не тратите больше времени, чем нужно.

Вы не можете получить управление скрытого процесса.

По данным МС:A process has a main window associated with it only if the process has a graphical interface. If the associated process does not have a main window, the MainWindowHandle value is zero. The value is also zero for processes that have been hidden, that is, processes that are not visible in the taskbar.

Я думаю, что ваш единственный выбор состоял бы в том, чтобы запустить его как обычно, получить ручку, а затем скрыть ее.
Это может вызвать мерцание, но оно должно работать. Чтобы смягчить мерцание, вы можете запустить его свернутым...

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