说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何在Windows操作系统中改变文件打开方式

HTML文档下载 WORD文档下载 PDF文档下载
VB如何在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、在VB5.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、VB5.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环境中调试通过。
国际著名黑客大赛介绍与比较 微软Azure CDN服务全球范围内出现宕机 双向多功能U盘:从Android设备到PC还有多远? 证明了自己:微软Win8获美国防部6.17亿订单 2013 Facebook黑客杯报名即将开始 解决Win8下IE10无法打开的故障 [简讯] Scala 2.10.0发布! 收购传闻:Apple一厢情愿还是Waze待价而沽 回顾过去,展望2013:移动开发引擎、工具和语言盘点 成本为0!Netflix开源工具Janitor Monkey清理AWS iOS开发者讲述在Google工作的三个月 GitHub历史上最糟糕宕机事故回放及反省 疑因竞争 谷歌有意让地图与WP手机不兼容 移动游戏开者必看:海外VC最关心什么? 淘宝UED:随侃设计师的个人素养 TIOBE 2013年1月:不负重望 Objective-C再次赢得桂冠! 大数据:商业或技术的挑战? 开源移动统计:Cobub Razor近期版本大升级 无人机应用,为何屡遭苹果拒绝 2013年Java继续火的五大理由 Rails所有版本都有SQL注入漏洞?其实没那么严重 如何设置Windows Server 2012 NTFS权限 智能手机大局已定 HTC难扭转乾坤? 比谷歌手表更酷!基于大数据分析的睡衣 众投资金:改变了移动游戏开发的一切一切 这些科技产品和革新或在今年“横空出世”?! 现代Objective-C七宗罪 Google工程总监Ray Kurzweil意欲打造“虚拟朋友” 惠普开源JavaScript框架Enyo更新:支持桌面和移动平台 分析:三星或将成为科技行业第五巨头 是真的 诺基亚真有可能推Android手机 有个C++例题有些看不懂 不懂.net,想学,但迷肓!!!请在职的程序员指点一下。 程序都隐藏了,加速键还起作用的程序如何做? 高分求购方案,急! 怎样去掉TTreeView中自动生产的滚动条 驳“学习JAVA钱途无量”的说法 在线等:如何防止C#应用程序第二个实例被启动? 请问谁有ActiveSkinV4.3(或者4V.2)的破解版?50分相赠~! 新手请教 用RMAN备份数据到磁带出错!!解决问题一定给分!!江湖救急啊!! 搞不明白的vc错误,气死我了,请高手指点。。。 上不了网 动态调用DLL是出现的问题,棘手中,待解决。 我要对Spreadsheet的数据进行排序,用javascript怎么写 200分求<构建Web解决方案---应用ASP.NET和ADO.NET>电子书,不是只有源码的,谢谢 用DECS连接AS/400数据库问题 GD网站大家一起随便贴 寻人启事:我有一个侄子,网名叫穿越沦陷的爱,经常跑到这个版块来玩,谁看见了他,让他来找我,急事! 请教高手!!利用二进制文件转换成文本文件进行加密,实现理论是什么? IP包过滤程序问题!!!请大虾帮忙!! sql loader里面不支持FILLER 双系统中,如何删除WIN2000?(98+2000) 实现了第一个愿望... vc和vc.net有什么区别,学了vc有必要学vc.net吗??? 急,数据库表的问题!!! 为什么在Run ActivX程序时出现问题? DLL窗体关闭问题 setfont设置Dialog字体无效,搞不明白,大侠指点 为什么我的Web应用程序项目启动不了,总是出现错误!!! 100分求教jtable问题??? 菜鸟送分问题,请哪位大侠讲讲Inte1.ResponseCode和Inte1.ResponseInfo 声音变了!怎么办啊??? 100分 请问怎么做“索引”? make求救 用ant编译pet store 时,出现问题,提示信息见内文?请帮忙。。。高分酬谢。 三个三角了 开心ing 散分 tmd,上了vsnet2003贼船了。原来vc6的都不好用了 找在linux下免费gui?? 打开窗口获取原窗口信息的问题 Cbuilder安装问题,急! HelloWorld大全[接龙] 我要写一个程序在前台不需要运行后台运行可以:就像平时邮件服务品一样在前台不需要运行,而后台是提供服务的,要怎样来实现 临时表问题 多媒体教学系统开发 jbuilder中关于类的import问题? 有关远程控制的,例如抓屏,限制功能键,限制alt+f4,等等,请去http://hedaofeng.jahee.com 如何取得IE地址栏的输入信息? 急求一段ASP与SQLserver2000处理代码! 怎么创建win32 static library并输出函数?谢谢 !!!!求排列组合的简洁算法(80分) 我要对Spreadsheet的数据进行排序,用javascript怎么写 忻忻然是什么意思 SOME HEARTS这首歌开始琴音的反复,让我看到了前世Carrie Underwood的SOME HEARTS刚开始的钢琴音,我听了感觉很奇妙我听的时候看到了一幅画面紫色的山洞,月亮的清辉,一个长发,紫瞳,梦幻般的女孩扶 知县差朱仝,雷横捉拿宋江是什么意思 有一天,林园园做作业忘了带铅笔,李丽正好多了一根,她会怎么想, 英语翻译这个是一个专业名词吗?还是一个一个单词的翻译? Jim shine all the shoes in his familyJim ________ (shine) all the shoes in his family 新水浒传第一集中,和宋江在一起得哪个结巴是谁? 英语翻译langfristige Darlehen,die Kreditinstitute zur Finanzierung der Anschaffung von Gegenst?nden des Anlageverm?gens vergeben werden von den Banken entweder aus eigenen Mitteln oder aus den Mitteln ffentlicher rderprogramme (weitergeleitete Kr 册 了 丹 变这些汉字可以从新华字典里的部首目录中那样查到?依次是1. 乙 、二 一 Von nun an,meinen Weg allein跟Lassen Sie mich allein.Komm nicht wieder zu mir! 何日遣冯唐的典故 日报揣测:俄印效仿日本对华“远交近攻孟加拉国客机厕所现280块金锭 价值新快报被拘记者妻子:警方假借查案将丈青藏铁路格尔木站两辆火车相撞 致50宁波女子上班途中被贴淫秽言语字条(图受不了婆婆爆粗口 女子去法院和丈夫闹兰溪男子因儿子学习差被指责 动手打伤两名男子入室盗窃 自以为剪断监控就不老公全家都爱说脏话 女子向法院起诉离大学教师:我为什么把12岁女儿送进远曾经爱美的她在翠苑流浪8个多月 超市婚姻的\"起跑线\":有些事可改变 揭秘奥斯曼帝国后宫:实行\"计划生育留美中国学生考试作弊被抓 辩称“在中俄罗斯交付印度“迟到的”航母利比亚“反武装”示威遭袭数百人伤亡吉尔吉斯美军基地“撤留”始末failed: 大地之痕 科罗拉多大俄罗斯看好伊核协议河南纪检监察系统开展智力援疆:距离远failed: 2013宁波美食节烤海曙600万资金支持社会组织发展 居裙臣村姑重生逆转人生文娱抗日上海滩流浪的咖啡姬绝代影后谢齐人家花花公子如果遇见下一秒的你心意地下城守护者兽魂神龙岛旅游五龙岛旅游富里桥旅游金龙桥旅游遇龙桥旅游兴隆桥旅游工农桥旅游点将台旅游神堂湾旅游老屋场旅游厦门大学情人谷旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘