小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VB中如何改變文件關(guān)聯(lián)!

 昵稱1292161 2010-05-06
文件關(guān)聯(lián)是指打開一種類型的文件的默認(rèn)方式比如默認(rèn)狀態(tài)下文本文件txt是與記事本程序相關(guān)聯(lián)的我們雙擊文本文件就能直接運(yùn)行記事本程序來編輯它。文件的關(guān)聯(lián)是通過注冊表得以實現(xiàn)的本例就是利用API函數(shù)RegCreateKey和RegSetValue來對注冊表進(jìn)行修改從中可以看到這兩個函數(shù)的用法。    
   
    --------------------------------------  
    利用WinApi函數(shù)實現(xiàn)文件關(guān)聯(lián)  
    --------------------------------------  
    程序說明:  
    例中利用兩個API函數(shù)RegCreateKey和  
    RegSetValue修改注冊表中的相應(yīng)鍵值  
    實現(xiàn)某一類型文件.log同一個應(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)按鈕被按下時讀寫注冊表完成   .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&   返回錯誤信息的變量  
    Dim   lphKey&   此變量用來保存創(chuàng)建的鍵的句柄  
   
    實際效果是在注冊表的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)建另外一個目錄   .log  
    sKeyName   =   ".log"   *名為.log的鍵名  
    sKeyValue   =   "MyApp"   *把鍵值設(shè)為"MyApp"  
   
  ret&   =   RegCreateKey&(HKEY_CLASSES_ROOT,   sKeyName,   lphKey&)  
  ret&   =   RegSetValue&(lphKey&,   "",   REG_SZ,   sKeyValue,   0&)    
   
    為“MyApp”設(shè)置了一個命令行  
    sKeyName   =   "MyApp"   *名為MyApp的鍵名  
    sKeyValue   =   "notepad.exe   %1"   *把鍵值設(shè)為"notepad.exe   %1"如果你知道DOS下的.Bat文件的語法的話便知%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)  
   
    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    
  【說明】  
  在指定的項下創(chuàng)建一個新項。如指定的項已經(jīng)存在那么函數(shù)會打開現(xiàn)有的項    
   
  【返回值】  
  Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼    
   
  【參數(shù)表】  
  hKey   -----------   Long要打開項的句柄或者一個標(biāo)準(zhǔn)項名    
   
  lpSubKey   -------   String欲創(chuàng)建的新子項??赏瑫r創(chuàng)建多個項只需用反斜杠將它們分隔開即可。例如level1\level2\newkey    
   
  phkResult   ------   Long指定一個變量用于裝載新子項的句柄  
   
  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è)置指定項或子項的默認(rèn)值    
   
  【返回值】  
  Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼    
  【參數(shù)表】  
  hKey   -----------   Long一個已打開項的句柄或指定一個標(biāo)準(zhǔn)項名    
   
  lpSubKey   -------   String欲對它的值進(jìn)行設(shè)置的一個子項的名字。如指定vbNullString表示設(shè)置hKey的默認(rèn)值。如指定的子項不存在則會創(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ù)本例中用到的兩個函數(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   要打開鍵的句柄或者一個標(biāo)準(zhǔn)鍵名。例如:HKEY_CLASSES_ROOT   是標(biāo)準(zhǔn)鍵名    
  lpSubKey   String   欲創(chuàng)建的新子鍵。如創(chuàng)建多個鍵需用反斜杠將它們分隔開。例如:level1\newkey      
  phkResult   Long   指定一個變量用于得到新子鍵的句柄在設(shè)置鍵值時要用到它    
  返回值   Long   零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼      
   
    RegSetValue函數(shù)用于設(shè)置指定鍵或子鍵的默認(rèn)值它的各個參數(shù)的意義如下:  
   
  參數(shù)   意義    
  hKey   Long   一個已打開鍵的句柄可從上面phkResult得到或是指定一個標(biāo)準(zhǔn)鍵名    
  lpSubKey   String   要設(shè)置鍵值的一個子鍵的名字。如指定vbNullString表示設(shè)置hKey的默認(rèn)值。如指定的子鍵不存在則會創(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)?#8220;MyApp”設(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)??偨Y(jié)前面的內(nèi)容可以發(fā)現(xiàn)在VB中采用API對注冊表操作的基本思路都是類似的只要我們知道了兩個API函數(shù)的用法然后熟悉注冊表操作就能靈活的寫出與注冊表相關(guān)的程序來。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多