2014-09-02 2 views
1

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

  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. 
    } 
    

ответ

0

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

 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) 

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

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

According to MS: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.

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

+0

Да, это поможет. Есть ли возможность получить доступ к скрытому процессу? – anand

+0

@anand Отредактировал свой ответ. –

+0

спасибо. Мое фактическое требование - открыть exe, разработанный разработчиком команды, получить дескриптор и показать exe внутри .net winform. минимизированный вариант не работает для этого exe. но он работает для winform.exe, блокнот. – anand