Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/144: Рейтинг темы: голосов - 144, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
1

Передача параметров из командной строки

27.04.2012, 15:39. Показов 30080. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня. Сразу скажу, что в Делфи новичок. Помогите с таким вопросом.Нужно запускать ехе-шник через командную строку, передавая туда один параметр (имя компьютера). Раньше у менябыло реализовано считывание имени автоматом, но теперь понадобилась его передача. посоветуйте как реализовать.
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2012, 15:39
Ответы с готовыми решениями:

Передача параметров через список параметров формы
Hi all! У кого есть опыт передачи параметров через заголовочный список параметров формы? ...

Передача параметров из командной строки в процедуру Delphi
Интересует, собственно, вопрос, как сделать такую штуку. При старте программы вызывается командная...

Передача параметров командной строке с выбором места сохранения
Добрый вечер/день/ночь, жителям форума. Сталкнулся с такой проблемой. Есть форма...

Передача параметров
День добрый! Подскажите как из формы авторизации передать в главную форму выбранного пользователя?...

14
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
27.04.2012, 15:51 2
Пример, как запустить из программы на Delphi другую программу и передать ей параметры командной строки. Здесь в качестве такой запускаемой программы применён notepad.exe - блокнот Windows. А в качестве параметра передаётся путь к файлу, который надо открыть в блокноте.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses
  ShellAPI;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  Fn = 'Files\file.txt';
var
  FileName, Params : String;
begin
  //Полный путь к файлу, который надо передать блокноту для открытия.
  FileName := ExtractFilePath( ParamStr(0) ) + Fn;
  //Параметры командной строки.
  Params := '"' + FileName + '"';
  //Запуск блокнота.
  ShellExecute(Handle, nil, 'notepad.exe', PChar(Params), nil, SW_SHOW);
end;
1
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
28.04.2012, 21:28  [ТС] 3
Спасибо. а как сделать так, чтобы параметр Fn = 'Files\file.txt'; передавался через командную строку?
чтобы запускать так: D:\Semafor\bin\client.exe 'Files\file.txt'
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
29.04.2012, 03:25 4
Цитата Сообщение от Wersia Посмотреть сообщение
Нужно запускать ехе-шник через командную строку, передавая туда один параметр (имя компьютера).
Цитата Сообщение от Wersia Посмотреть сообщение
а как сделать так, чтобы параметр Fn = 'Files\file.txt'; передавался через командную строку?
чтобы запускать так: D:\Semafor\bin\client.exe 'Files\file.txt'
Здесь надо уточнить, как построено приложение и какая требуется последовательность действий. Т. е., сама программа, которую мы разрабатываем, должна получить имя компьютера в качестве параметра командной строки. А потом из этой программы надо запустить приложение D:\Semafor\bin\client.exe и передать ему этот параметр тоже в виде параметра командной строки? Это делается так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
uses
  ShellAPI;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Params : String;
begin
  //Если параметров в командной строке нет - выходим.
  if ParamCount = 0 then Exit;
  //Запуск приложения и передача ему одного параметра командной строки.
  ShellExecute(Handle, nil, 'D:\Semafor\bin\client.exe', PChar( ParamStr(1) ), nil, SW_SHOW);
end;
Возможно, имелось в виду что-то другое. - Это надо уточнить.
1
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
29.04.2012, 13:55  [ТС] 5
постараюсь объясниться. Client.exe при запуске считывает имя компьютера, которое имеет структуру WOOOO-NNN-IIIII, где О-номер осб, N-номер ВСП, а I- инвентарный номер. после запуска программы у пользователя на экране появляется окно с NNN. Но заказчику потребовалось сделать так, чтобы эти NNN брались не из имени компьютера, а он сам их задавал при запуске через командную строку.
Например: D:\Semafor\bin\client.exe 'NNN'
Запуск приложения я бы залил в батник, но уперся в то, как реализовать передачу этого параметра NNN.
Надеюсь, что сейчас понятнее объяснил))
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
29.04.2012, 14:06 6
Т. е., client.exe - это та программа которую мы пишем на Delphi? И в этой программе надо прочитать параметры, которые ей переданы в командной строке? Тогда, собственно, надо, значит, только прочитать параметры командной строки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uses
  ShellAPI;
 
var
  S : String;
begin
  //Перебор параметров командной строки.
  for i := 1 to ParamCount then do begin
    S := ParamStr(i);
    //...
    //...
    //...
  end;
end;
2
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
29.04.2012, 14:57  [ТС] 7
а эти параметры в командной строке будут разделяться пробелом между кавычками?
и Да, пишем на Делфи
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
29.04.2012, 18:30 8
При передаче параметров через командную строку правила такие. Каждый параметр должен отделяться друг от друга или пробелом (#32) или знаком табуляции (#9). Параметр может быть заключён в двойные кавычки "<параметр>". В этом случае, внутри кавычек может быть записана произвольная строка с пробелами. Например:
Код
  notepad.exe "D:\Мои проекты\Проект 0001\Files\01.txt"
Здесь передан один параметр в виде пути, который содержит пробелы. Поэтому этот параметр заключён в двойные кавычки.
1
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
30.04.2012, 11:28  [ТС] 9
спасибо большое, буду пробовать
0
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
02.05.2012, 12:14  [ТС] 10
попытался запускать одно приложение из другого.
вот текст
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit Zap;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShellAPI;
 
type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    btn3: TButton;
    procedure btn1Click(Sender: TObject);
//   procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
var
VSP,RootDir,ModeFileName: string;
 
const
  BinFolder: string = 'bin\';
procedure TForm1.btn1Click(Sender: TObject);
 
var
  Res, Check: integer;
  S,FileName, Params : String;
  DirStructureError: boolean;
begin
   val(Edt1.Text, Res, Check);
    DirStructureError:=False;
  RootDir:=Application.ExeName;
  RootDir:=ExtractFilePath(RootDir);
  {s:=copy(RootDir, Length(RootDir)-3, 3);
  if s<>'bin' then DirStructureError:=False;
  RootDir:=copy(RootDir, 0, Length(RootDir)-4); }
  ModeFileName:=RootDir+'LightsClient.exe';
  if Check<>0 then MessageDlg('Îøèáêà: ââåäèòå ÷èñëåííîå çíà÷åíèå!', mtError, [mbOk], 0)
  else
    begin
      VSP:=Edt1.Text;
      Form1.Close;
      Form1.ModalResult:=mrOk;
     // Params := '"' + VSP + '"';
     Params := VSP;
 
 
      // RootDir:=copy(RootDir, 0, Length(RootDir)-4); 'D\Semafor\bin\LightsClient.exe'
 
     //Çàïóñê
      ShellExecute(Handle, nil, 'D:\Semafor\bin\LightsClient.exe' , PChar(Params), nil, SW_SHOW);
    end;
 
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
 form1.Close;
end;
 
end.
если я в строке 62
Delphi
1
 ShellExecute(Handle, nil, 'D:\Semafor\bin\LightsClient.exe' , PChar(Params), nil, SW_SHOW);
вместо D:\Semafor\bin\LightsClient.exe поставлю ModeFileName из строки 48, то нужное для запуска приложение LightsClient не запускается. а если оставляю жестко прописанный путь то все работает на УРА. Просто суть в том, что сами ехе-шники могут храниться где угодно, просто они должны быть в одной директории, так что прописывать путь не имеет никакого смысла((
В чем тут может быть дело?

Разобрался)) Поставил
Delphi
1
ShellExecute(Handle, nil, PChar(ModeFileName) , PChar(Params), nil, SW_SHOW);
и все ОК))
Спасибо!))

Добавлено через 14 часов 4 минуты
Mawrat, спасибо большое за помощь! Спасибо, что откликнулся!
1
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
04.05.2012, 21:59  [ТС] 11
всем привет. снова я, но с другой проблемой.
делаю так
Delphi
1
 MessageDlg('Автоматически определен номер ВСП: '+VSPNo+'.'+chr(13)+'Соответствует ли он действительному номеру вашего ВСП?', mtConfirmation, [mbYes, mbNo], 0) = mrNo
если готовое приложение запускать от администратора на рабочей станции, то такое диалоговое окно выводится с нормальным русским шрифтом. но если запускать от пользователя, то идет сплошная абракадабра. Понятно, что дело в кодировке, просто у пользователя политиками безопасности отключена возможность менять язык системы через панель управления.
У меня получается только 2 варианта исполнения данного диалога:
1. Сделать его через отдельную форму с кнопками ДА-НЕТ и выводом информации через Label.
2. Каким-то образом сделать вывод этого диалога универсальным для любой кодировки... (но как это сделать- ума не приложу)

Может кто-то что-нибудь посоветует? Может кто сталкивался?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
04.05.2012, 22:07 12
Wersia, лучше использовать MessageBox:
Delphi
1
2
3
4
5
6
7
8
9
10
  if IDNO = MessageBox(
    0
    ,PChar('Автоматически определен номер ВСП: ' + VSPNo  + '.'
      + #10'Соответствует ли он действительному номеру вашего ВСП?')
    ,'Вопрос'
    ,MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL
    )
  then begin
    //...
  end;
0
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
04.05.2012, 22:16  [ТС] 13
извини за наглость и за мое абсолютное незнание, но как мне это применить в этом коде
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.CheckVSPNo;
begin
  if MessageDlg('Автоматически определен номер ВСП: '+VSPNo+'.'+chr(13)+'Соответствует ли он действительному номеру вашего ВСП?', mtConfirmation, [mbYes, mbNo], 0) = mrNo
    then Form4.ShowModal;
  if Form4.ModalResult=mrOk then
    begin
      ModeFileName:=RootDir+TxtFolder+VSPNo+'mode.txt';
      InfoFileName:=RootDir+TxtFolder+VSPNo+'info.txt';
      LogFileName:=RootDir+LogFolder+VSPNo+'.log';
      CheckFiles;
      Form1.Caption:='Светофор: управление (ВСП '+VSPNo+')';
    end;
  DoCheckVSP:=false;
end;
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
04.05.2012, 22:24 14
Цитата Сообщение от Wersia Посмотреть сообщение
как мне это применить в этом коде
Можно так применить:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.CheckVSPNo;
begin
  if IDNO = MessageBox(
    0
    ,PChar('Автоматически определен номер ВСП: ' + VSPNo  + '.'
      + #10'Соответствует ли он действительному номеру вашего ВСП?')
    ,'Вопрос'
    ,MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL
    )
  then Form4.ShowModal;
 
  if Form4.ModalResult=mrOk then
    begin
      ModeFileName:=RootDir+TxtFolder+VSPNo+'mode.txt';
      InfoFileName:=RootDir+TxtFolder+VSPNo+'info.txt';
      LogFileName:=RootDir+LogFolder+VSPNo+'.log';
      CheckFiles;
      Form1.Caption:='Светофор: управление (ВСП '+VSPNo+')';
    end;
  DoCheckVSP:=false;
end;
2
1 / 1 / 0
Регистрация: 27.04.2012
Сообщений: 10
04.05.2012, 22:36  [ТС] 15
Спасибо, буду пробовать!
0
04.05.2012, 22:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2012, 22:36
Помогаю со студенческими работами здесь

Передача параметров командной строки
Как я могу передать sed параметры командной скроки? Если например скрипт будет вызываться как-то...

Передача параметров из командной строки
На место text.txt надо передать название файла через командную строку. Что писать в int(main)...

Передача параметров командной строки в main(): что происходит в коде?
Здравствуйте. Объясните пожалуйста, что идет в main ? ... printf(&quot;IMAGE NAME: %s\n&quot;,...

Передача параметров, для выполнения, запущенной командной строке
Здравствуйте. Никак немогу решить проблему. У меня есть служба, которая запускает программу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru