Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

окно cmd.exe в форме Form1... как?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> окно cmd.exe в форме Form1... как?
Имя
Сообщение << Старые топики   Новые топики >>
окно cmd.exe в форме Form1... как? - 2007-08-27 16:26:31.356666   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
Доброго времени суток, уважаемые…..

Имеем:
1. окно Form1
Хотим получить:
в ОКНЕ Form1 стандартную виндовую сомандную консоль (cmd.exe).
(уточню задачу во избежании недоразумений…. требуется поместить окно консоли В окно Form1… )
заранее спсб за грамотные ответы….
Post #: 1
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 17:11:48.680000   
TeNbOK

Сообщений: 154
Оценки: 0
Присоединился: 2007-08-21 11:04:41.766666
Скорее всего придется написать обработчик, так сказать, свой интерпретатор…. поместить цмд-окошко в твою форму не выйдет, разве что через инет-компоненты попробуй… хотя скорее всего тоже не выйдет :))
Post #: 2
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 17:43:33.083333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
надеюсь это как-то поможет
http://www.rsdn.ru/Forum/?mid=102880
Напрямую запихнуть - врядли
Post #: 3
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 18:08:42.820000   
Kill_em_all

Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
quote:

Скорее всего придется написать обработчик, так сказать, свой интерпретатор….


При помощи пайпов (pipes) можно перенаправить ввод/вывод командной строки.
Подкрепить примером не смогу(сам не пробовал), но на каком-то форуме видел вопрос
с перенаправлением. Даже по-моему на исходниках.ру
Post #: 4
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 18:22:25.080000   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Запускаешь прогу через CreateProcess, в STARTUPINFO:

si.dwFlags = STARTF_USESTDHANDLES;
si.hStdError = GetStdHandler(STD_ERROR_HANDLE);
 
потом
 
CreatePipe(&hIn, &si.hStdOutput, 0, 0);
CreatePipe(&si.hStdInput, &hOut, 0, 0);
 
дальше все просто:
 
for (;;) {
    DWORD code;
    if (!GetExitCodeThread(pi.hThread, &code))  // pi это структура
        return -1;                                          // PROCESS_INFORMATION
    if (code == STILL_ACTIVE) {   
        // Читаем с помощью hIn
        // Пишем с помощью hOut
    }
    else
      break;
  }
  CloseHandle(si.hStdInput);
  CloseHandle(hOut);
  CloseHandle(si.hStdOutput);
  CloseHandle(hIn);
 
Выдрал из какого-то FAQ-а, может на что сгодиться
Post #: 5
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 19:56:59.510000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
за ответы спасибо…. но к сожелению, все не то(((( 20 часов уже бадаю эту траблу результат нулевой….. пайпы… это конечно хорошо… но задача по другому стоит…..
Post #: 6
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 22:32:05.090000   
int21h

Сообщений: 105
Оценки: 0
Присоединился: 2007-08-25 12:05:16.730000
Я непойму для каких целей тебе этот фрейм нужен ? Кинул бы на форму текстбокс с кнопкой и всё …
Post #: 7
RE: окно cmd.exe в форме Form1... как? - 2007-08-27 23:11:44.480000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
уважаемый … int21h … прошу Вас перечитать внимательно 1й пост и впредь воздержаться от подобных вопросов…
Post #: 8
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 00:50:59.940000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: Mkey

уважаемый … int21h … прошу Вас перечитать внимательно 1й пост и впредь воздержаться от подобных вопросов…

Ну реально, не всегда то, что спрашивает вопрошающий, соответствует его желанию.
Без обид. Статистика.
Может как-то можно обойти.
В принципе, хочется услышать зачем это можно использовать.
Post #: 9
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 03:06:40.390000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
прога-шпора….. с регулировкой видимости и куча ещё всяких настроек…. в принципе все продумано…. во время сдачи тестов на компе остается время…. вот хотелось бы без палева по компу полазить….. ссылку в личку закинул…
Post #: 10
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 03:10:33.350000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
quote:

Может как-то можно обойти.

обойти в моем случае усложнить….. цель упростить…
Post #: 11
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 09:49:20.616666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Погоди, ты решил поуправлять cmd-окном?
И для этого хочешь его в свою форму пихнуть?
Ну не знаю…
Может попробовать поработать с ним как с внешним.
Или не с ним.
В принципе, можно взять любой файл менеджер типа фар или тотал командер, и порулить им.
Там командная строка тоже поддерживается.
Post #: 12
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 13:49:48.840000   
5_nix

Сообщений: 231
Оценки: 0
Присоединился: 2007-02-26 00:43:17.386666
Может через ShellExecute , например так:
uses&nbsp;..., ShellAPI; &nbsp; &nbsp; procedure TForm1.Button1Click(Sender: TObject); begin &nbsp; ShellExecute(Handle, nil, 'C:\WINDOWS\system32\cmd.exe', nil, nil, SW_SHOW); end;Это конечно не в форме, но всеравно из программы вызывается.
Post #: 13
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 13:56:34.290000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: 5_nix

Может через ShellExecute , например так:
uses&nbsp;..., ShellAPI; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(Handle, nil, 'C:\WINDOWS\system32\cmd.exe', nil, nil, SW_SHOW); end;Это конечно не в форме, но всеравно из программы вызывается.

Ну ему потом надо с этим хэндлом играть.
вызывать его в других функциях. Я не уверен, что досковое окно будет адекватно себя вести. Хотя пробовать надо.
Post #: 14
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 14:06:26.656666   
5_nix

Сообщений: 231
Оценки: 0
Присоединился: 2007-02-26 00:43:17.386666
Перед тем как отписать, я сначала это чудо накатал и попробовал. Вывод: cmd запускается, команды выполняются; следовательно код работоспособный. Вопрос в другом, подходит ли это автору…
Post #: 15
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 15:01:06.370000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: 5_nix

Перед тем как отписать, я сначала это чудо накатал и&nbsp;попробовал. Вывод:&nbsp;cmd запускается, команды выполняются; следовательно код работоспособный. Вопрос в другом, подходит ли это автору…

Да при чем тут вызов внешнего приложения.
ему окно его обрабатывать надо
Post #: 16
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 15:27:14.356666   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
цитирую кусок из 1го поста….
quote:

(уточню задачу во избежании недоразумений…. требуется поместить окно консоли в окно Form1… )

все что мне надо "привязать" консоль к форме…. и ввод-вывод делать в этой консоли… отдельно болтающееся окно консоли мне не подходит…..

вот вам пример http://slil.ru/24787881
Post #: 17
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 16:20:58.333333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Скажи поподробнее что чего ты хочешь добиться? В общем случае ты *не сможешь* запихнуть консоль в свою форму как контрол, ведь она работает в другом процессе. Если ты хочешь, например, получить окно с несколькими контролами и консолью, то тебе лучше внедрить dll-ку в cmd.exe с помощью хуков или шеллкода, перехватить WndProc и работать с окном консоли как со своим (создавать контролы и т.д.). В любом случае такие вещи лучше писать на Си!
 
Альтернативный вариант - сделать дырку в форме с помощью SetWindowRgn и таскать консоль за своей формой с помощью MoveWindow чтобы позиция консоли относительно формы не менялась (ну там скрывать, показывать и т.д.). Это конечно, крутое извращение, но работать (наверное) будет.
Post #: 18
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 17:39:18.360000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
quote:

Если ты хочешь, например, получить окно с несколькими контролами и консолью

да…..


quote:

В любом случае такие вещи лучше писать на Си!

да хоть в машинных кодах… пример прошу….
Post #: 19
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 17:41:00.316666   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
quote:

Альтернативный вариант - сделать дырку в форме с помощью SetWindowRgn и таскать консоль за своей формой с помощью MoveWindow чтобы позиция консоли относительно формы не менялась (ну там скрывать, показывать и т.д.). Это конечно, крутое извращение, но работать (наверное) будет.

ответ - пост 11
Post #: 20
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 18:04:13.610000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
имхо, тут два варианта. либо забивая на вендовый эмулятор терминала писать собственный, либо играться с окошком cmd.exe, заставляя его отображаться там, где надо. что проще – это ещё вопрос. мне кажется что эмулятор написать проще.
в создании собственного терминала один существенный минус. насколько я знаю венда не предоставляет способа создать канал IPC типа *nix'ового pseudo-terminal'а. придётся пользоваться pipe'ами, а это может не понравиться отдельным приложениям, которые будут выполнятся с перенаправлением io в pipes.

если же моё "имхо" насчёт двух вариантов неверно, то значит есть ещё один способ – выковырять из cmd.exe способ, которым он создаёт окошко. даже наверное это можно и, наверное даже, впоследствии использовать это будет несложно, но… такой геморрой мне видится на этом пути, что наверное проще всё-таки выбирать из первых двух вариантов.

а вообще, половина всего сказанного – это домыслы основанные на косвенных данных. решил было их проверить, и мне сильно понравилась первая ссылка в "гугль://windows+terminal+emulator+console". посмотри что это. отпишись. мне честно говоря тоже интересно:
1. как эта хрень работает – какой и перечисленных мною способов использует
2. работают ли в ней всяческие псевдографические far'ы и тп.
Post #: 21
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 19:02:11.106666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Тяжело будет "играться с окошком cmd.exe".  Тупо запускаем Spy++ и пытаемся искать окно. Ну хэндл она показывает, авот захватить не может:
quote:

The specified window cannot be spied upon. Windows will not allow access to the message stream for this window

Это сцепифика командных окон. В ФАРЕ та же фигня.
Я когда играл буфером обмена, в свое время, заметил, что половина мессагов не проходят.
Скажем wm_past не пройдет командному окну. А программно нажать Ctrl+V - можно. т.е. сможет-ли автор заставить "клеяться" Cmd окно к своей форме - большой вопрос.
ИМХО, третий путь более верный
Нада пробовать
Post #: 22
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 19:28:13.703333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Пробовал перехватить WinProc консоли - не получается: SetWindowLong возвращает 0 (GWL_WNDPROC - ERROR_INVALID_INDEX, сцуко). С GUI-шными прогами, естественно, всё впорядке, короче, вот прожектик на VS:
 
http://redsh.iplot.ru/stuff/cmdglyph.zip
 
Пробовал управлять окошком консоли посредством танцев с бубном и функции AttachThreadInput - не получается, видите ли, "Cannot attach to system thread".
 
Других способов я пока не припомню. Но в любом случае чтобы воткнуть окно консоли в форму, придётся внедряться в процесс (или внедрять процесс cmd.exe в свой), а это жуткий гемморой (смотри мой прожектик).
 
Так что, помоему, всё таки лучше юзать пайпы…
Post #: 23
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 19:43:10.153333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: redsh
Пробовал перехватить WinProc консоли - не получается: SetWindowLong возвращает 0 (GWL_WNDPROC - ERROR_INVALID_INDEX, сцуко).

насколько я понимаю вопрос – окно консоли, оно "не совсем" окно… в винде ведь есть консольное приложение, есть gui'шное. кстати, вовсе не факт, что cmd вообще создаёт окна. да! точно, скорее всего он этого не делает, этим занимается кто-то ещё. не думаю что ядро, но… почему бы и нет? если вендовая графика в ядре, то почему бы окну консоли не быть там. короче не знаток я венды, не знаю, гадать не хочу.

но собственно я ведь дал ссылку. там программа которая, как заявлено, создаёт эти консоли пачками в виде табов. почему бы не посмотреть как она это делает?
Post #: 24
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 20:30:05.070000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
alexbozhko, redsh, rgo - спасибо за советы буду ковИряться….
Post #: 25
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 22:13:09.660000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: Mkey

alexbozhko, redsh, rgo - спасибо за советы буду ковИряться….

Там все же глянь по ветке с rsdn.
Там линк на какой-то рабочий компонент пак.
Линк, вроде, живой.
То или не то - не уверен, но похоже.

Post #: 26
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 22:25:48.590000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: rgo

quote:

ORIGINAL: redsh
Пробовал перехватить WinProc консоли - не получается: SetWindowLong возвращает 0 (GWL_WNDPROC - ERROR_INVALID_INDEX, сцуко).

насколько я понимаю вопрос – окно консоли, … в винде ведь есть консольное приложение, есть gui'шное. кстати, вовсе не факт, что cmd вообще создаёт окна. да! точно, скорее всего он этого не делает, этим занимается кто-то ещё. не думаю что ядро, но… почему бы и нет? если вендовая графика в ядре, то почему бы окну консоли не быть там. короче не знаток я венды, не знаю, гадать не хочу.

но собственно я ведь дал ссылку. там программа которая, как заявлено, создаёт эти консоли пачками в виде табов. почему бы не посмотреть как она это делает?

В том-то и проблема.
оно "не совсем" окно"
Похоже, что вот родительское окно, как-раз и окно
Хэндл у него есть
А внутри нечто без хэнла
Поэтому спай ++ его и зацепить не может.
Ну это так, догадка.






Post #: 27
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 22:29:50.566666   
girlwap

Сообщений: 181
Оценки: 0
Присоединился: 2007-08-28 17:57:48.130000
А зачем тебе это надо. Ведь это всё равно невозможно. правильно тебе люди говорят.
Post #: 28
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 22:33:11.230000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: girlwap

А зачем тебе это надо. Ведь это всё равно невозможно. правильно тебе люди говорят.

Возможно все. Возможно и свою винду написать. Которая "правильно" с CMD работать будет
Вопрос в том как это сделать "меньшей кровью".
Post #: 29
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 22:38:49.913333   
girlwap

Сообщений: 181
Оценки: 0
Присоединился: 2007-08-28 17:57:48.130000
quote:

ORIGINAL: alexbozhko

quote:

ORIGINAL: girlwap

А зачем тебе это надо. Ведь это всё равно невозможно. правильно тебе люди говорят.

Возможно все. Возможно и свою винду написать. Которая "правильно" с CMD работать будет
Вопрос в том как это сделать "меньшей кровью".

 
Конечно возможно написать свою OC но только зачем это надо
Post #: 30
RE: окно cmd.exe в форме Form1... как? - 2007-08-28 23:10:15.270000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
не понял, а чем тебе пайпы то не нравятся? делаешь только вывод на свое окно со своим шрифтом, так еще и с цветами поиграться можно будет. Ну а если так очень надо - делаешь fixedsys с черным фоном и белым текстом.
Post #: 31
RE: окно cmd.exe в форме Form1... как? - 2007-08-29 09:33:16.696666   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
quote:

не понял, а чем тебе пайпы то не нравятся?

ответ на Ваш вопрос в 6 и 11 посте..
Post #: 32
RE: окно cmd.exe в форме Form1... как? - 2007-09-01 18:51:49.340000   
Mkey

Сообщений: 3426
Оценки: 0
Присоединился: 2006-03-08 14:32:13
тему можно закрыть…. вопрос решен…..
http://forum.antichat.ru/threadnav39636-58-10.html
Post #: 33
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> окно cmd.exe в форме Form1... как?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.