| Цитата(Нитонисе @ 30.10.2010, 11:47) | | Надо зарегистрировать свой тип файлов. Суть его - заполнение некоторых исходных данных для моей программы. Наборы исходных данных могут быть разные - потому хотелось бы иметь возможность сохрнаять их в файл, и загружать снова. При этом хотелось бы зарегистрировать для своего расширения особый значок для файлов. |
Зарегистрированные расширения хранятся в реестре как ключи корневого ключа HKEY_CLASSES_ROOT. Например, если вы хотите зарегистрировать расширение .my, то должны создать в ключе HKEY_CLASSES_ROOT ключ с именем ".my". Единственным параметром этого ключа должно быть имя ключа, содержащего развернутую информацию. Например, "myfile". Указанный ключ также хранится в разделе корневого ключа HKEY_CLASSES_ROOT. В этом ключе создается цепочка ключей shell\open\command. В последнем ключе command задается параметр, значение которого - полное имя файл приложения, обрабатывающего файлы с вашим расширением. Если при запуске этого приложения в него надо через командную строку передать имя файла, то после имени приложения указываются символы "%1". Так что если, например, вы хотите обрабатывать файлы приложением MyProgram, расположенным в каталоге C:\MyProjrcts, то в реестре соответствующий параметр должен иметь вид "C:\MyProjrcts\MyProgram.exe %1".
При регистрации расширения можно одновременно зарегистрировать и пиктограмму, которая будет отображаться в папках около файлов с этим расширением. Для этого в ключе, содержащем информацию о приложении (в рассматриваемом примере - в ключе myfile) надо создать подключ DefaultIcon и в нем задать параметр со значением, указывающим пиктограмму: имя файла и, после запятой, - индекс пиктограммы. Например, если вы хотите указать главную пиктограмму вашего приложения, обрабатывающего файлы, то значение этого параметра может быть следующим: " C:\MyProjrcts\MyProgram.exe, 0".
В результате регистрации автоматически создастся также параметр с именем вашего приложения в ключе HKEY_CURRENT_USER \ SoftwareMicrosoft \ Windows \ ShellNoRoam \ MUICache. Это обеспечит в дальнейшем пользователю возможность назначать средствами Windows ваше приложение для обработки файлов с иным расширением. Ниже приведен пример приложения, регистрирующего расширение файлов .my и обрабатывающего эти файлы. Приложение имеет кнопку Регистрация расширения .my (ее имя BReg) и кнопку Отмена регистрации расширения (имя BUnReg). В качестве обрабатывающего приложения регистрируется это же приложение, загружающее открываемый файл в окно Memo1. В реальном случае, конечно, регистрировать и обрабатывать файлы должны разные приложения: регистрация должна проводиться программой, устанавливающей ваше приложение на компьютере.
Ниже приводится код .
| Код |
#include "registry.hpp"
void __fastcall TForm1::Button1Click(TObject *Sender) { TRegistry *reg = new TRegistry; reg->RootKey = HKEY_CLASSES_ROOT; // создается ключ ".my" reg->OpenKey(".my",true); // создается параметр со значением "myfile" reg->WriteString("", "myfile"); reg->CloseKey(); // создается ключ "myfile\DefaultIcon" reg->OpenKey("myfile\\DefaultIcon",true); // заносится значение пиктограммы: "имя приложения, 0" reg->WriteString("", ParamStr(0) + ", 0");
reg->CloseKey(); // создается ключ "myfile\shell\open\command" reg->OpenKey("myfile\\shell\\open\\command", true); // создается параметр со значением "имя файла %1" reg->WriteString("", ParamStr(0) + " %1"); reg->CloseKey(); reg->Free(); } //------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { TRegistry *reg = new TRegistry; reg->RootKey = HKEY_CLASSES_ROOT; // удаление ключей ".my" и "myfile"
reg->DeleteKey(".my"); reg->DeleteKey("myfile"); reg->Free(); } //------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { if (ParamCount() > 0) { Memo1->Lines->LoadFromFile(ParamStr(1)); Label1->Caption = "файл '" + ParamStr(1) + "'"; } }
|
Особых комментариев этот код, вероятно, не требует. В реальном приложении вам надо заменить в этом коде "my" на то расширение, которое вам необходимо. Кроме того, в приведенном коде в качестве обработчика задается текущее приложение. Его имя с путем получается вызовом функции ParamStr(0). В реальном приложении это имя файла также надо заменить. Отмена регистрации, осуществляемая в процедуре BUnRegClick, сводится к стиранию ранее созданных ключей.
Обработчик события формы OnCreate определяет функцией ParamCount, передан ли параметр через командную строку. Если передан, то файл, имя которого передано, загружается в окно Memo1. Подобный обработчик (конечно, не сводящийся к загрузке в Memo) должен быть вставлен в приложение, обрабатывающее файлы. |