Отказ от ответственности:
Я бы не советовал автоматизировать установку Windows, используя что-то вроде SendKeys
, так как вы не можете гарантировать последовательное поведение и можете легко испортить ситуацию.Вы можете рассмотреть возможность поиска различных подходов , как это было предложено Ланом Кемпом в комментариях .Этот ответ только показывает, как правильно получить дескриптор окна настройки.Вы можете использовать его на свой страх и риск.
Обновление:
Очевидно, исполняемый файл установки Windows 10 («Setup.exe») запускает другой процесс, называемый «SetupPrep.exe», которыйзапускает третий процесс под названием «SetupHost.exe» (тот, который вы ищете).Итак, вы можете запустить основной процесс, подождать, пока целевой процесс запустится и получить MainWindowHandle
, прежде чем выполнить оставшийся код:
Process p1 = Process.Start("H:\\setup.exe");
Process targetProcess;
do
{
Thread.Sleep(500);
targetProcess = Process.GetProcessesByName("SetupHost").FirstOrDefault();
} while (targetProcess == null || targetProcess.MainWindowHandle == IntPtr.Zero);
IntPtr h = targetProcess.MainWindowHandle;
// ...
Это должно решить вашупроблема, однако, не мудрая идея использовать SendKeys
для этой цели.Пожалуйста, обратитесь к отказу от ответственности выше.
Оригинальный ответ:
Удалось ли вам убедиться, что h
действительно имеет значение (отличное от IntPtr.Zero
) ?Потому что у него, вероятно, нет фактического дескриптора окна, так как вы не даете процессу достаточно времени для запуска и получения дескриптора окна.
Попробуйте что-то вроде этого:
Process p1 = Process.Start("h:\\setup.exe");
while (p1.MainWindowHandle == IntPtr.Zero)
{
Thread.Sleep(500);
}
IntPtr h = p1.MainWindowHandle;
// ...