clsFileLink.cls
上传用户:sjst8558
上传日期:2010-02-28
资源大小:89k
文件大小:5k
源码类别:

系统编程

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "FileLink"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15. Private Const HKEY_CLASSES_ROOT = &H80000000
  16. Private Const HKEY_CURRENT_USER = &H80000001
  17. Private Const HKEY_LOCAL_MACHINE = &H80000002
  18. Private Const HKEY_USERS = &H80000003
  19. Private Const HKEY_PERFORMANCE_DATA = &H80000004
  20. Private Const HKEY_CURRENT_CONFIG = &H80000005
  21. Private Const HKEY_DYN_DATA = &H80000006
  22. '(以上函数是一些注册表的常量,用来定义 hKey)
  23. Enum ValueType
  24. REG_NONE = 0
  25. REG_SZ = 1
  26. REG_EXPAND_SZ = 2
  27. REG_BINARY = 3
  28. REG_DWORD = 4
  29. REG_DWORD_BIG_ENDIAN = 5
  30. REG_MULTI_SZ = 7
  31. End Enum
  32. '(这个枚举是用来定义 dwType)
  33. Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long   '这个函数是用来创建注册表的主键
  34. Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long   '这个函数用来关闭打开的注册表
  35. 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  '这个函数用来改写注册表的键值
  36. '相关的三个API函数是:RegCreateKey[建立SubKey]和RegClose[关闭SubKey]
  37. '详细说明:
  38. 'RegCreateKey函数:
  39. 'VB声明 Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA"
  40. '(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  41. 'hKey: Key Handle
  42. 'lpSubKey: Subkey名称或路径
  43. 'phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.
  44. '返回值: =0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]
  45. '
  46. '它的参数用法与RegOpenKey一样。所不同的是RegOpenKey只能打开已经有的SubKey,而RegCreateKey则可以建立SubKey,比较特别的是,如果调用RegCreateKey所建立的SubKey是一个已经存在的SubKey,则它的功能和RegOpenKey相同。由于RegCreateKey的这种特性,有的程序员干脆不用RegOpenKey,而用RegCreateKey来统一代替RegOpenKey。
  47. 'RegClose函数:
  48. 'Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  49. '当我们不再存取Registry时,将打开或建立的SubKey关闭是一个比较好的习惯,就正如我们在使用C语言的文件打开函数后必须要关闭一样。
  50. '
  51. '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
  52. 'hKey: Key Handle
  53. 'lpSubKey: Subkey名称或路径
  54. 'dwType:数据类型,但在这里只能接受REG_SZ[字符串类型]
  55. 'lpData: 所设置的字符串
  56. 'cbData:lpData字符串的长度,这一长度包括chr(0)字符。
  57. '关于dwType的可能取值
  58. '有了这些注册表的操作函数后,我们就开始定义我们的文件类型了。这个过程其实很简单的。
  59. '1.在注册表中定义 .abc 文件 说明这个文件的类型是用户文件 "userfile"
  60. '2.在注册表的"userfile"中定义打开这种文件的程序(就是我们的VB程序!)
  61. 具体的源代码如下:
  62. Sub Main()
  63. Dim ret As Long, hKey As Long, ExePath As String
  64. ret = RegCreateKey(HKEY_CLASSES_ROOT, ".abc", hKey)  '定义 .abc文件
  65. ret = RegSetValue(HKEY_CLASSES_ROOT, ".abc", REG_SZ, "userfile", 9) '定义文件的类型,注意最后一个数字,它是 "userfile"的字节数 + 1
  66. ret = RegCreateKey(HKEY_CLASSES_ROOT, "userfile", hKey)           '定义"userfile"
  67. ret = RegCreateKey(HKEY_CLASSES_ROOT, "userfileshell", hKey)      '定义它的操作
  68. ret = RegCreateKey(HKEY_CLASSES_ROOT, "userfileshellopen", hKey)  '具体定义操作的名称
  69. ret = RegCreateKey(HKEY_CLASSES_ROOT, "userfileshellopencommand", hKey) '定义操作的动作
  70. ExePath = App.Path & "" & App.EXEName & ".exe %1"         '获得VB程序名称
  71. ret = RegSetValue(HKEY_CLASSES_ROOT, "userfileshellopencommand", REG_SZ, ExePath, LenB(StrConv(ExePath, vbFromUnicode)) + 1)
  72. '最关键的一步!将 "userfile" 的打开(open)操作和我们的程序关联起来
  73. RegCloseKey hKey
  74. End Sub
  75.  
  76.    这样,当我们以后双击 .abc的图标以后,就能自动打开我们的VB程序了。当然,这样只能实现打开程序,程序怎么能知道我们双击的文件名呢?好,我们现在创建一个窗体来说明一下这个问题。
  77. 在加载窗体的时候,加上这样的源代码:
  78. Private Sub Form_Load()
  79. Dim ss As String    '定义一个字符变量
  80. ss = Command()      '最关键的一步!用这个函数来获得命令行参数!!就是上面提到的 "%1" ,换句话来说,就是文件名!
  81. Me.Caption = ss     '好了,窗体上面就是你的文件名了!(当然,有了文件名,想干什么,你就自己决定吧!)
  82. End Sub
  83.        当然,你先要判断一下程序是不是第一次运行,如果是第一次运行的话,在加载窗体前,先执行一下 Sub Main(),进行文件的关联。
  84.        好了,学会后,你就能在程序中使用自定义的文件了,或许某一天,.mp3的默认打开方式就是你编写的播放器了。