Próbuję uruchomić proces zewnętrzny w aplikacji Visual C# 2010 - Windows Forms. Celem jest rozpoczęcie procesu jako ukrytego okna i odkrycie okna w późniejszym czasie.Jak ukryć/odkryć proces w języku C#?
zaktualizowałem moje postępy:
//Initialization
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool EnableWindow(IntPtr hwnd, bool enable);
[DllImport("user32.dll")]
private static extern bool MoveWindow(IntPtr handle, int x, int y, int width,
int height, bool redraw);
SW_SHOW = 5;
Poniższa został umieszczony w moim głównym funkcji:
ProcessStartInfo info = new ProcessStartInfo("process.exe");
info.WindowStyle = ProcessWindowStyle.Hidden;
Process p = Process.Start(info);
p.WaitForInputIdle();
IntPtr HWND = p.MainWindowHandle;
System.Threading.Thread.Sleep(1000);
ShowWindow(HWND, SW_SHOW);
EnableWindow(HWND, true);
MoveWindow(HWND, 0, 0, 640, 480, true);
Jednakże, ponieważ okno było rozpoczął jako "ukryty" p.MainWindowHandle = 0
. Nie jestem w stanie wyświetlić okna. Próbowałem również HWND = p.Handle
bez powodzenia.
Czy istnieje sposób na dostarczenie nowego uchwytu do mojego okna? To może potencjalnie rozwiązać mój problem.
Referencje:
Ukrywanie procesu? (podejrzany) - czy ukrywasz formularz? –
Ukrywanie okna procesu. Dla dobra argumentu załóżmy, że jest to przeglądarka internetowa: 'ProcessStartInfo info = new ProcessStartInfo (" iexplore ");' –
CreateNoWindow działa tylko w aplikacji trybu konsoli. Ukryty wymaga współpracy aplikacji GUI i zwracania uwagi na argument 'nCmdShow', który system Windows przekazuje do swojej funkcji WinMain(). Jest to jednak często ignorowane. Nic, co możesz z tym zrobić poza skontaktowaniem się z właścicielem. –