乔山办公网我们一直在努力
您的位置:乔山办公网 > office365 > 如何用注册表修复<em>office</em>文件关联关系?-office 关联修复注册表,of

如何用注册表修复<em>office</em>文件关联关系?-office 关联修复注册表,of

作者:乔山办公网日期:

返回目录:office365


利用WinApi函数实现文件关联

程序说明:
例中利用两个API函数RegCreateKey和
RegSetValue修改注册表中的相应键值
实现某一类型文件.log同一个应用程序
notepad.exe的关联.

说明&作为数据类型的标示而不是“与”运算符
&指Long长整型数据其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。

当关联按钮被按下时读写注册表完成 .log 文件和 记事本Notepad 的关联
如果你对注册表的结构和使用不熟悉的话可以参看“电e799bee5baa6e997aee7ad94e4b893e5b19e363脑乐园”中的相关教程

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函数的用法然后熟悉注册表操作就能灵活的写出与注册表相关的程序来。

1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:

2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:

3、在“安全设置-Internet 区域”界面找到“Java 小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击确定,如下图所示:




步骤一,win key+R,打开运行,键入regedit,回车,打开注册表编辑器(winkey就是空格左边的微软标志键;或者在开始菜单的运行中输入regedit)。如下图所示, 在HKEY_CLASSES_ROOT目录下找到“.doc”项,双击右边的默认,在弹出的窗口中将键值修改为“Word.Document.8”(不带引号,以下同),回车。同样, 在该目录下找到“.docx”项,以同样方法将默认键值改为“Word.Document.12”,回车。前者其实是microsoft word 97-2003文档的代称,而后者在07版本的word中被称为“microsoft word 2007文档”,在2010版本中直接被称为“microsoft word文档”。

  步骤二e5a48de588b6e799bee5baa6e79fa5e98193362,对于docx的文件关联,在HKEY_CLASSES_ROOT目录下依次展开以下子项,HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\command。
  左键单击command,然后左键双击右边的默认选项,在出现的窗口中将键值设置为“D:\Program Files\Microsoft Office\Office14\WINWORD.EXE %1”,回车【这里的公式为“路径+空格+%1”,你需要找到自己所安装的word程序的路径,我的是D:\Program Files\Microsoft Office\Office14\WINWORD.EXE。记得不要忘了“%1”和“%1”前面的空格,否则完成修改之后,点击文档打开,就只会运行程序,而不会打开文件。】同理,对于doc的文件关联,可以依次展开HKEY_CLASSES_ROOT\Word.Document.8\shell\Open\command,按同样的方式将键值设置为“D:\Program Files\Microsoft Office\Office14\WINWORD.EXE %1”,回车。

  Ok,到这里,我们就攻克了word文档的关联问题。按照这个道理,需要修改PowerPoint的文件关联的话,则需要按照步奏一的方法,找到“.ppt”和“.pptx”项,将右边的默认键值分别改为PowerPoint.Show.8和PowerPoint.Show.12。然后按照步骤二的方法,展开HKEY_CLASSES_ROOT\PowerPoint.Show.12\shell\Open\command和HKEY_CLASSES_ROOT\PowerPoint.Show.8\shell\Open\command,将默认键值都修改为“D:\Program Files\Microsoft Office\Office14\POWERPNT.EXE %1”。

  需要修改Excel的话,则是按照步骤一的方法,找到“.xls”和“.xlsx”,将右边的默认键值分别修改为Excel.Sheet.8和Excel.Sheet.12。然后按照步骤二的方法,展开HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command和HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command,将默认键值都修改为“D:\Program Files\Microsoft Office\Office14\EXCEL.EXE %1”。

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网