Если в ShellExecute
команда не указана явно, используется команда по умолчанию (то же самое происходит при двойном щелчке на файле в Проводнике). Если не оговорено обратное, командой по умолчанию является команда "Open" или, если команды "Open" нет. первая команда в списке. При необходимости можно задать другую команд) по умолчанию. Для этого нужно указать ее название в качестве значения по по умолчанию раздела Shell.
В нашем примере будет две команды: Open (открыть для редактирования) и View (открыть для просмотра). Поэтому информация в реестр заносится так, как показано в листинге 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;
1.3.2.2. Командная строка
<Имя приложения> <Строка параметров>
Строка параметров — это произвольная строка, которая без изменений передавалась программе. От имени программы она отделялась пробелом (пробелы в именах файлов и директорий в DOS не допускались). Разработчик конкретного приложения мог, в принципе, интерпретирован, эту строку как угодно, но общепринятым стал способ, когда строка разбивалась на отдельные параметры, которые разделялись пробелами. Вид и смысл параметров зависел от конкретной программы. В качестве параметров нередко передавались имена файлов, с которыми должна была работать программа.
В Windows мало что изменилось — функции CreateProcess
и ShellExecute
, запускающие приложение, по-прежнему используют понятие командной строки. Разве что теперь максимальная длина строки стала существенно больше, и командную строку можно получить в кодировке Unicode. Но, как и раньше, разделителем параметров считается пробел. Однако теперь пробел может присутствовать и в имени файла, как в имени самой программы, так и в именах файлов, передаваемых в качестве параметров. Чтобы отличать такой пробел от пробела-разделителя, параметры, содержащие пробелы, заключаются в двойные кавычки. Если имя программы содержит пробелы, они тоже заключаются в двойные кавычки. И, конечно же, если в кавычки окажется заключенным параметр, в котором нет пробелов, хуже от этого не будет.
Для работы с параметрами командной строки в Delphi существуют две стандартные функции: ParamCount
и ParamStr
. Функция ParamCount
возвращает количество параметров, переданных в командной строке. ParamStr
— параметр с заданным порядковым номером. Параметры нумеруются начиная с единицы, нулевым параметром считается имя самой программы (при подсчетах с помощью ParamCount
этот "параметр" не учитывается). Эти функции осуществляют разбор командной строки по описанным ранее правилам: разделитель —пробел, за исключением заключенных в кавычки. Кавычки, в которые заключен параметр, функция ParamStr
не возвращает.