📄 如何得到系统中的所有文件类型.txt
字号:
检 查 系 统 注 册 表 , 下 面 这 篇 文 章 对 你 会 有 帮 助 。
如 何 在 Windows操 作 系 统 中 改 变 文 件 打 开 方 式
( 合 肥 张 建 军 滕 明 贵 韩 莹 )
在 Windows 95/ NT/ 98操 作 系 统 中 改 变 文 件 打 开 方 式 的 问 题 , 又 可 称 为 改 变 文 件 类 型 关 联 的 问 题 , 即 把 某 类 型 ( 扩 展 名 ) 的 文 件 与 某 应 用 程 序 关 联 , 例 如 通 常 当 双 击 * .txt文 件 时 系 统 自 动 调 用 Notepad.exe。 本 文 介 绍 利 用 Windows注 册 表 编 辑 器 Regedit.exe手 工 或 编 程 改 变 文 件 打 开 方 式 的 方 法 , 并 提 供 程 序 实 例 。
一 、 基 本 思 路 :
1、 注 册 表 编 辑 器 Regedit.exe是 用 于 更 改 系 统 注 册 表 设 置 的 高 级 工 具 , 包 含 了 关 于 系 统 配 置 及 运 行 的 重 要 信 息 , 默 认 访 问 路 径 为 C:\Windows\Regedit.exe。 双 击 Regedit.exe图 标 , 运 行 注 册 表 编 辑 器 。 在 左 侧 显 示 栏 内 看 到 HKEY_CLASSES_ROOT、 KEY_CURRENT_USER、 HKEY_LOCAL_MACHINE等 主 键 。 与 文 件 类 型 有 关 的 所 有 主 键 、 键 名 、 键 值 都 存 放 在 HKEY_CLASSES_ROOT下 。
◆ 双 击 HKEY_CLASSES_ROOT, 向 下 拖 动 滚 动 条 , 找 到 .txt主 键 , 右 侧 显 示 栏 内 “ txtfile” 说 明 : 在 HKEY_CLASSES_ROOT下 有 一 txtfile主 键 , 其 下 存 放 了 打 开 * .txt文 件 应 用 程 序 的 有 关 信 息 。
◆ 向 下 拖 动 滚 动 条 , 找 到 txtfile主 键 , 右 侧 显 示 栏 内 “ 文 本 文 档 ” 为 文 件 类 型 描 述 。 双 击 txtfile, DefaultIcon右 侧 显 示 栏 内 “ shell32.dll,- 152” 为 * .txt文 件 的 图 标 ; shell\open\command, 右 侧 显 示 栏 内 “ C:\WINDOWS\NOTEPAD.EXE % 1” 为 打 开 * .txt文 件 的 应 用 程 序 名 称 及 参 数 。 改 变 打 开 文 件 方 式 的 方 法 ( 例 如 用 VISIO打 开 * .exc文 件 ) :
◆ 手 工 : 打 开 系 统 注 册 表 , 在 HKEY_CLASSES_ROOT下 找 到 .exc及 另 一 主 键 名 , 找 到 此 主 键 , 将 shell\open\command右 侧 显 示 栏 内 “ C:\WINDOWS\NOTEPAD.EXE % 1” 改 为 “ C:\VISIO.EXE % 1” ( 假 设 VISIO.EXE的 访 问 路 径 是 C:\, 具 体 视 情 况 而 定 ) , 按 F5刷 新 系 统 注 册 表 。
◆ 编 程 : 利 用 VB、 Delphi、 C+ + Builder等 读 写 系 统 注 册 表 , 可 自 动 改 变 文 件 打 开 方 式 。 本 文 提 供 VB、 Delphi编 程 实 例 。
二 、 编 程 实 例 :
㈠ 利 用 VB编 程
1、 在 vb6.0 IDE中 , 新 建 工 程 Project1, 在 Form1上 添 加 命 令 按 钮 Command1。
2、 选 择 菜 单 “ 工 程 ” — “ 添 加 模 块 ” — “ 模 块 ” — “ 打 开 ” , 在 Project1中 添 加 模 块 Moudle1。
3、 在 Moudle1“ 通 用 — 声 明 ” 部 分 声 明 API函 数 和 常 量 。
Const REG_SZ = 1
Global Const HKEY_CLASSES_ROOT = & H80000000
Declare Function OSRegQueryValueEx Lib “ advapi32” Alias
“ RegQueryValueExA” (ByVal hKey As Long, ByVal lpszValueName As String,
ByVal dwReserved As Long, lpdwType As Long, lpbData As Any, cbData As Long) As Long
Declare Function OSRegOpenKey Lib “ advapi32” Alias
“ RegOpenKeyA” (ByVal hKey As Long, ByVal lpszSubKey As String,
phkResult As Long) As Long
Declare Function OSRegSetValueEx Lib“ advapi32” Alias
“ RegSetValueExA” ( ByVal hKey As Long, ByVal lpszValueName As String,
ByVal dwReserved As Long, ByVal fdwType As Long, lpbData As Any,
ByVal cbData As Long) As Long
Declare Function OSRegCloseKey Lib“ advapi32” Alias
“ RegCloseKey” (ByVal hKey As Long) As Long
4、 在 Moudle 1中 编 写 函 数 。
Function RegOpenKey(ByVal hKey As Long, ByVal lpszSubKey As String,
phkResult As Long) As Boolean
Dim lResult As Long
On Error GoTo 0 ` 关 闭 错 误 陷 阱
lResult = OSRegOpenKey(hKey, lpszSubKey, phkResult)
If lResult = 0 Then
RegOpenKey = True
Else
RegOpenKey = False
End If
End Function
Function RegSetStringValue(ByVal hKey As Long, ByVal strValueName As String,
ByVal strData As String, Optional ByVal fLog) As Boolean
Dim lResult As Long
On Error GoTo 0
lResult = OSRegSetValueEx(hKey, strValueName, 0& , REG_SZ, ByVal strData,
LenB(StrConv(strData, vbFromUnicode)) + 1)
If lResult = 0 Then
RegSetStringValue = True
Else
RegSetStringValue = False
End If
End Function
Function StripTerminator(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr$ (0))
If intZeroPos > 0 Then
StripTerminator=Left$ (strString, intZeroPos - 1)
Else
StripTerminator = strString
End If
End Function
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String,
strData As String) As Boolean
Dim lResult As Long
Dim lValueType As Long
Dim strBuf As String
Dim lDataBufSize As Long
RegQueryStringValue = False
On Error GoTo 0
lResult = OSRegQueryValueEx(hKey, strValueName, 0& , lValueType, ByVal 0& ,
lDataBufSize)
If lResult = ERROR_SUCCESS Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, “ ” )
lResult = OSRegQueryValueEx(hKey, strValueName, 0& , 0& , ByVal strBuf,
lDataBufSize)
If lResult = ERROR_SUCCESS Then
RegQueryStringValue = True
strData = StripTerminator(strBuf)
End If
End If
End If
End Function
5、 双 击 Command1, 编 写 Click事 件 代 码 。
Private Sub Command1_Click()
Dim hKey As Long
Dim MyReturn As Long
Dim MyData As String
MyReturn = OSRegOpenKey(HKEY_CLASSES_ROOT, “ .exc” , hKey)
MyReturn=RegQueryStringValue(hKey,“ ” ,MyData)
MyReturn=OSRegOpenKey(HKEY_CLASSES_ROOT, MyData+ “ \shell\open\command” ,hKey)
MyReturn = RegSetStringValue(hKey,“ ” ,“ c:\visio.exe 1% ” , False)
If MyReturn Then
MsgBox “ 改 变 文 件 打 开 方 式 成 功 ! ” ,vbInformation,“ 请 注 意 ”
Else
MsgBox “ 改 变 文 件 打 开 方 式 失 败 ! ” ,vbExclamation,“ 请 注 意 ”
End If
OSRegCloseKey (hKey)
End Sub
6、 按 F5运 行 程 序 , 在 简 体 中 文 Windows95/ NT/ 98、 vb6.0/ 6.0环 境 中 调 试 通 过 。
㈡ 利 用 Delphi编 程
1、 在 Delphi3.0 IDE中 , 新 建 工 程 Project1, 在 Form1上 添 加 按 钮 Button1。
2、 在 uses子 句 中 添 加 Registry。
3、 双 击 Button1, 编 写 Click事 件 代 码 。
procedure TForm1.Button1Click(Sender: TObject);
var
MyRegistry : TRegINIFile;
Return:string;
begin
try
MyRegistry := TRegINIFile.Create(``);
MyRegistry.RootKey := HKEY_CLASSES_ROOT;
Return:=MyRegistry.ReadString (`.gid`,``,`No! Not Found the Key!`);
MyRegistry.WriteString(Return,``,`这 只 是 一 个 演 示 ! `);
MyRegistry.WriteString(Return+ `\DefaultIcon`,``,`c:\visio.exe,1`);
MyRegistry.WriteString(Return+ `\shell\open\command`,``,`c:\visio.exe % 1`);
finally
MyRegistry.Free;
end;
ShowMessage(`改 变 文 件 打 开 方 式 成 功 ! `);
end;
4、 按 F9运 行 程 序 , 在 简 体 中 文 Windows95/ NT/ 98、 Delphi3.0/ 4.0环 境 中 调 试 通 过 。
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -