Читаем О чём не пишут в книгах по Delphi полностью

Если в ShellExecute команда не указана явно, используется команда по умолчанию (то же самое происходит при двойном щелчке на файле в Проводнике). Если не оговорено обратное, командой по умолчанию является команда "Open" или, если команды "Open" нет. первая команда в списке. При необходимости можно задать другую команд) по умолчанию. Для этого нужно указать ее название в качестве значения по по умолчанию раздела Shell.

В нашем примере будет две команды: Open (открыть для редактирования) и View (открыть для просмотра). Поэтому информация в реестр заносится так, как показано в листинге 1.46.

Листинг 1.46. Занесение в реестр информации, необходимой для ассоциирования файла с приложением

const

 FileExt = '.dks';

 FileDescr = 'DKS_View_File'.

 FileTitle = 'Delphi Kingdom Sample file';

 OpenCommand = '&Открыть';

 ViewCommand = '&Просмотреть';

// Занесение в реестр информации об ассоциации

// Расширения dks с программой

procedure TDKSViewMainForm.SetAssociation(Reg: TRegistry);

begin

 Reg.OpenKey('\' + FileExt, True);

 Reg.WriteString('' , FileDescr);

 Reg.OpenKey('\' + FileDescr, True);

 Reg.WriteString(FileTitle);

 Reg.OpenKey('Shell', True);

 Reg.OpenKey('Open', True);

 Reg.WriteString('', OpenCommand);

 Reg.OpenKey('command', True);

 Reg.WriteString('', '"' + ParamStr(0) + '" "%1"');

 Reg.OpenKey('\' + FileDescr, True);

 Reg.OpenKey('Shell', True);

 Reg.OpenKey('View', True);

 Reg.WriteString('', ViewCommand);

 Reg.OpenKey('command', True);

 Reg.WriteString('' + ParamStr(0) + '" "%1" /v');

 Reg.OpenKey('\' + FileDescr, True);

 Reg.OpenKey('DefaultIcon', True);

 Reg.WriteString('', ParamStr(0) + ',0');

end;

<p>1.3.2.2. Командная строка</p>

Командная строка досталась Windows по наследству от DOS. Там основным средством общения пользователя с системой был ввод команд с клавиатуры. Команда запуска приложения выглядела так:

<Имя приложения> <Строка параметров>

Строка параметров — это произвольная строка, которая без изменений передавалась программе. От имени программы она отделялась пробелом (пробелы в именах файлов и директорий в DOS не допускались). Разработчик конкретного приложения мог, в принципе, интерпретирован, эту строку как угодно, но общепринятым стал способ, когда строка разбивалась на отдельные параметры, которые разделялись пробелами. Вид и смысл параметров зависел от конкретной программы. В качестве параметров нередко передавались имена файлов, с которыми должна была работать программа.

В Windows мало что изменилось — функции CreateProcess и ShellExecute, запускающие приложение, по-прежнему используют понятие командной строки. Разве что теперь максимальная длина строки стала существенно больше, и командную строку можно получить в кодировке Unicode. Но, как и раньше, разделителем параметров считается пробел. Однако теперь пробел может присутствовать и в имени файла, как в имени самой программы, так и в именах файлов, передаваемых в качестве параметров. Чтобы отличать такой пробел от пробела-разделителя, параметры, содержащие пробелы, заключаются в двойные кавычки. Если имя программы содержит пробелы, они тоже заключаются в двойные кавычки. И, конечно же, если в кавычки окажется заключенным параметр, в котором нет пробелов, хуже от этого не будет.

Для работы с параметрами командной строки в Delphi существуют две стандартные функции: ParamCount и ParamStr. Функция ParamCount возвращает количество параметров, переданных в командной строке. ParamStr — параметр с заданным порядковым номером. Параметры нумеруются начиная с единицы, нулевым параметром считается имя самой программы (при подсчетах с помощью ParamCount этот "параметр" не учитывается). Эти функции осуществляют разбор командной строки по описанным ранее правилам: разделитель —пробел, за исключением заключенных в кавычки. Кавычки, в которые заключен параметр, функция ParamStr не возвращает.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже