Как проверить, определен ли тип данных с помощью typedef

Отказ от ответственности:

Я бы посоветовал не автоматизировать установку Windows, используя что-то вроде SendKeys, так как вы не можете гарантировать последовательное поведение и можете легко все испортить. Вы можете рассмотреть возможность поиска различных подходов , как это было предложено Ланом Кемпом в комментариях . Этот ответ только показывает, как правильно получить дескриптор окна настройки. Вы можете использовать его на свой страх и риск.

blockquote>

Обновление:

По-видимому, исполняемый файл установки 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;
// ...

17
задан Shripad Bodas 18 August 2010 в 22:40
поделиться

2 ответа

Нет способа напрямую распознать, определен ли typedef. Самый популярный обходной путь - проверить, определяет ли файл, который определяет typedef, также макрос.

Например, Тип "struct tm" определен в time.h. Если вы посмотрите на свою копию time.h, там будет макрос, определенный сверху. В версии VC2010 это «_INC_TIME», поэтому вы можете написать

#if !defined(_INC_TIME)
    // Do whatever
#endif

Если интересующий вас тип определяет макрос, то вы можете проверить это.

9
ответ дан 30 November 2019 в 14:38
поделиться

Не знаю, как вы будете проверять typedef, но если есть макрос, который вы можете идентифицировать в файле с typedef, вы можете проверить операторы define с помощью #ifdef

http: / /gcc.gnu.org/onlinedocs/cpp/Ifdef.html

0
ответ дан 30 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: