Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как передать программе имя открываемого файла? [D7, WinXP]


NervoVred ©   (2007-06-16 22:14:00) 

Не уверен с точностью формулировки вопроса, но задача поставлена такая: научить программу открывать файлы, по которым сделан клик мышкой в окне Эксплорера. Т.е. не загружать программу каким-нибудь OpenDialog'ом, а щелкнуть по файлу. Программа после этого должна загрузиться и открыть требуемый файл.


Rial   (2007-06-16 23:11:00) [1]

При запуске в 1м параметре будет передаваться имя файла.
Как зарегистрировать файл, можно посмотреть в приведенном
ниже модуле. Там все ясно как божий день, разберись.

Unit
    Registration;

Interface
Uses
    Windows;

{
 Регистариция приложение с указанием имени исполняемого файла,
именен папки приложения, расширением, названием программы, командой открытия (напр. '%1')
 Обратите внимание, что команду открытия необходимо брать в двойные кавычки!

Версия 1.1. [9.02.2005]
}

Const
     //место для ключика по умолчанию
     HKey_Default = HKey_Local_Machine;

//Регистрация расширения
procedure rsrCreateFileReg(Const sIconFileName, sSectionName, sFileExt, sFileLabel, sOpenCommand : String;
                          Const nIconNumber : Integer; Const bNoOpen : Boolean);
//Регистрация приложения
procedure rsrCreateSoftReg(Const sExeName, sSoftName : String; Const hkRootKey : HKEY = HKey_Default);
//Удаление регистрации расширения
procedure rsrDeleteFileReg(Const sSectionName, sFileExt : String; Const hkRootKey : HKEY = HKey_Default);
//Удаление регистрации расширения
procedure rsrDeleteSoftReg(Const sSoftName : String; Const hkRootKey : HKEY = HKey_Default);
//Получение установочной директории
function rsrGetInstallPath(Const sSoftName : String; Const hkRootKey : HKEY = HKey_Default) : String;

Implementation
Uses
    SysUtils, Registry;

Const SoftPath   = '\Software\';
     InstallStr = 'InstallPath';

function rsrGetInstallPath(Const sSoftName : String; Const hkRootKey : HKEY = HKey_Default) : String;
begin
Result :=GetCurrentDir;
With TRegistry.Create do
 Try
  RootKey  :=hkRootKey;
  If (OpenKey(SoftPath + sSoftName, False))then begin
   Result :=ReadString(InstallStr);
   CloseKey;
  end;
 Finally
  Free;
 end;
end;

procedure rsrCreateSoftReg(Const sExeName, sSoftName : String; Const hkRootKey : HKEY = HKey_Default);
begin
With TRegistry.Create do
 Try
  RootKey  :=hkRootKey;
  CreateKey(SoftPath + sSoftName);
  If OpenKey(SoftPath + sSoftName, False) then begin
   WriteString(InstallStr, ExtractFileDir(sExeName));
   CloseKey;
  end;
 Finally
  Free;
 end;
end;

procedure rsrCreateFileReg(Const sIconFileName, sSectionName, sFileExt, sFileLabel, sOpenCommand : String;
                          Const nIconNumber : Integer; Const bNoOpen : Boolean);
Var
   Reg : TRegistry;

procedure Step(Const Path, Name, Value : String);
begin
 With Reg do
  If (OpenKey(Path, True))then begin
   WriteString(Name, Value);
   CloseKey;
  end;
end;

begin
Reg :=TRegistry.Create;
Try
 Reg.RootKey  :=HKey_Classes_Root;
 Step('\' + sFileExt, '', sSectionName);
 Step(sSectionName, '', sFileLabel);
 If (bNoOpen)then
  Step('\' + sSectionName, 'NoOpen', '');
 Step('\' + sSectionName + '\DefaultIcon', '', sIconFileName + ',' + IntToStr(nIconNumber));
 If (sOpenCommand <> '')then
  Step('\' + sSectionName + '\Shell\Open\Command', '', '"' + sIconFileName + '" ' + sOpenCommand);
Finally
 Reg.Free;
end;
end;

procedure rsrDeleteFileReg(Const sSectionName, sFileExt : String; Const hkRootKey : HKEY = HKey_Default);
begin
With TRegistry.Create do
 Try
  RootKey :=hkRootKey;
  DeleteKey('\' + sFileExt);
  DeleteKey(sSectionName);
 Finally
  Free;
 end;
end;

procedure rsrDeleteSoftReg(Const sSoftName : String; Const hkRootKey : HKEY = HKey_Default);
begin
With TRegistry.Create do
 Try
  RootKey :=hkRootKey;
  DeleteKey(SoftPath + sSoftName);
 Finally
  Free;
 end;
end;

end.


MsGuns   (2007-06-16 22:49:00) [2]

procedure TfrmMain.FormShow(Sender: TObject);
begin
 if ParamCount>0 then CDSFileName := ParamStr(1);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо