Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Открыть файл.   Найти похожие ветки 

 
Thrasher ©   (2008-02-18 11:57) [0]

В общем проблема в чем - пишу каталогизатор документов. Нужно сделать так, что-бы файлы, которые в каталоге, открывались программой, которая с ними асоциированная. Например .doc чтобы открывались программой ассоциированной именно с этим расширением (не только винворд, может кто-то использует опенофис). Знаю есть такая функция в WinAPI?, но как она называется не помню, что-то вроде FileOpen.

Подскажите в каком направлении следует копать. Спасибо.


 
Рамиль ©   (2008-02-18 12:00) [1]

ShellExecute


 
Mozg@n   (2008-02-18 19:44) [2]

Эта функция находится в модуле ShellApi

ShellExecute
ShellExecuteA
ShellExecuteW

Просто наглядный пример:

 shellapi.ShellExecute(0,"open",pchar(extractfilepath(paramstr(0)+"\help\help.html"),nil,nil,sw_maximize);


 
ПостОвый терминатор ©   (2008-02-18 19:57) [3]

Так в жизни именно это и делает Windows.
И не мучай себя сомнениями.
Ну, а если захочешь открывать файлы не ассоциированными с ними программами, тогда спрашивай.


 
ПостОвый терминатор ©   (2008-02-18 20:06) [4]


> Thrasher ©   (18.02.08 11:57)

>
А это код поможет тебе узнать кто с кем ассоциирован на конкретном компе:
{
This Code will return the programs associated with each extension.
You can obviously modify it to search for a specific extension.
}
uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
keys: TStringList;
i: Integer;
typename, displayname, server: string;
begin
memo1.Clear;
reg := TRegistry.Create;
try
  reg.rootkey := HKEY_CLASSES_ROOT;
  if reg.OpenKey("", False) then
  begin
    keys := TStringList.Create;
    try
      reg.GetKeyNames(keys);
      reg.CloseKey;
      {memo1.lines.addstrings(keys);}
      for i := 0 to keys.Count - 1 do
      begin
        if keys[i][1] = "." then
        begin
          {this is an extension, get its typename}
          if reg.OpenKey(keys[i], False) then
          begin
            typename := reg.ReadString("");
            reg.CloseKey;
            if typename <> "" then
            begin
              if reg.OpenKey(typename, False) then
              begin
                displayname := reg.ReadString("");
                reg.CloseKey;
              end;
              if reg.OpenKey(typename + "\shell\open\command", False) then
              begin
                server := reg.ReadString("");
                memo1.Lines.Add(Format("Extension: "%s", Typename: "%s", Displayname:"%s"" +
                                       #13#10"  Server: %s",
                                       [keys[i], typename, displayname, server]));
                reg.CloseKey;
              end;
            end;
          end;
        end;
      end;
    finally
      keys.Free;
    end;
  end;
finally
  reg.Free
end;
end;


 
Riply ©   (2008-02-18 20:40) [5]

> [4] ПостОвый терминатор ©   (18.02.08 20:06)

> if keys[i][1] = "." then

Надо проверять не пустая ли строка.
Возможен вариант (при таком способе получения имен ключей),
когда имя будет иметь нулевую длину.



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
8-1177253281
Elliner
2007-04-22 18:48
2008.03.16
Передача потокового видео с канвы формы


2-1203077395
Quart
2008-02-15 15:09
2008.03.16
Exception EPrinter


15-1202385141
Сергей М.
2008-02-07 14:52
2008.03.16
SpamiHillator


15-1202297531
Бакук
2008-02-06 14:32
2008.03.16
Помогите с переводом JavaScript в Delphi


2-1203062248
Василий К.
2008-02-15 10:57
2008.03.16
Отключение тем Windows XP для определенной формы в приложении