Для переадресации устройства вывода воспользуемся параметром lpStartupInfo, который имеет следующую структуру (см. таблицу 1).
Таблица 1. Параметры функции CreateProcess
Параметр |
Описание |
cb: DWORD; |
Размер данной структуры |
lpReserved: Pointer; |
Зарезервировано |
lpDesktop: Pointer; |
Для NT - указатель на строку, которая содержит название дисплея, на который выводится информация приложения (здесь не используется) |
lpTitle: Pointer; |
Для консольных приложений - строка, которая отображается на панели задач |
dwX: DWORD; |
X-координата приложения (нам она не нужна - 0) |
dwY: DWORD; |
Y-координата приложения (нам она не нужна - 0) |
dwXSize: DWORD; |
Ширина окна приложения (нам она не нужна - 0) |
dwYSize: DWORD; |
Высота окна приложения (нам она не нужна - 0) |
dwXCountChars: DWORD; |
Для консольных приложений задает ширину в "текстовых единицах" (для нас - 0) |
dwYCountChars: DWORD; |
Для консольных приложений задает высоту в "текстовых единицах" (для нас - 0) |
dwFillAttribute: DWORD; |
Задает сочетание цвета фона и цвета символа (это не для нас - опять 0) |
dwFlags: DWORD; |
См. таблицу 2 |
wShowWindow: Word; |
Одна из констант SW_ - режим отображения приложения (это не для нас) |
cbReserved2: Word; |
Зарезервировано |
lpReserved2: PByte; |
Зарезервировано |
hStdInput: THandle; |
Дескриптор стандартного ввода |
hStdOutput: THandle; |
Дескриптор стандартного вывода |
HStdError: THandle; |
Дескриптор стандартного устройства вывода ошибки |
Таблица 2. Описание флагов запускаемого процесса
Значение |
Описание |
STARTF_USESHOWWINDOW |
Если не задан, wShowWindow игнорируется |
STARTF_USEPOSITION |
Если не задан,, dwX, dwY игнорируются |
STARTF_USESIZE |
Если не задан dwXSize, dwYSize игнорируются |
STARTF_USECOUNTCHARS |
Если не задан, dwXCountChars, dwYCountChars игнорируются |
STARTF_USEFILLATTRIBUTE |
Если не задан, dwFillAttribute игнорируется |
STARTF_FORCEONFEEDBACK |
Очень много написано, все равно не использую |
STARTF_FORCEOFFFEEDBACK |
Очень много написано, все равно не использую |
STARTF_USESTDHANDLES |
Если не задан, hStdInput, hStdOutput, hStdError не используются |
Как же все это будет выглядеть в программе? Для начала приведу функцию, которая возвращает в параметре Result:TStringList значения переменных окружения: