因為我之前是關聯的.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,完成。
主要**如下:用inno指令碼的實現原理和上面時一樣的,只是需要知道一些指令碼的語法而已,指令碼如下(其實我也不是很懂):首先是乙個系統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例如,呼叫:string str = @"f:\workfile\pc\setup\apk.ico";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);
}
setvalue(@"f:\workfile\pc\bin\debug\apkinstaller.exe", "cn.apkinstaller",str);
constshcne_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...