通過登錄檔完成檔名字尾與運用程式相關聯

fengchuixuelai發表於2011-09-19
 

通過對登錄檔進行修改,可以實現一種檔名字尾與某個應用程式相關聯

程式例如下:

procedure registerfiletype(ft,key,desc,icon,prg:string);

//ft:檔名字尾,如可以為'.tst'或'afile.tst'

//key:在登錄檔中的鍵值,要唯一

//desc:關聯程式的描述

//icon:預設的程式圖示,如Application.ExeName+',1',可以預設

//prg:對應的應用程式

var myreg : treginifile;

    ct : integer;

begin


     // 取檔案的字尾

     ct := pos('.',ft);

     while ct > 0 do begin

           delete(ft,ct,1);

           ct := pos('.',ft);

     end;

     if (ft = '') or (prg = '') then exit; //判斷字尾及應用程式是否有效

     ft := '.'+ft;

     myreg := treginifile.create('');

     try

        myreg.rootkey := hkey_classes_root; // 根應該為HKEY_CLASSES_ROOT

        if key = '' then key := copy(ft,2,maxint)+'_auto_file';

        // 如果沒給出鍵值,則自動建立一個

        myreg.writestring(ft,'',key); // 寫入描述的鍵值

        myreg.writestring(key,'',desc); // 寫入描述

        if icon <> '' then

           myreg.writestring(key+'\DefaultIcon','',icon);

           // 寫入預設圖示

        myreg.writestring(key+'\shell\open\command','',prg+' "%1"');

           //寫入相關聯的應用程式

     finally

            myreg.free;

     end;

end;

呼叫例子:

Example:

       registerFileType('.tst',

                        'testfile',

                        '測試關聯檔案',

                        Application.ExeName+',1',

                        Application.ExeName);

原理說明:

    程式關聯的鍵值放在登錄檔根為HKEY_CLASSES_ROOT下面。實現檔案關聯要寫入兩

    個鍵值:字尾鍵值和描述鍵值(可用術語用的不對)

    如實現將.tst與程式tstfile.exe相關聯

    其中字尾鍵值形為:  .tst       myprogram

    key值為檔案字尾,取值為對於key的一個描述

    描述鍵值形為:       myprogram 檔案描述

    其中還有相應的子鍵,如預設的程式圖示,形為:

                         myprogram\DefaultIcon  '', 'tstfile.exe,1'

    開啟命令,形為:

                         myprogram\shell\open\command '', 'tstfile.exe "%1"'

    寫入完這兩個鍵值後就可以實現檔案與應用程式相關聯了。

 

相關文章