Я хочу запустить командный файл, который сам запускает exe. Exe открывается с окном GUI, и я хотел бы получить это окно, чтобы поместить его в мою собственную панель. WinApi не проблема. Если я запускаю exe без пакета, он работает нормально. Но мой босс хочет использовать партии. Процесс запуска пакета открывает это черное окно cmd, быстро завершается и вызывает мое событие OnProcessExited. Затем запускается фактическое окно GUI из Test.exe. Мне нужна ручка этого. Есть ли простой способ добиться этого?
C#:
string cmdLine = "test.bat";
Process p = new Process();
//Process p = Process.Start(cmdLine);
if (p != null)
{
p.EnableRaisingEvents = true;
p.StartInfo.FileName = Path.GetFullPath(cmdLine);
p.Exited += new EventHandler(OnProcessExited);
p.Start();
if (p.WaitForInputIdle(15 * 1000))
{
//Thread.Sleep(100);
IntPtr wnd = p.MainWindowHandle;
RECT rect = WindowsUtils.GetWindowRect(wnd); // this is just WinApi library
Windows.SetParent(wnd, panelMoni.Handle);
Windows.SetWindowPos(wnd, new IntPtr(Windows.HWND_TOP), 0, 0, rect.Width, rect.Height, 0);
}
else
p.Close();
}
Пакет :
START Test.exe
РЕДАКТИРОВАТЬ:
Test.exe представляет собой простое приложение Forms. И как следует из названия, его имя неизвестно. На самом деле мне нужно зарегистрировать группу пакетов, которые запускаются независимо от того, какой администратор работает.
Возможные решения :
- SetWindowsHookEx : Поймать windows события создания окна. Я не смог заставить его работать.
- Поскольку пакет представляет собой текстовый файл, я мог бы проанализировать его и выяснить, какой исполняемый файл запускается.
- ManagementEventWatcher