|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ввод/вывод командной строки в мемо
Всем привет!
Имеется программа для формирования команд для телнет. Сейчас она работает так: выбираешь сервер телнет, вводишь данные, программа формирует команды типа: telnet server login pass comand comand comand comand ... , все это копируется и вставляется в командную строку и все там выполняется. Хотелось бы сделать чтобы он все это выполнял также в командной строке но отображал в мемо. Так как начинающий програмер, смотрел примеры по работе с командной строкой, но так ничего и не понял или даже еще больше запутался. Смотрел в сторону idTelnet и Winexec. Но пока не осилил. И еще одна просьба, если можно не только пример программы но и объяснения к скрипту. хотелось бы понять для дальнейшей работы с программой. Заранее благодарен! |
#2
|
||||
|
||||
Если я правильно понял, то есть некий эмулятор телнета который генерит сей скрипт. Вы затем засовываете это в реальный телнет?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Не совсем. На данный момент просто команды выводятся в мемо. Я их копирую и вставляю в cmd.exe ну и там все это выполняется(простейши копи-паст). Ну т.е. это просто облегчает тем что не надо команды вспоминать и вводить. А хочется еще доработать программу и сделать чтобы она сама подключалась по телнету и вводила команды по заранее заданным данным.
|
#4
|
||||
|
||||
есть готовое решение:
Цитата:
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Подскажите, как можно этим воспользоваться? Я видимо чего-то не понимаю.
|
#6
|
|||
|
|||
Люди может хотя бы подскажите как открыть цмд.ехе (хотя знаю как его открыть из программы) и вставить туда все команды которые он формирует?
|
#7
|
||||
|
||||
Код:
winexec(Pchar('telnet server login pass comand comand comand comand'),sw_Show); Код:
ShellExecute(0, 'open', 'cmd.exe', 'telnet server login pass comand comand comand comand', nil, SW_SHOW); Специальный ресурс, посвящённый работе с cmd.exe Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
||||
|
||||
используй CreateProcess с hStdInput/hStdOutput. темы по этому вопросу встречаются очень часто, как и ответы на них.
Пишу программы за еду. __________________ |
#9
|
|||
|
|||
Спасибо за помощь!
Я тут нашел исходники "Простейшего телнет клиента" теперь решил объединить свою програмульку с с этим чудом. Простейший телнет клиент принимает все введенное в мемо с клавиатуры, а я пытаюсь туда вставить командой: memo1.lines.add('comand') и никакой реакций т.е. в мемо отображается но от самого телнета ответа нет, как будто ничего и не вводил. Подскажите вот это пожалуйста, думаю я близок к решению данной задачи. ЗЫ: Если интересно могу выложить исходник. Последний раз редактировалось darchken, 05.04.2013 в 06:38. |
#10
|
|||
|
|||
или подскажите как передать командой idtelnet1.sendch()
все то что должно вводится в командной строке. я так понимаю он принимает только нажатие клавиш. sendcmd почему то намертво вешает прогу. |
#11
|
||||
|
||||
Цитата:
Код:
... for i:=1 to length(cmdstr) do IdTelnet1.SendCh(cmdstr[i]); IdTelnet1.SendCh(CR) {#13 или CRLF} ; ... З.Ы. То что уходит лежит в SendCmd, можно там посмотреть, а что приходит от сервера видно в DataAvailable. З.Ы.P.S. по теме Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 08.04.2013 в 01:21. |
#12
|
|||
|
|||
Спасибище, Alegun!
Помогло, пока еще не дописал программу, но проверил вроде работает. Как допишу обязательно дам знать. |
#13
|
|||
|
|||
Подскажите еще кое что пожалуйста, у меня в проге так команды присваиваются так:
com1:=edit4.Text; com2:=edit4.Text; com3:=edit4.Text; com4:=edit4.Text; com5:=edit4.Text; и вот терь запутался в массивах, как правильно сделать? так: Код:
for i:=1 to length(com1) do idtelnet1.sendch(com1[i]); for i:=1 to length(com2) do idtelnet1.sendch(com2[i]); for i:=1 to length(com3) do idtelnet1.sendch(com3[i]); for i:=1 to length(com4) do idtelnet1.sendch(com4[i]); for i:=1 to length(com5) do idtelnet1.sendch(com5[i]); или можно будет сделать так: Код:
for j:=1 to 5 do begin for i:=1 to length(com[j]) do idtelnet1.sendch(com[j,i]); Какой массив надо будет объявить - одномерный или двумерный? Пробывать боюсь так как оборудование рабочее, боюсь что нибудь испортить. |
#14
|
||||
|
||||
Массив делать и проходить двойным циклом. Иначе если понадобится больше команд, чем 5, то код со статичным заданием превратится в портянку на много километров. Или еще хуже - задаваемое число команд, тогда статичным заданием в принципе сделать невозможно.
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 14.04.2013 в 12:27. |
#15
|
||||
|
||||
Здесь массива нет совсем, имелось ввиду наверное это
Код:
var com: array[1..5] of string; //Заполнение массива ... com[1]:= edit4.Text; com[2]:= edit4.Text; com[3]:= edit4.Text; com[4]:= edit4.Text; com[5]:= edit4.Text; ... ... // или for i := 1 to 5 do com[i]:= edit4.Text; ... но зачем лишняя прокладка посредством массива, когда можно так Код:
var com: string; begin com:= edit4.Text + ' ' + edit4.Text + ' ' + edit4.Text + ' ' + edit4.Text + ' ' + edit4.Text; for i := 1 to Length(com) do idtelnet1.sendch(com[i]); end; // или сразу вот это ... var s: string; i,j: integer; begin for i := 1 to 5 do begin // на форме лежат 5 едитов с именем Edit1..Edit5 s:= (FindComponent('Edit'+IntToStr(i)) as TEdit).Text; for j:=1 to Length(s) do idtelnet1.sendch(s[j]); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 14.04.2013 в 12:41. |