Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Приложение в контекстное меню файла открыть с помо


Автор: Sanek123 11.2.2009, 19:59
Есть приложение, скажем текстовый редактор на делфе. Надо чтобы теже, скажем, например, текстовые файлы,  открвались в приложении не через пункт меню Открыть, а из контекстного меню самого файла.

В общем можно ли поставить пункт "Открыть с помощью... (мое приложение)" в контекстное меню под винду, точнее чтобы таким образом приложение открыло файл, и желательно чтобы приложение не переписывать на чистое WinApi.

Автор: Virtuals 12.2.2009, 06:00
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
if paramcount=1 then createfile(ParamStr(1)...


Автор: Sanek123 12.2.2009, 08:27
Если можно поподробнее.

Автор: Virtuals 12.2.2009, 12:45
когда вы в проводнике вызываете открыть с помощью (напр по файлу вася.тхт открыть с помощью myprog.exe)
то оболочка вызовет ваш myprog.exe а параметром передасть вася.тхт, и комманда будет выглядеть так
Код

myprog.exe с:\этокаталоггдележитфайлвася\вася.тхт

соответственно вам осталось узнать что запустились с параметром и получить его

Код

procedure TForm1.FormCreate(Sender: TObject); \\при создании формы
begin
if paramcount=1 \\если количество переданных параметров равно 1
 then 
   createfile(ParamStr(1)... \\открываем файл с именем переданным как первый параметр.


Автор: Данкинг 12.2.2009, 13:01
Не помню, откуда у меня этот пример, но, если я правильно понял, это то, что нужно:

Код

uses  
  Registry;  
    
procedure AddFileMenue(FilePrefix, Menue, Command: string);  
var  
  reg: TRegistry;  
  typ: string;  
begin  
  reg := TRegistry.Create;  
  with reg do  
  begin  
    RootKey := HKEY_CLASSES_ROOT;  
    OpenKey('.' + FilePrefix, True);  
    typ := ReadString('');  
    if typ = '' then  
    begin  
      typ := Fileprefix + 'file';  
      WriteString('', typ);  
    end;  
    CloseKey;  
    OpenKey(typ + '\shell\' + Menue + '\command', True);  
    WriteString('', command + ' "%1"');  
    CloseKey;  
    Free;  
  end;  
end;  
procedure DeleteFileMenue(Fileprefix, Menue: string);  
var  
  reg: TRegistry;  
  typ: string;  
begin  
  reg := TRegistry.Create;  
  with reg do  
  begin  
    RootKey := HKEY_CLASSES_ROOT;  
    OpenKey('.' + Fileprefix, True);  
    typ := ReadString('');  
    CloseKey;  
    OpenKey(typ + '\shell', True);  
    DeleteKey(Menue);  
    CloseKey;  
    Free;  
  end;  
end;  
{ Example / Beispiel:}  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
  { Register the Menuepoint: }  
  AddFileMenue('rtf', 'Edit with Notepad', 'C:\Windows\system\notepad.exe');  
  {  
   If you now click with the right mousebutton on a *.rtf-file then  
   you can see a Menuepoint: "Edit with Notepad".  
   When Click on that point Notepad opens the file.  
   Wenn man nun mit der rechten Maustaste im Explorer auf eine *.rtf-Datei Clickt,  
   dann erscheint dort der Menuepunkt "Edit with Notepad".  
   Beim Clicken darauf, цffnet Notepad diese Datei.  
 }  
end;  
procedure TForm1.Button2Click(Sender: TObject);  
begin  
  {  
  Unregister the Menuepoint / Undo your changes in the Registry:  
  Lцscht den Menuepunkt wieder aus der Registry:  
 }  
  DeleteFileMenue('rtf', 'Edit with Notepad');  
end; 
 

Автор: Sanek123 12.2.2009, 15:11
Вот эта тема про Parametr мне понравилась, потому что вопрос собственно не столько в том чтоб запихнуть ярлык в контекст, сколько дать понять приложению что и как оно должно открыть. Т.е. указать приложению, скажем, путь к открываемому файлу. Если можно, поясните, так сказать на пальцах как передать и получить эти параметры, или пример.

Автор: Snowy 12.2.2009, 15:43
Читай справку по ParamCount и ParamStr.
Поюзай поиск по форуму.
Поюзай любую книгу по паскалю или дельфи.

Автор: Sanek123 12.2.2009, 21:38
Не будете ли вы так любезны дать небольшой пример кода: Какие параметры, откуда и куда?

Автор: Sanek123 13.2.2009, 07:52
Благодарю за содействие, разобрался сам:
Код


procedure TForm1.FormCreate(Sender: TObject);
Var
 FileName: string;
begin
DragAcceptFiles(Handle, true);
if ParamCount()=1 then begin
    FileName := ParamStr(1);
Memo1.Lines.LoadFromFile(FileName);
end;
end;


А по поводу инициализации управляющего приложения - через реестр (hkey_root).

Автор: Poseidon 16.2.2009, 17:07
Цитата(Snowy @  12.2.2009,  15:43 Найти цитируемый пост)
Читай справку по ParamCount и ParamStr.Поюзай поиск по форуму.Поюзай любую книгу по паскалю или дельфи.
+ учебник по русскому языку, а то в первом посте вообще ни черта не понятно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)