Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как "popen()", но... / 4 сообщений из 4, страница 1 из 1
18.11.2003, 17:40
    #32327804
Shalmoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "popen()", но...
Есть ли способ открыть другую консольную программу,
перехватив ее стандартный и ошибочный потоки(можно и в одном)?
Как юниксовая popen("proga.exe 2>&1", "r"), но только заточенная
исключительно под виндоус (popen в виндоусе глючит: открывает
при каждом вызове черную дос консольку, даже если вызывающая
прога GUI или СGI - нe то, чтобы глюк, но все-таки...)

Слыхал про CreateProcess, но какие ей параметры задать для нужного мне перехвата
я так и не врубилсz...
...
Рейтинг: 0 / 0
19.11.2003, 07:28
    #32328106
Yet another cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "popen()", но...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BOOL CreateProcess(
  LPCTSTR lpApplicationName,                 // name of executable module
  LPTSTR lpCommandLine,                      // command line string
  LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD
  BOOL bInheritHandles,                      // handle inheritance option
  DWORD dwCreationFlags,                     // creation flags
  LPVOID lpEnvironment,                      // new environment block
  LPCTSTR lpCurrentDirectory,                // current directory name
  LPSTARTUPINFO lpStartupInfo,               // startup information
  LPPROCESS_INFORMATION lpProcessInformation // process information
);


В dwCreationFlags должен быть передан флаг CREATE_NO_WINDOW (возможно в комбинации с другими), тогда для нового процесса не будет создано окно консоли. Это полезно для CGI. В lpStartupInfo передается указатель на структуру типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
typedef struct _STARTUPINFO { 
    DWORD   cb; 
    LPTSTR  lpReserved; 
    LPTSTR  lpDesktop; 
    LPTSTR  lpTitle; 
    DWORD   dwX; 
    DWORD   dwY; 
    DWORD   dwXSize; 
    DWORD   dwYSize; 
    DWORD   dwXCountChars; 
    DWORD   dwYCountChars; 
    DWORD   dwFillAttribute; 
    DWORD   dwFlags; 
    WORD    wShowWindow; 
    WORD    cbReserved2; 
    LPBYTE  lpReserved2; 
    HANDLE  hStdInput; 
    HANDLE  hStdOutput; 
    HANDLE  hStdError; 
} STARTUPINFO, *LPSTARTUPINFO; 


Полагаю, смысл последних 3-х параметров объяснять не нужно? Правда не уверен, что так можно перехватить вывод неконсольного приложения. Скорее всего нельзя. Винда не Юникс.
...
Рейтинг: 0 / 0
19.11.2003, 07:32
    #32328108
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "popen()", но...
Винда не Юникс.
о да...
когда они сделают сокеты и файловые дескрипторы совместимыми?
риторический вопрос
...
Рейтинг: 0 / 0
22.11.2003, 04:16
    #32332052
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "popen()", но...
а нафига тебе совместимое API??? Это же разные OS. :)

Пользуйся переносимыми классами. Ты же вроде ковырял vxWindows.

посмотри M::Classes на sourceforge.net.

Забудешь раз и навсегда о головной боли с сокетами.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как "popen()", но... / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]