· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как захватить текст с консоли и в то же время заблокировать её показ.

Посл.отвђт Сообщенiе


Дата: Фев 3, 2004 23:54:21

Сабж. Кажется такое делает RadAsm при компиляции, вобщем
примеры в исходниках приветствуются или дельные подсказки.


Дата: Фев 4, 2004 00:13:04

Iczelion прятал консоль и подсовывал ей пайп в 21 уроке.


Дата: Фев 4, 2004 00:17:11 · Поправил: Asterix

Спасибо, это то что нужно!
Гы, я сам оказывается Ицзелиона не читаю :-)))


Дата: Фев 23, 2004 21:00:57

Asterix
А у тебя уже есть готовый пример. У Iczelion'а, как всегда, есть небольшие недочёты в коде :-) Зато в примере xpolis показан более правильный подход.


Дата: Фев 24, 2004 18:41:35

А Икзелион что-то толи недоделал, то ли я не понимаю, но у меня появляется под Windows 2000 Pro такое сообщение:
"Error During Process Creation". Очень долго занимаюсь с этой проблемой, может быть исходником рабочим поделитесь?


Дата: Фев 24, 2004 22:32:29

Может быть просто ссылку кто-нибудь кинет?


Дата: Фев 25, 2004 03:04:56

1990
А Икзелион что-то толи недоделал
Во-во. Про пайпы книги писаны, т.е. тема эта не настолько тривиальна как Iczelion её преподносит в своём туториале. Вообще, наиболее правильное решение зависит от конкретного консольного приложения. Во многих случаях следует читать/писать в пайп асинхронно. Также рекомендуется запрещать наследование неиспользуемого конца анонимного пайпа через DuplicateHandle.

Мой исходник очень узкоспециализирован и врядли Вам поможет. Ссылки можно найти в поисковике, но для C/C++.

Error During Process Creation
Тогда проблема скорее не в пайпе, а в CreateProcess


Дата: Фев 26, 2004 09:45:54

Quantum
Буду искать в чём трабла.


Дата: Фев 26, 2004 11:43:10 · Поправил: rst

      LockSelf();
	string rv="";
	STARTUPINFO si={0};
	PROCESS_INFORMATION pi={0};
	si.cb=sizeof(STARTUPINFO);
	HANDLE hStdIn;
	HANDLE hStdOut;
	SECURITY_ATTRIBUTES saAttr;
	saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
	saAttr.bInheritHandle = TRUE; 
	saAttr.lpSecurityDescriptor = NULL; 
	BOOL br = CreatePipe(&hStdIn,&hStdOut,&saAttr,10);
	si.hStdError=hStdOut;
	si.hStdInput=hStdIn;
	si.hStdOutput=hStdOut;
	si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
	CreateProcess(apg_path.c_str()," -n 1",0,0,TRUE,0,0,0,&si,?);
	while (true)
	{
		DWORD dwWaitResult;
		dwWaitResult=WaitForSingleObject(pi.hProcess,0);
		if (dwWaitResult!=WAIT_TIMEOUT )
		{
			break;
		}
		DWORD dwDataSz=GetFileSize(hStdIn,NULL);
		if (dwDataSz)
			{
				char * buff=new char[dwDataSz];
				DWORD cbRead=0;
				ReadFile(hStdIn,buff,dwDataSz,&cbRead,0);
				if (cbRead)
				{
					buff[cbRead-2]='\0';
					rv+=buff;
				}
				delete [] buff;
			}
		Sleep(1);
	}
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
	CloseHandle(hStdIn);
	CloseHandle(hStdOut);
	UnLockSelf();
	return rv;


Дата: Фев 27, 2004 11:16:14

rst
Thx! Попробую.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.041