前言:
本文是基本原理介紹和手動的操作。程序實現該功能在http://blog.csdn.net/arvon2012/article/details/7839556,同時里面有完整代碼的下載。
今天在開發程序的時候,需要做后綴和程序的關聯,所以寫下詳細的操作過程跟大家分享。有什么意見歡迎留言!
目標:我這次要自定義一個后綴名(.seve),並且自己開發一個負責打開這種后綴文件的程序(Opo.exe)。當雙擊后綴名為我自定義的文件時,自動運行我的程序(Opo.exe)。
概要原理:
對windows來說,雙擊一個文件時,windows會根據他注冊表中的記載打開和當前文件后綴名關聯的程序。如默認情況下:.txt關聯的是NODEPAD.exe,.doc關聯的是word。所以要進行關聯,就是要做注冊表的修改。修改注冊表,可以通過手動方式,也可通過注冊表編程實現。
那么注冊表中是怎么把指定的后綴和指定的程序關聯的?
我們用實例講解,這里的系統是XP(WIN7系統的注冊表和XP至少在這里用到的地方都是一樣的),點擊開始——運行,輸入regedit(這個命令用了很久,但是我比較笨,后來才看出來其實就是register edit(注冊表編輯)的簡寫)。
打開后可以看到幾個“鍵”,我們關心的和后綴名相關的,他們在HKEY_CLASSES_ROOT下面。點開后,點編輯——查找,然后在查找欄中輸入.txt就自動跳轉到.txt所在的位置,大家在右邊可以看到如下內容:
按順序講下這三個值:
1.(默認):在關聯中最重要的一個值,決定了當前后綴的文件交給誰並且怎么處理,這里大家看到的內容是“txtfile”。其實這個.txt鍵只是相當於一個索引,該鍵中並沒有實際的處理說明,而實際的處理都交給了另一個鍵,那個鍵的名字就是這里的“(默認)”給出的。(着急的童鞋現在就可以在注冊表中搜txtfile鍵)
2Content Type:這里指定了這個文件內容是什么類型,這個值可以接受很多參數,這個參數的列表可以再MSDN中查找Content Type看到。這個值存在的意義是當系統要處理這個文件內容的時候,和這個后綴名關聯在一起的程序會根據這個值決定如何打開並展現文件中的內容。
3.PerceivedType:這個值也是一個類型的標記。他的用處呢?舉個例子大家就有感覺了,如果這個值的內容是video的時候。我們打開一些視頻播放器,許多播放器第一次打開很可能會搜索電腦硬盤,尋找可以播放的文件並展現在“播放列表”中,而這個搜索過程就是根據這個值進行的。
下面跳轉到負責真正處理和打開工作的鍵中,對於我們的例子.txt,這個處理鍵,上面已經說了,就是txtfile,找到該鍵,並且全部展開,可以看到如下內容:
PS:在關聯后綴名和打開程序中,都是兩個鍵成對工作的,比如這里的.txt和txtfile鍵。我們暫且稱第一個是“后綴鍵”第二個是“處理鍵”。這樣方便后面表達。
上面的圖中,大家可以看到txt文件的處理鍵的層次內容。選中最頂層的txtfile看右邊界面顯示的內容:
1.(默認):這里是文件類型的說明,大家右擊文件圖標,選擇屬性的時候,在屬性中的文件類型框中可以看到這個值。
2.EditFlags:標識這個文件的讀寫權限,比如是只讀,還是可讀寫。。。等等,這個在文件屬性里也能修改。
3.FriendlyTypeName:這個值是應用程序的友好名稱(暈菜,什么是友好名稱?這里先說下不友好名稱是什么:應用程序的ID,沒錯,就是看也看不懂的那一串數字,所以你在這里看到的這個值已經很適合人腦去理解了,很友好!)。這個值其實就是說明這個處理鍵對應的應用程序是哪個,大家打開文件屬性找一找,也能找到這個值的身影。不過記住,這個值可不是起決定作用。決定作用在子鍵中。
現在回到txtfile鍵層次圖中:
可以看到這個處理鍵的直接子鍵有兩個:1.DefaultIcon這一類文件的默認圖標。2.Shell,存放了對這類文件進行實際操作時,執行的命令。
我們直接看重點:
shell鍵:
在這個鍵中,可以看到三個子鍵:open,print,printto,這里列出的可以執行的命令,其實和鼠標右擊這個文件時候,彈出的菜單中的命令對應。我們關心的是打開操作,所以這里我們看下open鍵下的command里存的是什么:
默認鍵:%SystemRoot%\system32\NOTEPAD.EXE %1
看到木有?這里真正的指定了由誰來打開這種后綴的文件。這里是NOTEPAD.EXE。
和open鍵平行的建都是一些操作,大家感興趣可以一個個打開研究研究。
實現關聯
既然知道注冊表中后綴和程序是怎么關聯的,我們就也來關聯一組。
后綴:opo
程序:Opo.exe
1.手動方式
我們先手動創建,之后再說程序實現,原理上都一樣,只不過程序的比較帥,當然也比較高端(在某些應用場合)。
鼠標右擊HKEY_CLASSES_ROOT,彈出菜單,選新建——項
1.后綴鍵
創建:然后會創建一個鍵,我們給它輸入名字,這里的名字就是后綴名:.opo。
寫值:選中該鍵,然后在右邊的界面中雙擊(默認),彈出對話框,我們在值中輸入處理鍵的名字:opofile。
后綴鍵完成!
2.處理鍵
創建:和上面一樣,名字寫成上面的鍵的(默認)值opofile
我們就是要關聯打開應用,其他亂七八糟的東西我們先不關心,所以如下:
右擊opofile,在opofile鍵下創建鍵shell,shell下創建鍵open(定義打開命令),open下創建子鍵command。
寫值:選中command,然后雙擊右邊的默認,在彈出框中的寫入程序Opo.exe的位置后面加上%1,我的是這樣的:
測試:
現在隨便找個小程序,名字改成Opo.exe,然后自己創建一個文本文件,重命名成后綴為opo的文件。然后雙擊這個文件,額。。。。
這就是所謂的后綴名和程序的關聯,完成!嘿嘿