Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
19 Июль 2025, 18:26:21
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование > Тема: Re: перехват STDOUT
(Модераторы: Админ, barmalei) > Тема:

Сообщение #1514893

Страниц  :   Вниз
  Печать  
Автор Тема: Re: перехват STDOUT  (Прочитано 2132 раз)
0 Пользователей и 1 Гость смотрят эту тему.
iddqd
Лёдчег
Почетный гродненец
*****

Репутация: +170/-10
Offline Offline

Пол: Мужской
Сообщений: 2275


Не уйдешь!

Просмотр профиля
« Ответ #0 : 15 Май 2008, 11:29:44 »

я думаю soft.exe > your_soft.exe не софсем то что надо, т.е. не софсем будет работать. замарчивался с этой проблемой я уже   Улыбка
 PROCESS_INFORMATION piProcInfo;
               STARTUPINFO siStartInfo;
                ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );

                HANDLE ChildStdOutRead, ChildStdOutWrtite, ChildStdInRead, ChildStdInWrite;
                HANDLE ParentStdOutRead, ParentStdInWrite;
                ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
                siStartInfo.cb = sizeof(STARTUPINFO);

                SECURITY_ATTRIBUTES saAttr;
                saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
                saAttr.bInheritHandle = TRUE;
                saAttr.lpSecurityDescriptor = NULL;
                //pipe for child's out
                CreatePipe(&ChildStdOutRead, &ChildStdOutWrtite, &saAttr, 0);

                DuplicateHandle(GetCurrentProcess(), ChildStdOutRead,   GetCurrentProcess(), &ParentStdOutRead, 0, FALSE, DUPLICATE_SAME_ACCESS);
                CloseHandle(ChildStdOutRead);

                //pipe for child's in
                CreatePipe(&ChildStdInRead, &ChildStdInWrite, &saAttr, 0);

                DuplicateHandle(GetCurrentProcess(), ChildStdInWrite,   GetCurrentProcess(), &ParentStdInWrite, 0, FALSE, DUPLICATE_SAME_ACCESS);
                CloseHandle(ChildStdInWrite);
                siStartInfo.hStdError = ChildStdOutWrtite;
                siStartInfo.hStdOutput = ChildStdOutWrtite;
                siStartInfo.hStdInput = ChildStdInRead;
                siStartInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
                siStartInfo.wShowWindow = SW_HIDE;


                CreateProcess(Command, Arg, NULL, NULL, true, 0, NULL, data.TempDir, &siStartInfo, &piProcInfo);

              
                while (1)
                {
                        WaitForSingleObject(piProcInfo.hProcess, CONSOLE_WAITING_INTERVAL);
                        CHAR Buffer[MAX_STR_LENGTH*10] = {0};
                        DWORD dwRead = 0;
                        BOOL ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
                        while (ReadResult && dwRead==0)
                        {
                                ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
                        }

                        //parsing output
                        //........................
                        //.......................
                        //а так мона писать иму на фход
                         WriteFile(ParentStdInWrite, "yes\r\n", 5, &dwWrite, NULL);

                }

вопщем идея должна быть понятна. на мсдне фсе это далжно быть
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,075 секунд. Запросов: 20.