2014-09-02 4 views
1

숨겨진 모드에서 process.start를 사용하여 간단한 .net exe/notepad.exe를 열려고합니다. 나중에 process.exe를 사용하여 잠시 후에 프로세스를 볼 수있게해야합니다. 단지 WindowStyle.Minimized, WindowStyle.Maximized, WindowStyle.Normal 취급받을WindowStyle.Hidden으로 System.Diagnostics.Process.Start가 핸들을 다시 처리하지 않습니다.

  1. 가능. 숨겨진 스타일에서는 항상 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) 

당신은 당신이 필요 이상으로 더 이상 시간을 낭비하지 않을 그런 식으로.

숨겨진 프로세스의 핸들을 가져올 수 없습니다. 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.

According to MS:

나는 유일한 선택이 정상적으로 시작 핸들을 얻을, 그것은 숨겨진 설정하는 것입니다 생각합니다.
약간의 깜박임이 발생할 수 있지만 작동해야합니다. 깜박임을 줄이려면 최소화 된 상태로 시작할 수 있습니다 ...

+0

예. 도움이 될 것입니다. 숨겨진 프로세스를 처리 할 수있는 옵션이 있습니까? – anand

+0

@anand 내 대답을 편집했습니다. 덕분에 –

+0

. 내 실제 요구 사항은 팀 개발자가 개발 한 exe를 열고 핸들을 얻고 exe를 .net winform 안에 표시합니다. 최소화 된 옵션이 해당 exe에 대해 작동하지 않습니다. winform.exe, 메모장에서 작동합니다. – anand