![]() |
|
Модераторы: bsa |
![]()
|
|
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
Есть код:
Просто, пытаюсь из уже запущенного блокнота читать данные через pipe. Ничего не выходит. Подскажите, в чем ошибка. И еще вопрос чем HWND отличается от Handle ? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
У блокнота нет stdin. Код - беспорядочное нагромождение. Цель не ясна. HWND - особый тип HANDLE, его нельзя использовать в ReadFile/WriteFile
Это сообщение отредактировал(а) leniviy - 6.11.2010, 12:42 |
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
Я же написал:
"Просто, пытаюсь из уже запущенного блокнота читать данные через pipe." Если заменить htargetStdIn = FindWindow(NULL, "Untitled - Notepad"); на htargetStdIn = FindWindow(NULL, "C:\\WINDOWS\\system32\\cmd.exe"); и запустить командную строку, - эффетк такой же. вернее никакой. |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
||||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
Вообще хочу перенаправить вво-вывод с cmd в свое консольное приложение.
блокнот взял просто потому что думал на блокноте нагляднее и безопасьнее... Нужно именно через pipe. Я понимаю что есть другие методы... например winapi GetKeyState и т.д.. |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
1) Блокнот - плохой выбор. Только в консольных прогах можно перенаправить ввод/вывод.
2) Нельзя перенаправить ввод/вывод уже запущенной программы. Пайпы надо передавать через CreateProcess. Пример есть в msdn. http://msdn.microsoft.com/en-us/library/ms...v=VS.85%29.aspx Это сообщение отредактировал(а) leniviy - 6.11.2010, 13:15 |
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
leniviy, спасибо.
Примеры видел, разбирал... на слова"Нельзя перенаправить ввод/вывод уже запущенной программы. " нигде не наткнулся, думал можно из любого. Попробую. |
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
Кто знает, подскажите, пожалуйста.
Код по данной ссылке http://www.realcoding.net/article/view/815 плодить процессы cmd.exe со свойсвом SH_HIDE. Строки:
Не вызывают закрытия процесса. Нагуглил, что процесс, вызванный CreateProcess() завершается, когда закрываются все хендлы, потоки вызванные им. Вопрос: Почему остаются невидимые экземпляры cmd.exe ? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Кроме того, для завершения процесса thread'ы должны завершиться, а не просто закрыться хэндлы на них. Это сообщение отредактировал(а) xvr - 8.11.2010, 13:27 |
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
то есть надо найти хендл дочернего приложения изакрыть его пеерд закрытием остальных*?
Эту структуру нельзя заменить чем-нибудь более коротким? например ExitProcess? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Это не поможет. Закрытие хэндла процесса не завершит процесс
|
||||
|
|||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
А как выполнить ExitProcess в контексте дочернего приложения???
В MSDN VOID ExitProcess( UINT uExitCode ); Parameters uExitCode [in] Specifies the exit code for the process and for all threads that are terminated as a result of this call. To retrieve the process's exit value, use the GetExitCodeProcess function. To retrieve a thread's exit value, use the GetExitCodeThread function. то есть надо BOOL WINAPI GetExitCodeProcess( хендл дочернего приложения, а вот тут указатель на переменную, котоаря примет эксидкод); ?? Так будет парвильно? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Чтобы закрыть cmd.exe, надо послать команду "exit\n" и процесс завершится.
Это сообщение отредактировал(а) leniviy - 8.11.2010, 14:48 |
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
leniviy проявил смекалку)) я и забыл об этом... н овсе же по поводу ExitProcess я правильно мыслю?
|
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
TerminateProcess(). А вообще cmd.exe должно завершаться и после закрытия пайпа.
CloseHandle(write_stdout); должен помочь Это сообщение отредактировал(а) leniviy - 8.11.2010, 14:54 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |