实现(VB)编程程序与自定义文件扩展名建立关联的方法

在设计程序时,使用个人自定义的文件扩展名,这时打开相关的文件,就需要考虑到在你的文件同你的程序之间建立关联,这样不必每次都要先启动程序,再打开文件了。要做到这一点,只须调用API函数即可。下面的代码向你演示如何实现这一功能。

首先在窗体的通用声明段中加入下面的代码(VB代码):

Option Explicit

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, _

ByVal lpSubKey As String, phkResult As Long) As Long

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

' Return codes from Registration functions.

Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1&
Const ERROR_BADKEY = 2&
Const ERROR_CANTOPEN = 3&
Const ERROR_CANTREAD = 4&
Const ERROR_CANTWRITE = 5&
Const ERROR_OUTOFMEMORY = 6&
Const ERROR_INVALID_PARAMETER = 7&
Const ERROR_ACCESS_DENIED = 8&

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const MAX_PATH = 260&
Private Const REG_SZ = 1

在窗体的Click事件中加入下面的代码:

Private Sub Form_Click()
Dim sKeyName As String 'Holds Key Name in registry.
Dim sKeyValue As String 'Holds Key Value in registry.
Dim ret& 'Holds error status if any from API calls.
Dim lphKey& 'Holds created key handle from RegCreateKey.

'This creates a Root entry called "MyApp".

sKeyName = "MyApp"
sKeyValue = "My Application"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
'This creates a Root entry called .BAR associated with "MyApp".
sKeyName = ".BAR"
sKeyValue = "MyApp"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

'This sets the command line for "MyApp".

sKeyName = "MyApp"

sKeyValue = "c:mydirmy.exe %1"

ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

ret& = RegSetValue&(lphKey&, "shellopencommand", REG_SZ, _

sKeyValue, MAX_PATH)

End Sub

按F5运行程序并在窗体上点击一下鼠标,然后退出程序.

从开始菜单中运行REGEDIT,你可在HKEY_CLASSES_ROOT下找到.bar和MyApp两个子项,结构如下所示:

.bar = MyApp

MyApp = My Application

— Shell
— open
— command = c:mydirmy.exe %1

你可以查看关于RegCreateKey和RegSetValue的用法说明。

附录:

如果你只是希望个人电脑里实现文件程序关联,可以尝试使用如下方法:

  您可能希望将某一文件扩展名的关联从一个程序更改为另一个程序。例如,您可能想用您最喜欢的字处理器打开文本文件 (.txt),以便设置文本的格式。默认情况下,文本文件与 Microsoft 记事本关联。默认情况下,已知文件类型的文件扩展名是隐藏的。
  查看所有文件扩展名
  1. 在“我的电脑”或 Windows 资源管理器中的工具菜单上,单击文件夹选项。
  2. 单击查看选项卡。
  3. 清除“隐藏已知文件类型的扩展名”复选框。
  更改文件关联
  1. 右键单击要更改其扩展名关联的文件,然后单击打开方式。
  2. 在打开方式对话框中,单击您想在其中打开文件的程序,或者单击浏览以找到所需的程序。
  3. 选中“始终使用选择的程序打开这种文件”复选框。
  如何为无关联文件类型创建文件关联
  您可能需要为尚未与计算机中的程序建立关联的文件类型创建文件关联。进行此操作通常有两个原因:
  有的程序(例如数据库)所生成的文件报告的扩展名在Windows XP中未注册。
  您收到电子邮件附件,而您的计算机中未安装创建该附件的程序,但您可以使用其他已安装的程序阅读这些文件。
  要创建文件关联,请按照下列步骤操作:
  1. 右键单击要更改其扩展名的文件,然后单击打开,或者双击该文件。
  2. Windows XP 将显示一个对话框,指出没有与此文件关联的程序。该对话框提供两种用于创建关联的选项:
  使用 Web 服务寻找适当的程序
  从列表中选择程序
  除非您需要找到并下载能够打开此文件类型的软件,否则最好从列表中选择程序。
  3. Windows 显示的对话框中列出了计算机中已安装的程序。如果未列出此文件类型要使用的程序,请单击浏览以找到适当的软件。选中“始终使用选择的程序打开这种文件”复选框。

点赞 (0)
  1. 寒冰说道:

    尝试读取或写入受保护的内存。这通常指示其他内存已损坏。ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

    你的关联文件这个错误能发个可用的源码给我吗?谢谢大虾
    [reply=任侠,2011-09-21 07:42 AM]N久前的东西,神马的都木有了,[/reply]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code