Запустить пакетный скрипт, который запускает Exe, получить окно Exe? - PullRequest
0 голосов
/ 18 марта 2020

Я хочу запустить командный файл, который сам запускает 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. И как следует из названия, его имя неизвестно. На самом деле мне нужно зарегистрировать группу пакетов, которые запускаются независимо от того, какой администратор работает.

Возможные решения :

  1. SetWindowsHookEx : Поймать windows события создания окна. Я не смог заставить его работать.
  2. Поскольку пакет представляет собой текстовый файл, я мог бы проанализировать его и выяснить, какой исполняемый файл запускается.
  3. ManagementEventWatcher
...