在windows上,不同的副檔名會顯示不同的圖示。但是如果你的程式使用了自己定義的一種副檔名(比如.guo),windows發現其為「未知型別」時,會顯示乙個預設的未知型別圖示,既不好看又不容易在一堆檔案中快速找到你的檔案。
所以,本文將介紹怎麼通過登錄檔來實現更改檔案的預設圖示。
以.guo型別為例:
副檔名
.guo
預設圖示
d:\bin\guo.ico
描述 我的guo檔案(「描述」將會顯示在explorer詳細列表中的「型別」列)
開啟程式
d:\bin\guo.exe
在c#中只需要執行:
registry.setvalue(@"hkey_classes_root\.guo
", "", "
myguo
");//
此為加入的檔案型別副檔名與別名
registry.setvalue(@"
hkey_classes_root\myguo
", "", "
我的guo檔案
");//
設定檔案型別的「描述」
registry.setvalue(@"
hkey_classes_root\myguo\defaulticon
", "", @"
d:\bin\guo.ico
"); //
圖示registry.setvalue(@"
hkey_classes_root\myguo\shell\open\command
", "", "
d:\\bin\\guo.exe \"%1\"
");//
關聯程式
即可為.guo檔案建立預設圖示和預設關聯程式。其中myguo是.guo的別名。
在command中,%1代表的是輸入檔名,比如你雙擊d:\bin\a.guo檔案,就相當於執行了這樣的命令列:
d:\bin\guo.exe 「d:\bin\a.guo」
這樣,guo.exe在啟動的同時,就可以通過static void main(string args)裡的args引數獲取到檔案路徑了。
在你執行了以上**之後,你會發現,explorer裡面的.guo檔案圖示並沒有改變,那是因為你需要重啟explorer或者計算機才能生效。那麼有沒有不需要重啟就能實時生效的辦法呢?有,我們使用api實現:
[system.runtime.interopservices.dllimport("shell32.dll")]
public
static
extern
void shchangenotify(uint weventid, uint uflags, intptr dwitem1, intptr dwitem2);
然後在上面的**後面加上這句:
shchangenotify(0x8000000, 0, intptr.zero, intptr.zero);
你看到了什麼?
註冊檔案型別,並關聯程式(三)
雙擊乙個txt檔案,就能用記事本開啟,因為txt檔案關聯了記事本程式。想讓你自定義的檔案型別也通過雙擊就能直接呼叫你的程式並開啟?ok,首先我們找到第一期,看到其中的這行 registry.setvalue hkey classes root myguo shell open command d b...
註冊檔案型別,並關聯程式(二)
registry.setvalue hkey classes root myguo defaulticon d bin guo.ico 怎麼把ico檔案打包 編譯 到exe檔案中,請參看 將多個圖示檔案編譯到c 程式中 假設我們把兩個ico檔案編譯到了guo.exe檔案中,第乙個作為exe的預設圖示...
註冊檔案型別,關聯檔案
bool function registerfiletype lpctstr houzhui,lpctstr fmiaoshu,lpctstr wmiaoshu,lpctstr filepath hkey hkey null dword dwdip 0 lptstr newreg new tchar...