• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        如何創(chuàng)建文件關(guān)聯(lián)

        如何創(chuàng)建文件關(guān)聯(lián)

        更新時(shí)間:2022-05-10 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        文件關(guān)聯(lián)是指打開一種類型的文件的默認(rèn)方式比如默認(rèn)狀態(tài)下文本文件txt是與記事本程序相關(guān)聯(lián)的我們雙擊文本文件就能直接運(yùn)行記事本程序來編輯它。文件的關(guān)聯(lián)是通過注冊表得以實(shí)現(xiàn)的本例就是利用API函數(shù)RegCreateKey和RegSetValue來對注冊表進(jìn)行修改從中可以看到這兩個(gè)函數(shù)的用法。

          --------------------------------------
          利用WinApi函數(shù)實(shí)現(xiàn)文件關(guān)聯(lián)
          --------------------------------------
          程序說明:
          例中利用兩個(gè)API函數(shù)RegCreateKey和
          RegSetValue修改注冊表中的相應(yīng)鍵值
          實(shí)現(xiàn)某一類型文件.log同一個(gè)應(yīng)用程序
          notepad.exe的關(guān)聯(lián).
          --------------------------------------
          說明&作為數(shù)據(jù)類型的標(biāo)示而不是“與”運(yùn)算符
          &指Long長整型數(shù)據(jù)其范圍從 -2,147,483,648 到 2,147,483,647。Long 的類型聲明字符為和號 (&)。

          當(dāng)關(guān)聯(lián)按鈕被按下時(shí)讀寫注冊表完成 .log 文件和 記事本Notepad 的關(guān)聯(lián)
          如果你對注冊表的結(jié)構(gòu)和使用不熟悉的話可以參看“電腦樂園”中的相關(guān)教程

        Private Sub Command1_Click()
        If CmdPressed = True Then Exit Sub

          Dim sKeyName As String 鍵的名稱
          Dim sKeyValue As String 鍵值
          Dim ret& 返回錯(cuò)誤信息的變量
          Dim lphKey& 此變量用來保存創(chuàng)建的鍵的句柄

          實(shí)際效果是在注冊表的HKEY_CLASSES_ROOT下創(chuàng)建MyApp目錄
          sKeyName = "MyApp" *名為MyApp的鍵名
          sKeyValue = "Logfiles" *把鍵值設(shè)為"Logfiles"
          在HKEY_CLASSES_ROOT中創(chuàng)建名為sKeyName的鍵并返回句柄lphKey&
          ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
          向句柄lphKey&所指的位置寫入鍵值sKeyValue
          ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

          在注冊表的HKEY_CLASSES_ROOT下創(chuàng)建另外一個(gè)目錄 .log
          sKeyName = ".log" *名為.log的鍵名
          sKeyValue = "MyApp" *把鍵值設(shè)為"MyApp"

        ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
        ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

          為“MyApp”設(shè)置了一個(gè)命令行
          sKeyName = "MyApp" *名為MyApp的鍵名
          sKeyValue = "notepad.exe %1" *把鍵值設(shè)為"notepad.exe %1"如果你知道DOS下的.Bat文件的語法的話便知%1指的是要打開的文件
          如果該鍵已經(jīng)創(chuàng)建則RegCreateKey那么函數(shù)會打開現(xiàn)有的項(xiàng)
          ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
          下面一句的實(shí)際效果是在MyApp鍵下建立shell\open\command目錄并寫入鍵值sKeyValue
          說明:放在一個(gè)鍵的shell\open\command下的是打開某一類型文件的應(yīng)用程序的名稱
          ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)

          Command1.Caption = "關(guān)聯(lián)已經(jīng)創(chuàng)建"



        Command1.Enabled = False
        CmdPressed = True
        End Sub

        Private Sub Form_Load()
        CmdPressed = False
        End Sub  

          以下是模塊文件中的代碼:

        Declare Function RegCreateKey& Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&)

        【VB聲明】

        Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
        【說明】
        在指定的項(xiàng)下創(chuàng)建一個(gè)新項(xiàng)。如指定的項(xiàng)已經(jīng)存在那么函數(shù)會打開現(xiàn)有的項(xiàng)

        【返回值】
        Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一個(gè)錯(cuò)誤代碼

        【參數(shù)表】
        hKey ----------- Long要打開項(xiàng)的句柄或者一個(gè)標(biāo)準(zhǔn)項(xiàng)名

        lpSubKey ------- String欲創(chuàng)建的新子項(xiàng)?赏瑫r(shí)創(chuàng)建多個(gè)項(xiàng)只需用反斜杠將它們分隔開即可。例如level1\level2\newkey

        phkResult ------ Long指定一個(gè)變量用于裝載新子項(xiàng)的句柄

        Declare Function RegSetValue& Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey&, ByVal lpszSubKey$, ByVal fdwType&, ByVal lpszValue$, ByVal dwLength&)

        【VB聲明】

        Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

        【說明】
        設(shè)置指定項(xiàng)或子項(xiàng)的默認(rèn)值

        【返回值】
        Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一個(gè)錯(cuò)誤代碼
        【參數(shù)表】
        hKey ----------- Long一個(gè)已打開項(xiàng)的句柄或指定一個(gè)標(biāo)準(zhǔn)項(xiàng)名

        lpSubKey ------- String欲對它的值進(jìn)行設(shè)置的一個(gè)子項(xiàng)的名字。如指定vbNullString表示設(shè)置hKey的默認(rèn)值。如指定的子項(xiàng)不存在則會創(chuàng)建它

        dwType --------- Long必須是REG_SZ

        lpData --------- String新值

        cbData --------- Long指定lpData的長度不包括空中止字符


        Public Const ERROR_SUCCESS = 0&
        Public Const ERROR_BADDB = 1&
        Public Const ERROR_BADKEY = 2&
        Public Const ERROR_CANTOPEN = 3&
        Public Const ERROR_CANTREAD = 4&
        Public Const ERROR_CANTWRITE = 5&
        Public Const ERROR_OUTOFMEMORY = 6&
        Public Const ERROR_INVALID_PARAMETER = 7&
        Public Const ERROR_ACCESS_DENIED = 8&
        Global Const HKEY_CLASSES_ROOT = &H80000000
        Public Const MAX_PATH = 256&
        Public Const REG_SZ = 1
          我們先來聲明API函數(shù)本例中用到的兩個(gè)函數(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)建一個(gè)新的主鍵而如指定的鍵已經(jīng)存在那么函數(shù)會打開現(xiàn)有的主鍵其中各個(gè)參數(shù)的意義如下表所示:

          參數(shù) 意義
        hKey Long 要打開鍵的句柄或者一個(gè)標(biāo)準(zhǔn)鍵名。例如:HKEY_CLASSES_ROOT 是標(biāo)準(zhǔn)鍵名
        lpSubKey String 欲創(chuàng)建的新子鍵。如創(chuàng)建多個(gè)鍵需用反斜杠將它們分隔開。例如:level1\newkey  
        phkResult Long 指定一個(gè)變量用于得到新子鍵的句柄在設(shè)置鍵值時(shí)要用到它
        返回值 Long 零(ERROR_SUCCESS)表示成功。其他任何值都代表一個(gè)錯(cuò)誤代碼  

          RegSetValue函數(shù)用于設(shè)置指定鍵或子鍵的默認(rèn)值它的各個(gè)參數(shù)的意義如下:

        參數(shù) 意義
        hKey Long 一個(gè)已打開鍵的句柄可從上面phkResult得到或是指定一個(gè)標(biāo)準(zhǔn)鍵名
        lpSubKey String 要設(shè)置鍵值的一個(gè)子鍵的名字。如指定vbNullString表示設(shè)置hKey的默認(rèn)值。如指定的子鍵不存在則會創(chuàng)建它
        dwType Long 必須是REG_SZ
        lpData String 新的鍵值
        cbData Long 指定lpData的長度不包括空中止字符
        返回值 Long 零(ERROR_SUCCESS)表示成功。其他任何值都代表一個(gè)錯(cuò)誤代碼

          下面我們看看怎樣實(shí)現(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&)

          如果這時(shí)查看注冊表會發(fā)現(xiàn)如下圖所示的新主鍵和鍵值:

          步驟二:在注冊表的HKEY_CLASSES_ROOT下創(chuàng)建另外一個(gè)主鍵鍵名為“.log”鍵值為“MyApp”創(chuàng)建的方法與第一步相同只不過鍵名和鍵值不同。建立此鍵值的作用是把“.log”文件關(guān)聯(lián)到“MyApp”主鍵所規(guī)定的內(nèi)容這時(shí)的注冊表如下:

          第三步:我們?yōu)椤癕yApp”設(shè)置了一個(gè)命令行也就是在主鍵MyApp下建立如下主鍵:

          實(shí)現(xiàn)的代碼是:

           sKeyName = "MyApp"        *名為MyApp的鍵名
           sKeyValue = "notepad.exe %1"   *把鍵值設(shè)為"notepad.exe %1"%1指的是要打開的文件
              如果該鍵已經(jīng)創(chuàng)建則RegCreateKey那么函數(shù)會打開現(xiàn)有的項(xiàng)
           ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
              下面一句的實(shí)際效果是在MyApp鍵下建立shell\open\command目錄并寫入鍵值sKeyValue
              說明:放在一個(gè)鍵的shell\open\command下的是打開某一類型文件的應(yīng)用程序的名稱
           ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)

          經(jīng)過以上幾個(gè)步驟我們已經(jīng)建立了“.log”文件和“記事本”程序的關(guān)聯(lián)?偨Y(jié)前面的內(nèi)容可以發(fā)現(xiàn)在VB中采用API對注冊表操作的基本思路都是類似的只要我們知道了兩個(gè)API函數(shù)的用法然后熟悉注冊表操作就能靈活的寫出與注冊表相關(guān)的程序來。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 国产亚洲成AV人片在线观黄桃 | 亚洲精品无码不卡在线播放| 国产精品福利在线观看免费不卡| 性色av免费观看| 国产成人精品亚洲2020| av免费不卡国产观看| 亚洲国产美女在线观看| 亚洲精品免费在线| 亚洲xxxxxx| 在线视频免费国产成人| 羞羞漫画小舞被黄漫免费| 波多野结衣免费视频观看 | 久久免费福利视频| 亚洲成人在线电影| 日韩精品极品视频在线观看免费| 亚洲黄色高清视频| 无码人妻一区二区三区免费 | 一级做a爰片性色毛片免费网站| 亚洲国产午夜福利在线播放 | 一级女人18毛片免费| 亚洲欧洲日韩国产一区二区三区| 午夜视频免费观看| 日韩成人毛片高清视频免费看| 亚洲综合国产精品第一页| 日韩免费的视频在线观看香蕉| 亚洲最大在线观看| 免费永久国产在线视频| 国产真人无码作爱免费视频| 久久亚洲AV无码精品色午夜| 国产在线国偷精品产拍免费| 污污的视频在线免费观看| 久久久影院亚洲精品| 猫咪社区免费资源在线观看| 特级毛片在线大全免费播放| 亚洲AV无码一区二区二三区入口| 中国在线观看免费国语版| 七次郎成人免费线路视频| 久久久久亚洲av无码专区导航 | 亚洲Av无码乱码在线znlu| 全免费a级毛片免费看| 在线综合亚洲欧洲综合网站|