?? 53.txt
字號:
建立文件關(guān)聯(lián)
文件關(guān)聯(lián)是指打開一種類型的文件的默認方式,比如默認狀態(tài)下文本文件txt是與記事本程序相關(guān)聯(lián)的,我們雙擊文本文件,就能直接運行記事本程序來編輯它。文件的關(guān)聯(lián)是通過注冊表得以實現(xiàn)的,本例就是利用API函數(shù)RegCreateKey和RegSetValue來對注冊表進行修改,從中可以看到這兩個函數(shù)的用法。
為了學習方便,提供的源碼已經(jīng)作了詳細的中文注釋,看看源碼框中的代碼:
(源程序下載)
我們先來聲明API函數(shù),本例中用到的兩個函數(shù)聲明如下:
Private Declare Function RegCreateKey& Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&) As Long
Private Declare Function RegSetValue& Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey&, ByVal lpszSubKey$, ByVal fdwType&, ByVal lpszValue$, ByVal dwLength&) As Long
RegCreateKey函數(shù)的作用是在注冊表中指定的主鍵下創(chuàng)建一個新的主鍵,而如指定的鍵已經(jīng)存在,那么函數(shù)會打開現(xiàn)有的主鍵,其中各個參數(shù)的意義如下表所示:
參數(shù) 意義
hKey Long,要打開鍵的句柄,或者一個標準鍵名。例如:HKEY_CLASSES_ROOT 是標準鍵名
lpSubKey String,欲創(chuàng)建的新子鍵。如創(chuàng)建多個鍵,需用反斜杠將它們分隔開。例如:level1\newkey
phkResult Long,指定一個變量,用于得到新子鍵的句柄,在設(shè)置鍵值時要用到它
返回值 Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼
RegSetValue函數(shù)用于設(shè)置指定鍵或子鍵的默認值,它的各個參數(shù)的意義如下:
參數(shù) 意義
hKey Long,一個已打開鍵的句柄,可從上面phkResult得到,或是指定一個標準鍵名
lpSubKey String,要設(shè)置鍵值的一個子鍵的名字。如指定vbNullString,表示設(shè)置hKey的默認值。如指定的子鍵不存在,則會創(chuàng)建它
dwType Long,必須是REG_SZ
lpData String,新的鍵值
cbData Long,指定lpData的長度,不包括空中止字符
返回值 Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼
下面我們看看怎樣實現(xiàn)文件關(guān)聯(lián),步驟一:在在注冊表的HKEY_CLASSES_ROOT下創(chuàng)建MyApp主鍵:
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
語句中sKeyName已經(jīng)預(yù)先賦值為"MyApp",而函數(shù)執(zhí)行完后lphKey&會返回新創(chuàng)建的主鍵的句柄,然后我們向句柄lphKey&所指的位置寫入鍵值sKeyValue(已經(jīng)賦值為"Logfiles")
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
如果這時查看注冊表,會發(fā)現(xiàn)如下圖所示的新主鍵和鍵值:
步驟二:在注冊表的HKEY_CLASSES_ROOT下創(chuàng)建另外一個主鍵,鍵名為“.log”,鍵值為“MyApp”,創(chuàng)建的方法與第一步相同,只不過鍵名和鍵值不同。建立此鍵值的作用是,把“.log”文件關(guān)聯(lián)到“MyApp”主鍵所規(guī)定的內(nèi)容,這時的注冊表如下:
第三步:我們?yōu)椤癕yApp”設(shè)置了一個命令行,也就是在主鍵MyApp下建立如下主鍵:
實現(xiàn)的代碼是:
sKeyName = "MyApp" '*名為MyApp的鍵名
sKeyValue = "notepad.exe %1" '*把鍵值設(shè)為"notepad.exe %1",%1指的是要打開的文件
'如果該鍵已經(jīng)創(chuàng)建,則RegCreateKey那么函數(shù)會打開現(xiàn)有的項
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
'下面一句的實際效果是在MyApp鍵下建立shell\open\command目錄,并寫入鍵值sKeyValue
'說明:放在一個鍵的shell\open\command下的是打開某一類型文件的應(yīng)用程序的名稱
ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
經(jīng)過以上幾個步驟,我們已經(jīng)建立了“.log”文件和“記事本”程序的關(guān)聯(lián)。總結(jié)前面的內(nèi)容可以發(fā)現(xiàn)在VB中采用API對注冊表操作的基本思路都是類似的,只要我們知道了兩個API函數(shù)的用法,然后熟悉注冊表操作,就能靈活的寫出與注冊表相關(guān)的程序來。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -