Передача параметра в командную строку

Меня всегда беспокоили несколько нетривиальные задачи. И очень часто я не находил на них ответ. Учась в вузе на программиста, ни один преподаватель не мог дать мне внятный ответ на мои вопросы. Они говорили – «В методичке и книгах все есть». В конце-концов, я сделал вывод, что программирование лучше изучать самостоятельно и перевелся на другую специальность. Одним из таких вопросов было использование командной строки в своих программах. Windows несмотря на нарекания, довольно-таки продуманная система, использующая много гениальных утилит. Конечно, ряд задач можно выполнить, используя функции Api. Но гораздо проще использовать готовую утилиту в составе операционки или распространяемую бесплатно. Помните WinRar? Зайдите в его корневую папку и посмотрите на консольные программы. Возможно, что после этой статьи вы напишете свой простой разархиватор. Итак, что мы сейчас сделаем. Моя задача – отпинговать сервер. Конечно, можно решить эту задачу нормальным способом, но я не ищу нормальных путей. Для этого я буду использовать утилиту ping.exe (прочтите о ней в справке, не хочу дублировать информацию). Ping вызывается обычно в командной строке с нужными параметрами. Но нам этот способ не подходит. Вернее, подходит, но мы подойдем несколько иначе. Программировать мы будем на умирающем Делфи (эх, жаль язык). Легко можно сделать тоже самое на С++, а на платформе дотнет – подобная задачка будет и вовсе тривиальной. Делфийский код просто более нагляден и вы поймете всю логику. Итак, запускаем Делфи и кидаем на форму Label, Edit, Button. У меня это выглядит таким образом: [caption id="" align="aligncenter" width="555" caption="Ping на делфи"][/caption] В поле Edit я написал статический текст-подсказку. Лично мне попадались пользователи, которых нужно буквально ткнуть носом в нужное место. Чтобы эта надпись не мешала в программе, в событии OnEnter компонента Edit напишем следующий код: procedure TForm1.Edit1Enter(Sender: TObject); begin If Edit1.Focused then Edit1.Text:=»; end; При наведении фокуса на компонент надпись сотрется. С этим мы разобрались. Теперь идем дальше. Мы будем использовать функцию ShellExecute. Импортируем модуль с ней. uses ShellApi; А теперь наша процедура. Вот ее код: procedure TForm1.Button1Click(Sender: TObject); Var url:string; par:string; // параметр функции begin url:=Edit1.Text; // получим url par:=’/K ping + url’; // формируемпараметр ShellExecute(Handle, nil, ‘cmd.exe’, PChar(par), nil, SW_SHOW); end; Как видите, ничего сложного здесь нет. Хотя изящным способом этот не назовешь. В других уроках я покажу, как можно решить эту задачу другим способом. Ну а сейчас вы стали командиром бата. Надеюсь, что вы все поняли. Скачать архив с программой можете здесь

Вячеслав «VeGA» Головлев

Комментарии

1 комментарий на “Передача параметра в командную строку”
  1. Валерий:

    par:=’/K ping + url’;
    Гибрид паскаля и перл, но раз речь о delphi, то закрывающий апостроф не там:
    par:=’/K ping ‘ + url;

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: