Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

Добавить пункт в меню Windows   Найти похожие ветки 

 
ERASER   (2004-08-04 09:24) [0]

Подскажите пожалуйста как добавить свой пункт в меню Windows которое выходит по правому клику на файле?


 
Кириешки ©   (2004-08-04 09:43) [1]

Вот эти процедуры делают следующее :
1) Добавляют в системное меню в пункт "создать" ваш тип файла
2) Регистрируют ваш тип файлов, и др. Разберетесь сами. Тут не такие и сложные функции

interface

uses windows,registry,dialogs;

type
    TFileNewType = (ftNullFile, ftFileName, ftCommand); //This is the type of
                                                       //entry to add to the
                                                       //new-menu

procedure registerfiletype(ft,key,desc,icon,prg:string);
procedure deregisterFileType(ft: String);
procedure FileTAddAction(key, name, display, action: String);
procedure FileTDelAction(key, name: String);
procedure FileTAddNew(ft, param: String; newType: TFileNewType);
procedure FileTDelNew(ft: String);

implementation

procedure FileTDelNew(ft: String);
var myReg:TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if not myReg.KeyExists(ft) then
begin
MyReg.Free;
Exit;
end;
MyReg.OpenKey(ft, true);
if MyReg.KeyExists("ShellNew") then
MyReg.DeleteKey("ShellNew");
MyReg.CloseKey;
MyReg.Free;
end;

procedure FileTAddNew(ft, param: String; newType: TFileNewType);
var myReg:TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if not myReg.KeyExists(ft) then
begin
MyReg.Free;
Exit;
end;
myReg.OpenKey(ft+"\ShellNew", true);
case NewType of
ftNullFile : MyReg.WriteString("NullFile", "");
ftFileName : MyReg.WriteString("FileName", param);
ftCommand  : MyReg.WriteString("Command", param);
end;
MyReg.CloseKey;
MyReg.Free;
end;

procedure FileTDelAction(key, name: String);
var myReg: TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;

if key[1] = "." then
key := copy(key,2,maxint)+"_auto_file";

if key[Length(key)-1] <> "\" then //Add a \ if necessary
key:=key+"\";
myReg.OpenKey("\"+key+"shell\", true);
if myReg.KeyExists(name) then
myReg.DeleteKey(name);
myReg.CloseKey;
myReg.Free;
end;

procedure FileTAddAction(key, name, display, action: String);
var
myReg:TRegistry;
begin
myReg:=Tregistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if name="" then name:=display;

if key[1] = "." then
key:= copy(key,2,maxint)+"_auto_file";

if key[Length(key)-1] <> "\" then //Add a \ if necessary
key:=key+"\";
if name[Length(name)-1] <> "\" then //dito. For only two calls, I won"t write a function...
name:=name+"\";

myReg.OpenKey(key+"Shell\"+name, true);
myReg.WriteString("", display);
MyReg.CloseKey;
MyReg.OpenKey(key+"Shell\"+name+"Command\", true);
MyReg.WriteString("", action);
myReg.Free;
end;

procedure deregisterFileType(ft: String);
var
myreg:TRegistry;
key: String;
begin
myreg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
{
1.01: Added the following if-statement: I thought
      TRegistry.OpenKey would raise an exception when
      the key does not exist. Actually it opens NO key
      and returns False. The myReg.DeleteKey then
      deleted the WHOLE HKEY_CLASSES_ROOT-Key. Ups.
}
if myReg.OpenKey(ft, False) = false then
Exit;
key:=MyReg.ReadString("");
MyReg.CloseKey;
myReg.DeleteKey(ft);
myReg.DeleteKey(key);
myReg.Free;
end;

procedure registerfiletype(ft,key,desc,icon,prg:string);
var myreg : treginifile;
   ct : integer;
begin

    // make a correct file-extension
    ct := pos(".",ft);
    while ct > 0 do begin
          delete(ft,ct,1);
          ct := pos(".",ft);
    end;
    if (ft = "") or (prg = "") then exit; //not a valid file-ext or ass. app
    ft := "."+ft;
    myreg := treginifile.create("");
    try
       myreg.rootkey := hkey_classes_root; // where all file-types are described
       if key = "" then key := copy(ft,2,maxint)+"_auto_file"; // if no key-name is given,
                                                            // create one
       myreg.writestring(ft,"",key); // set a pointer to the description-key
       myreg.writestring(key,"",desc); // write the description
       if icon <> "" then
          myreg.writestring(key+"\DefaultIcon","",icon); // write the def-icon if given
       myreg.writestring(key+"\shell\open\command","",prg+" "%1""); //association
    finally
           myreg.free;
    end;
//     showmessage("File-Type "+ft+" associated with"#13#10+
//     prg+#13#10);

end;
end.



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

Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
9-1085236633
Knight
2004-05-22 18:37
2004.09.19
У кого есть подборка исходников или алгоритмов для отрисовки...


10-1038816487
Calm
2002-12-02 11:08
2004.09.19
Материалы в помощь начинающим. Где их взять?


3-1093260994
Desperado
2004-08-23 15:36
2004.09.19
Конфликты транзакций


3-1093265990
Kraj
2004-08-23 16:59
2004.09.19
Уменьшить базу


3-1093259863
ydv
2004-08-23 15:17
2004.09.19
Триггеры, старое и новое значение поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский