以下的内容是从楼上给出的网址复制粘贴过来的。我还没来得及仔细研究。在此向楼上表示谢意!
文件关联是指打开一种类型的文件的默认方式比如默认状态下文本文件txt是与记事本程序相关联的我们双击文本文件就能直接运行记事本程序来编辑它。文件的关联是通过注册表得以实现的本例就是利用API函数RegCreateKey和RegSetValue来对注册表进行修改从中可以看到这两个函数的用法。
   
  -------------------------------------- 
  利用WinApi函数实现文件关联 
  -------------------------------------- 
  程序说明: 
  例中利用两个API函数RegCreateKey和 
  RegSetValue修改注册表中的相应键值 
  实现某一类型文件.log同一个应用程序 
  notepad.exe的关联. 
  -------------------------------------- 
  说明&作为数据类型的标示而不是“与”运算符 
  &指Long长整型数据其范围从
   -2,147,483,648
   到
   2,147,483,647。Long
   的类型声明字符为和号
   (&)。
   
  当关联按钮被按下时读写注册表完成
   .log
   文件和
   记事本Notepad
   的关联 
  如果你对注册表的结构和使用不熟悉的话可以参看“电脑乐园”中的相关教程 
Private
   Sub
   Command1_Click() 
If
   CmdPressed
   =
   True
   Then
   Exit
   Sub
   
  Dim
   sKeyName
   As
   String
   键的名称 
  Dim
   sKeyValue
   As
   String
   键值 
  Dim
   ret&
   返回错误信息的变量 
  Dim
   lphKey&
   此变量用来保存创建的键的句柄 
  实际效果是在注册表的HKEY_CLASSES_ROOT下创建MyApp目录 
  sKeyName
   =
   "MyApp "
   *名为MyApp的键名 
  sKeyValue
   =
   "Logfiles "
   *把键值设为 "Logfiles " 
  在HKEY_CLASSES_ROOT中创建名为sKeyName的键并返回句柄lphKey& 
  ret&
   =
   RegCreateKey&(HKEY_CLASSES_ROOT,
   sKeyName,
   lphKey&) 
  向句柄lphKey&所指的位置写入键值sKeyValue 
  ret&
   =
   RegSetValue&(lphKey&,
   " ",
   REG_SZ,
   sKeyValue,
   0&) 
 在注册表的HKEY_CLASSES_ROOT下创建另外一个目录
   .log 
  sKeyName
   =
   ".log "
   *名为.log的键名 
  sKeyValue
   =
   "MyApp "
   *把键值设为 "MyApp " 
ret&
   =
   RegCreateKey&(HKEY_CLASSES_ROOT,
   sKeyName,
   lphKey&) 
ret&
   =
   RegSetValue&(lphKey&,
   " ",
   REG_SZ,
   sKeyValue,
   0&)
   
  为“MyApp”设置了一个命令行 
  sKeyName
   =
   "MyApp "
   *名为MyApp的键名 
  sKeyValue
   =
   "notepad.exe
   %1 "
   *把键值设为 "notepad.exe
   %1 "如果你知道DOS下的.Bat文件的语法的话便知%1指的是要打开的文件 
  如果该键已经创建则RegCreateKey那么函数会打开现有的项 
  ret&
   =
   RegCreateKey&(HKEY_CLASSES_ROOT,
   sKeyName,
   lphKey&) 
  下面一句的实际效果是在MyApp键下建立shell\open\command目录并写入键值sKeyValue 
  说明:放在一个键的shell\open\command下的是打开某一类型文件的应用程序的名称 
  ret&
   =
   RegSetValue&(lphKey&,
   "shell\open\command ",
   REG_SZ,
   sKeyValue,
   MAX_PATH) 
  Command1.Caption
   =
   "关联已经创建 " 
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
   
【说明】 
在指定的项下创建一个新项。如指定的项已经存在那么函数会打开现有的项
   
【返回值】 
Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码
   
【参数表】 
hKey
   -----------
   Long要打开项的句柄或者一个标准项名
   
lpSubKey
   -------
   String欲创建的新子项。可同时创建多个项只需用反斜杠将它们分隔开即可。例如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
   
【说明】 
设置指定项或子项的默认值
   
【返回值】 
Long零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码
   
【参数表】 
hKey
   -----------
   Long一个已打开项的句柄或指定一个标准项名
   
lpSubKey
   -------
   String欲对它的值进行设置的一个子项的名字。如指定vbNullString表示设置hKey的默认值。如指定的子项不存在则会创建它
   
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函数本例中用到的两个函数声明如下: 
   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函数的作用是在注册表中指定的主键下创建一个新的主键而如指定的键已经存在那么函数会打开现有的主键其中各个参数的意义如下表所示:
   
    参数
   意义
   
hKey
   Long
   要打开键的句柄或者一个标准键名。例如:HKEY_CLASSES_ROOT
   是标准键名
   
lpSubKey
   String
   欲创建的新子键。如创建多个键需用反斜杠将它们分隔开。例如:level1\newkey
     
phkResult
   Long
   指定一个变量用于得到新子键的句柄在设置键值时要用到它
   
返回值
   Long
   零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码
     
  RegSetValue函数用于设置指定键或子键的默认值它的各个参数的意义如下: 
参数
   意义
   
hKey
   Long
   一个已打开键的句柄可从上面phkResult得到或是指定一个标准键名
   
lpSubKey
   String
   要设置键值的一个子键的名字。如指定vbNullString表示设置hKey的默认值。如指定的子键不存在则会创建它
   
dwType
   Long
   必须是REG_SZ
   
lpData
   String
   新的键值
   
cbData
   Long
   指定lpData的长度不包括空中止字符
   
返回值
   Long
   零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码
   
  下面我们看看怎样实现文件关联步骤一:在在注册表的HKEY_CLASSES_ROOT下创建MyApp主键: 
   ret&
   =
   RegCreateKey&(HKEY_CLASSES_ROOT,
   sKeyName,
   lphKey&)
   
  语句中sKeyName已经预先赋值为 "MyApp "而函数执行完后lphKey&会返回新创建的主键的句柄然后我们向句柄lphKey&所指的位置写入键值sKeyValue(已经赋值为 "Logfiles ") 
   ret&
   =
   RegSetValue&(lphKey&,
   " ",
   REG_SZ,
   sKeyValue,
   0&)
   
  如果这时查看注册表会发现如下图所示的新主键和键值:
   
  步骤二:在注册表的HKEY_CLASSES_ROOT下创建另外一个主键键名为“.log”键值为“MyApp”创建的方法与第一步相同只不过键名和键值不同。建立此键值的作用是把“.log”文件关联到“MyApp”主键所规定的内容这时的注册表如下:
   
  第三步:我们为“MyApp”设置了一个命令行也就是在主键MyApp下建立如下主键:
   
  实现的代码是: 
   sKeyName
   =
   "MyApp "
          *名为MyApp的键名
   
   sKeyValue
   =
   "notepad.exe
   %1 "
     *把键值设为 "notepad.exe
   %1 "%1指的是要打开的文件
   
      如果该键已经创建则RegCreateKey那么函数会打开现有的项
   
   ret&
   =
   RegCreateKey&(HKEY_CLASSES_ROOT,
   sKeyName,
   lphKey&)
   
      下面一句的实际效果是在MyApp键下建立shell\open\command目录并写入键值sKeyValue
   
      说明:放在一个键的shell\open\command下的是打开某一类型文件的应用程序的名称
   
   ret&
   =
   RegSetValue&(lphKey&,
   "shell\open\command ",
   REG_SZ,
   sKeyValue,
   MAX_PATH)
   
  经过以上几个步骤我们已经建立了“.log”文件和“记事本”程序的关联。总结前面的内容可以发现在VB中采用API对注册表操作的基本思路都是类似的只要我们知道了两个API函数的用法然后熟悉注册表操作就能灵活的写出与注册表相关的程序来。