Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2014, 02:16   #1
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Вопрос StdIn в чужое консольное окно

Доброго времени суток!

Есть консольное приложение (запущено отдельно), есть Handle его процесса, есть Handle его окна.

Нужно отправить окну программы всего то "exit<Enter>"

Я могу просто придушить его процесс, или послать ему PostMessage(MyWnd,WM_QUIT,0,0); - это закрывает консоль, но работа приложения просто обрывается, а хотелось бы что бы завершалась корректно...

Пробовал так:
Код:
PostMessage(MyWnd,WM_CHAR,byte('e'),0);
PostMessage(MyWnd,WM_CHAR,byte('x'),0);
PostMessage(MyWnd,WM_CHAR,byte('i'),0);
PostMessage(MyWnd,WM_CHAR,byte('t'),0);
PostMessage(MyWnd,WM_CHAR,VK_RETURN,0);
и так:
Код:
PostMessage(MyWnd,WM_KEYDOWN,byte('e'),0);
PostMessage(MyWnd,WM_KEYUP,byte('e'),0);
PostMessage(MyWnd,WM_KEYDOWN,byte('x'),0);
PostMessage(MyWnd,WM_KEYUP,byte('x'),0);
PostMessage(MyWnd,WM_KEYDOWN,byte('i'),0);
PostMessage(MyWnd,WM_KEYUP,byte('i'),0);
PostMessage(MyWnd,WM_KEYDOWN,byte('t'),0);
PostMessage(MyWnd,WM_KEYUP,byte('t'),0);
PostMessage(MyWnd,WM_KEYDOWN,VK_RETURN,0);
PostMessage(MyWnd,WM_KEYUP,VK_RETURN,0);
но окно не реагирует!

пишут что PostMessage только для объектных окон, а консольным до того, что оттуда приходит, до лампочки...

Нашел, что нужно исходя из Handle процесса поймать StdIn нужной консоли, но не нашел нормального примера как это сделать. Восновном находится как получить строки из консоли, а не как их туда отправить.

Подскажите примерчик или ссылочку....
Разберемся.......
ЧИЖ вне форума Ответить с цитированием
Старый 11.05.2014, 10:13   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Передайте фокус консольному окну и воспользуйтесь SendInput()

А что мешает запускать процесс самому и контролировать кто и что туда пишет и в нужный момент посылать что надо?
waleri вне форума Ответить с цитированием
Старый 11.05.2014, 13:10   #3
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
По умолчанию

Не очень удобный вариант: нужно обязательно окно развернуть, дать ему фокус.... А если поверх всего открыто DirectX окно? его прийдется свернуть для отправки в нужную консоль команды? Или как вариант рабочий стол заблокирован (Win+L)?

http://forum.hackzona.ru/forum-f16/o...hi-t18139.html
Тут есть пример как из консоли результаты тянуть, там юзают StdOut окна для этого, и как я понимаю там не важно свернуто оно, спрятано, или в фокусе...

Мне как я понимаю для достижения правильного результата нужен StdIn окна, но как его получить, а главное туда что то отправить, я так и не нашел нормального примера.

А к стати, что мне даст если я его сам запущу?
Разберемся.......
ЧИЖ вне форума Ответить с цитированием
Старый 11.05.2014, 13:19   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну тогда попробуйте AttachConsole(), WriteConsoleInput() и stdin вместо stdout.

Если будете запускать сами, вы будете создавать для процесса его stdin/stdout/stderr и сможете подсовывать все что надо и когда надо.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чужое окно вылетает evgenrpo Win Api 0 16.03.2012 00:40
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Control в чужое окно Qwe1 Win Api 5 25.12.2010 00:27
Скрыть чужое окно ЧИЖ Win Api 8 12.06.2008 00:55