檔案關聯 C 和Inno指令碼實現

2022-09-09 00:18:16 字數 2600 閱讀 9870

因為我之前是關聯的.apk檔案,就一關聯.apk檔案說事兒了。

檔案關聯操作主要的幾個地方:

1.刪除操作:刪除根目錄currentuser下面的software\microsoft\windows\currentversion\explorer\fileexts\.apk下面的所有子節點,這一點很重要,也很霸道

,最初我沒操作這一步,結果無論我怎麼關聯,都是不成功的,雙擊.apk檔案的時候,它啟動的始終不是自己做的apk安裝器。霸道是因為:之前電腦裡面.apk可能已經和某個exe關聯,我們刪掉這裡,就斷了他們的直接關聯,這是讓apk檔案和我們的安裝器直接關聯的第一步。

2.新增操作:在根目錄classesroot下新增乙個節點,如cn.apkinstaller,第二步:新增子節點defaulticon,這個是預設的圖示,然後指定本地乙個ico檔案路徑,這樣凡是電腦上面的apk檔案都會變成你指定那張;第三步:在cn.apkinstaller下新增子節點shell,然後再在shell下新增兩個子節點open和play,open節點值設為"開啟apk",play節點設為"用apkinstaller開啟"。這樣你在乙個apk檔案上點選右鍵就會看到你設定的東西了。

3.繼續新增操作:上一步操作,分別在open和play節點下新增同樣的command節點,然後設定command值是你本地apkinstaller的執行檔案路徑加上乙個   " %1」,如"c:\program files\apkinstaller.exe" "%1",後面的"%1"是為了實現雙擊時可以開啟exe。

4.修改操作:修改在根目錄classesroot下面的.apk節點的值,設定為cn.apkinstaller,完成。

主要**如下:

首先是乙個系統api,可以使你的修改不用重啟電腦就可以生效:

int shcne_assocchanged = 0x08000000;

int shcnf_idlist = 0x0000;

[dllimport("shell32.dll")]

static extern void shchangenotify(hchangenotifyeventid weventid,

hchangenotifyflags uflags,

intptr dwitem1,

intptr dwitem2);

接下來是乙個封裝好的方法,直接呼叫就可以了:

view code

public

void setvalue(string exename, string nodename, string

iconpath)

if (registry.classesroot.opensubkey(nodename) != null

)

if (registry.classesroot.opensubkey(nodename) == null

)

//修改對應檔案型別的預設的關聯程式

registrykey apk = registry.classesroot.opensubkey("

.apk

", true

);

if (apk != null

)

//通知系統,檔案關聯已經是作用,不然可能要等到系統重啟才看到效果

shchangenotify(hchangenotifyeventid.shcne_assocchanged, hchangenotifyflags.shcnf_idlist, intptr.zero, intptr.zero);

}

例如,呼叫:string str = @"f:\workfile\pc\setup\apk.ico";

setvalue(@"f:\workfile\pc\bin\debug\apkinstaller.exe", "cn.apkinstaller",str);

用inno指令碼的實現原理和上面時一樣的,只是需要知道一些指令碼的語法而已,指令碼如下(其實我也不是很懂):

const

shcne_assocchanged = $08000000;

shcnf_idlist = $0000;

function shchangenotifyex(wenentid: integer; uflag: cardinal; dwitem1: integer; dwitem2: integer): integer;external '[email protected] ';

呼叫:procedure curstepchanged(curstep: tsetupstep);

begin

linkfileicon();

end;

procedure curuninstallstepchanged(curuninstallstep: tuninstallstep);

begin

unlinkfileicon;

end;

稍後將會寫一篇有關 檔案拖拽到圖示或者介面可以直接開啟乙個新的介面的 文章。排版太爛了,先自噴乙個!

C 實現檔案關聯

和其他語言一樣,c 實現檔案關聯同樣需要直接操作登錄檔,即按規則分別設定副檔名,文件型別說明,友好名稱,圖示,呼叫方法等鍵值即可,網上隨便查查就可以寫出以下的 using microsoft.win32 key registry.classesroot.createsubkey jeebook.re...

vc 實現檔案關聯

include include int main int argc,char argv 上面的函式是把字串中所有的 變為 char str 1 regsetvalue hkey classes root,exefile shell open command reg sz,lpctstr str,st...

vc 實現檔案關聯

include include int main int argc,char argv 上面的函式是把字串中所有的 變為 char str 1 regsetvalue hkey classes root,exefile shell open command reg sz,lpctstr str,st...