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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 04:08   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Вопрос консольный ввод/вывод в программу

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

Появилась мысль запускать консольную программу, прятать окно и получать консольный вывод в memo далее ввод в консоль перенаправить на edit.


Как это реализуется?
В гугл, drkb, DW и прочие источники, не посылать... уже был, нашё тучу кодов. Толку мало. В большинстве только вывод в memo про ввод ничего не накопал..

Далее интересует вопрос с посылкой комманд в консольное окно и олучать вывод оттуда же.

Человек_Борща вне форума Ответить с цитированием
Старый 28.04.2011, 06:12   #2
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

читает из консоли в мемо, и пишет в консоль,
но "ентер" так и несмог передать(

Код:
type TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall;
var
  AttachConsole: TAttachConsole;
  mProcessID, Wnd, Hcwnd, chRead: Cardinal;
  BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
  lpCh: PChar;
  Coord: _COORD;
  i: Integer;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  cb : DWORD;
  h : THandle;
  s : string;
begin
  @AttachConsole:= GetProcAddress(GetModuleHandle('kernel32.dll'), 'AttachConsole');
  if @AttachConsole = nil then
  begin
    MessageBox(0, 'Ïðîãðàììà ðàáîòàåò òîëüêî ïîä Windows XP è âûøå!', 'Error', 16);
    Halt(1);
  end;
  Wnd:= FindWindow(nil, 'C:\WINDOWS\system32\cmd.exe');
  GetWindowThreadProcessId(Wnd, @mProcessID);
  s:='11111testing';
  if AttachConsole(mProcessID) then
  begin
    Hcwnd:= GetStdHandle(STD_OUTPUT_HANDLE);
//    WriteConsole(Hcwnd, (pchar(s+#13#10)), Length(s)+2, cb, nil);//åíòåð êðèâîé((
    WriteConsole(Hcwnd, (pchar('wiriteConsole'+s)), Length('wiriteConsole'+s), cb, nil);
//    WriteFile(Hcwnd, pchar('wiriteFile_'+s)^, length('wiriteFile_'+s), cb, nil);


    GetConsoleScreenBufferInfo(Hcwnd, BufInfo);
    GetMem(lpCh, BufInfo.dwMaximumWindowSize.X+1);
    try
      for i:=0 to BufInfo.dwSize.Y-12 do begin
         Coord.X := 0;
         Coord.Y := i;
         ReadConsoleOutputCharacter(Hcwnd, lpCh, BufInfo.dwMaximumWindowSize.X, Coord, chRead);
         mmo1.Lines.Add(lpCh);
      end;
    finally
      FreeMem(lpCh, BufInfo.dwMaximumWindowSize.X+1);
    end;
  end;
end;
GoodDA вне форума Ответить с цитированием
Старый 28.04.2011, 16:05   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

STARTUPINFO.hStdInput и STARTUPINFO.hStdOutput

Написание кода за тебя - 1000 рублей.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 27.09.2012, 21:00   #4
Timeon
Новичок
Джуниор
 
Регистрация: 09.10.2009
Сообщений: 1
По умолчанию

Если еще интересует, то могу кинуть готовый модуль для работы с консолью.
Timeon вне форума Ответить с цитированием
Старый 27.09.2012, 22:08   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Боюсь, поздновато будет. Уже умею =)
Человек_Борща вне форума Ответить с цитированием
Старый 27.11.2013, 12:49   #6
chinger
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 1
По умолчанию

Натолкнулся на ту же проблему - как передать символ перевода каретки, чтобы получающее консольное приложение выполнило readln?
chinger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
консольный вывод (ассемблер) VadEr Помощь студентам 0 09.03.2011 21:11
консольный ввод и вывод AndAsh Общие вопросы C/C++ 4 29.01.2011 01:54
Ввод-Вывод Joker_35815 Помощь студентам 2 30.03.2010 19:22
линейные программы консольный ввод и вывод DjDeniels-61 Помощь студентам 1 20.11.2009 09:23