Windows中的文件雙擊的時候,如果有程序關聯了該文件的擴展名,那么就會用關聯的程序打開該文件。那么它內部是怎么實現的呢?今天我給大家簡單講一下。
一切都在注冊表
所有注冊了的擴展名都在Windows的注冊表中,它的鍵值位于:
HKEY_CLASSES_ROOT
如下圖,可以看到有很多的注冊表鍵值:
我們看一下.txt的鍵值:
比較奇怪的是這里沒有發現有哪個鍵值寫了用什么程序來打開它。
奧秘就在于.txt的默認值,請看一下.txt的默認值:
.txt 的默認值是:
txtfile
那這個txtfile是什么東西呢?其實txtfile也是一個位于HKEY_CLASSES_ROOT下的鍵值,它的路徑是:
HKEY_CLASSES_ROOT xtfile
那就看下txtfile是什么東西:
看上圖,大家注意到了沒有,這里有一個shellopencommand的子條目,再打開這個條目看看:
看到了沒,notepad.exe就是“記事本”,后面的%1 一般用來傳遞被打開的文件路徑。
我找到這里,就猜想,這個就是默認的打開程序。
實踐驗證
上面是猜想,還需要驗證一下。
我新建了一個.test的擴展名,把該類型注冊為testfile。
再新建一個testfile條目:
測試一下:
總結
首先,Windows在注冊表中查找對應的擴展名有無注冊,有注冊就讀取該擴展名對應的文件類型,找到文件類型再從中讀取關聯的程序,從而調用該程序來打開。
出處:Greenerycn