4. Описанных действий достаточно, чтобы система знала, как правильно открывать файл из Проводника или с помощью ShellExecute
. Однако правила хорошего тона требуют, чтобы с файлом была ассоциирована также иконка, которую будет отображать рядом с ним Проводник. Для этого в разделе, созданном во втором пункте, следует создать подраздел "DefaultIcon" и в качестве значения по умолчанию задать ему имя файла, содержащего иконку. Если это ico-файл, содержащий только одну иконку, к имени файла ничего добавлять не нужно. Если иконка содержится в файле, в котором может быть несколько иконок (например, в exe или dll), после имени файла следует поставить запятую и номер требуемой иконки (иконки нумеруются, начиная с нуля).
Приведенный список — это самый минимальный набор действий, необходимых для ассоциирования расширения с приложением. Вернемся к третьему пункту. Имя подраздела "Open" задает команду, связанную с данным расширением, т.е. в данном случае — команду "Open". В разделе Shell можно сделать несколько аналогичных подразделов — в этом случае с файлом будет связано несколько команд. У функции ShellExecute
есть параметр lpOperation
, в котором задается имя требуемой команды. Пользователь Проводника может выбрать одну из возможных команд через контекстное меню, которое появляется при нажатии правой кнопки мыши над файлом. Существует возможность установить для этих пунктов меню более дружественные имена. Для этого нужно задать значение по умолчанию соответствующего подраздела. В этой строке допустим символ "&" для указания "горячей" клавиши, аналогично тому, как это делается, например, в компоненте TButton
.
Если в 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;
1.3.2.2. Командная строка
Командная строка досталась Windows по наследству от DOS. Там основным средством общения пользователя с системой был ввод команд с клавиатуры. Команда запуска приложения выглядела так:
<���Имя приложения> <���Строка параметров>
Строка параметров — это произвольная строка, которая без изменений передавалась программе. От имени программы она отделялась пробелом (пробелы в именах файлов и директорий в DOS не допускались). Разработчик конкретного приложения мог, в принципе, интерпретирован, эту строку как угодно, но общепринятым стал способ, когда строка разбивалась на отдельные параметры, которые разделялись пробелами. Вид и смысл параметров зависел от конкретной программы. В качестве параметров нередко передавались имена файлов, с которыми должна была работать программа.
В Windows мало что изменилось — функции CreateProcess
и ShellExecute
, запускающие приложение, по-прежнему используют понятие командной строки. Разве что теперь максимальная длина строки стала существенно больше, и командную строку можно получить в кодировке Unicode. Но, как и раньше, разделителем параметров считается пробел. Однако теперь пробел может присутствовать и в имени файла, как в имени самой программы, так и в именах файлов, передаваемых в качестве параметров. Чтобы отличать такой пробел от пробела-разделителя, параметры, содержащие пробелы, заключаются в двойные кавычки. Если имя программы содержит пробелы, они тоже заключаются в двойные кавычки. И, конечно же, если в кавычки окажется заключенным параметр, в котором нет пробелов, хуже от этого не будет.
Читать дальше
Конец ознакомительного отрывка
Купить книгу