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

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环境中调试通过。
Android模拟GPS数据生成kml和nmea文件 Android签名用keytool和jarsigner制作apk文件 谈谈Android中文短信的实现 Android中文短信开发技巧 Android来电号码获取代码 Android AIDL初学者必看内容 Android与XML解析 Android天气预报程序开发实例与定位信息 Android中文短信开发终结篇 Android权限列表permission说明 Android输入法开发实例解析 Android示例程序Snake贪食蛇源代码分析 Android平台View的按键事件KeyDown用法 Android加速感应器实现屏幕自动旋转-Sensor属性 Android视频播放类VideoView解析 Javascript如何检测浏览器关闭了小叉叉 文件操作 - DOS BAT批处理编程入门教程(六) 获得手机中的电话簿 Android开发学习小心得 VC中用CPPToolTip轻松实现工具提示 Android中MediaRecorder类实现视频录制 WEB开发中将数据库记录转换到EXCEL表格文件xls供下载 F#是什么语言 函数式编程语言F#:基于CLR的另一个头等编程语言 编程获取Google PR值方法集锦 第一个F#入门程序Hello world 在F#中将函数作为一等对象的值 PHP获取Google PR值 ASP.NET(C#)获取Google PR值 android.appwidget类剖析 Android NDK之JNI使用例子 急急急.请各位大虾帮帮忙啊! 請問語句的意思,謝謝 (Oracle8i)以SYSMAN登录控制台 斑竹9我! 求教高手!!!TEXTBOX与DATAGRID的问题 求助!关于用74LS181模拟8位机的资料!(散分啦,小弟急用啊!) 我的WINDOWS2003的DIRECTX 3D功能用不了,为什么? 如何用命令来修改设置计算机的ip,网关和dns等内容 不知道到那里问,借个人气了 托架的图标 散分! 如何建立一个这样的数据窗口? 上次未解决的问题(附源程序,及时结贴)(输入地址时http://ip/default.asp能正常使用,但是用http://ip则只能显示首页) 这个分页查询的SQL语句有什么问题?高分求教!!! 怎样求一个集合的子集? 我应该怎么做(项目经理请进,至少代表全国大部分公司的问题),一个年轻软件开发人员的问题 zzzzzzzzzzzzzzzzzzzz 高手指点迷津,如何更新数据库里的image字段 算法问题,再请教各位高手! 急急急,有关classpath 急!如何把picturebox中的内容保存成图片呢! Web Service中怎样验证身份? Web Service性能测试,欢迎评论,来者有分! 散分! 数据类型转换 ColdFusion的语言 - CFML win2003安装后,每个一秒种读一次盘是否正常 各位高手,最近在使用MASK PRO插件时碰到一个问题 x86汇编新手 星期六了,我还在工作....大家来帮忙看看。....很简单的问题 怎样在注册表里删除OFFICE 数据库不同,sql语句也有限制吗? 我在使用化境上传组件时碰到的问题,希望大家帮着看看,解决一下,高分求助 listview中的item能否变灰,也就是使某些项不能选 高分求各位高手急求!!!MP3问题 我的2k(PRO)我的电脑打不开,控制面版也打不开,其余的一切正常。这是为什么? 配置问题 关于上网,上传,二个大问题,高手请进,急! 一个打包问题 如何在asp里实现点一个按钮带动另一个软件的运行?急! 散分! 怎样将http下做好的网站,全盘转为https的.我准备买密匙的.想先测试一下. 如果判断当前时间是在某一时间段内? TX DATA SOURCES 數據源問題? 数据得导入和导出 给个好办法 反驳!“一位女生对男生追心仪女孩的建议”zz 请高手指点出我的小程序错误,谢谢! 菜鸟问题,这个combobox为什么不响应onchange事件?高手看看啊 高分求助 (100分) :求学生的平均分,并且排序输出成绩册!!!! 急!请问如何使用java语言获取mysql数据库的相关信息 我亲爱的爸爸作为联合国军事观察员,在执行维和任务中壮烈牺牲(缩句)亲爱的爸爸作为一名联合国军事观察员,在执行维和行动中壮烈牺牲(缩句) 怎样防止电工触电 用一支蜡烛作太阳,用一只小地球仪从西向东绕蜡烛运转,请填出相应的节气.1 ( ) 2 ( ) 3 ( ) 4 ( ) 悠悠球雪鳞锋多少钱 2.当某工地发生触电事故时,作为一名在现场的电工应采取什么应急措施 在物理模型中玻璃是不是光滑面是不是就没有摩擦力 也就没有μ 一个质量为45Kg的中学生的重量是多少N 电源开关老跳闸一般有几种原因 最好做过电工的能给我多点的解释 玻璃很光滑,为什么玻璃上不能滑冰? 今天有买了iPhone5S的吗?我也想也买一个也,但是我更期待iPhone6哦!iPhone5S的绯闻已经穿了很久,今天在易迅网终于看了他的庐山真面目了,还有iPhone5C,也不错哦,现在很纠结,我又想买5S,又想以后买6 有哪些字表示绿色、蓝色?越多越好 玻璃泡碰到容器的底和容器壁,玻璃泡为什么会损坏?拜托各位大神初二物理题 南朝四百八十寺 多少楼台烟雨中反映了什么现象出现了哪些文化成就这些成就在今天还有什么意义 山寨、山寨产品、山寨现象、山寨文化的关系如题.请不要随便复制过来.希望有识之士帮我分析下他们的关系.谁包涵谁、?或者先有什么再有什么?或者什么折射出什么?请不要再说百度百科里 我的一个插座,一个三孔的,一个二孔的,二孔的有电,三孔的无电,不知为什么? C++构造函数不能有返回类型定义一个圆柱体类模版,数据成员有圆柱体底半径,圆柱体高,成员函数有带参数构造函数,求圆柱体体积函数,求圆柱体表面积函数,要求成员函数在类外定义,主程序测 山寨现象是什么山寨机,山寨MP3…………都是什么啊? 请各位考过西班牙语DELE的前辈指点一下,我这个测试结果是不是要报考B2级呢? “南朝四百八十寺,多少楼台烟雨中.”它反映南北朝时期的什么现象?这现象在文化方面有哪些相关的文化成就这些成就在今天还有什么历史意义? 山寨行为是什么具体点的答案,. 断路器CM1L-225/4300 VDFB1-63/2P-C63 VDFB2LE/32/1P+N/C16 以及其下的In Id Td的各种字母含义解释其他常用住宅断路器的解释也需要 设计新手 山寨的意思. VF里的标定符号怎么规定,是拼音是输符号,还是英文时输符号?还有什么时候要空格? 西班牙语DELE B1水平,求初级翻译兼职工作,有介绍的翻译公司吗? 求视频:自制验电器 材料:玻璃杯、细线、铝箔、塑料笔杆(如何弄)急 “广播室”用英文怎么说? 地心引力的反作用力是什么?还是没有发现? 甲酸甲酯能和氢氧化钠反应吗 401 室的英文怎么说.如题. PPARα的靶标基因是什么 如何拆解冰魄悠悠球轴承上星期刚买了个冰魄回来,正想用ZIPPO清洗一下轴承,怎知轴承的另一边镶嵌死了在球上,自己又不敢用蛮力拆,希望有经验之士指教一下. 铜离子与明矾(硫酸铝钾)溶液的反应?将含有铜离子的蓝色透明溶液滴入透明的明矾(硫酸铝钾)溶液中,产生蓝色沉淀和无色透明的液体.请问这是什么反应?方程式怎么写? 求大神解答PPAR-r +/-这个是什么意思啊,是不是这个基因缺失?这文章里有PPAR-r +/-和PPAR-r +/+两种. 甲酸甲酯和氢氧化钠的水解反应中那个氢和氢氧化钠反应?为啥不是左面的氢啊? 为什么分子、原子化学性质不同如题 电解液是什么 () =>{}放入构造函数中是什么意思? 什么是山寨行为?解释下含义,还有就是表现 蒸馏水擦脸对皮肤有好处吗? 究竟什么叫化合价?究竟什么叫化合价呀?化合价的概念是什么?我理解了好久,还是理解不出.希望有一些简明清楚的文字能够使我理解. 家庭电路怎样连接在火线,零线中?我听别人说是左零右火,有人说是左火右零,到底怎样连啊?小灯泡,2孔插座,3孔插座怎样连接在火线,零线上. 蒸馏水喷脸上有什么做用 到底什么是化合价? 东方Project有多少人比藤原妹红强 请问导电泡棉的性能优点有哪些? 65要多重才算标准? 我是高二的学生 我们再说的电容器与电源连接时 U不变;电容器与电源断开 Q不变.这是不是在电容稳定后才成 9.用标记有15^N的一条双链DNA分子,在标记有14^N的培养液中进行两次复制,其后代的DNA分子单链中,含14^N和15^N的比值为?A1:1 B2:1 C3:1 D4:1 怎样选择调节系统中变送器的量程? 问几个常识问题,知道不知道的都看下 用转化的策略解决问题求阴影部分面积 假如大气中没有灰尘中,我们将面临怎样的情形呢?运用了什么说明方法 我要问百度知道知道不知道知道就知道不知道就不知道不要知道说不知道不知道说知道到头来知道变成不知道不道还是不知道天知道地知道百度知道知道若要问我知道不知道知道不知道也不 某收音机可变电容器的电容量为C1时无线电波波长是入1,当为C2时,对应的波长为入2,若把电容器调为C1+C2,则能收到电磁波的波长为?我知道正确答案咋写,我只是想问为啥不能这样写:入1/入2=T1/T 填空怎么写 今天要 急 1+1等于几的笑话 山寨的意思想要知道山寨的正确定义,不知道现在词典中有没有正规解释? 世界上有多少个国家和地区,多少个独立主权国家,其中联合国有多少个会员国,有几个常驻联合国观察员?具体的数量? 电工如何防止触电 哪里的导电泡棉最好啊? 故宫博物院一食堂发生持刀伤人事件 造故宫回应突发刑事案件 称公安部门正在日本众院委员会出国考察扎堆欧美 10外媒爆料超模米兰达可儿与奥兰多布鲁姆哥国小镇妇女发起“合拢双腿运动”促政日本众院委员会出国考察扎堆欧美 1060分和90分的差距 漏电断路器质量奥斯卡影后赞与查尔斯王子跳舞比“亲热曝快男好声音梦之声导师将同台演出阿根廷诊所弄错新生儿 经基因检测才各墨西哥逮捕一名毒贩 怀疑其牵涉多达7韩国“独岛日”举行军演宣示主权北漂办跑断腿准生证 感慨规定是管没有大众汽车宁波新工厂建成投产 年产将达韩国军警联合实施独岛防御训练 以抵御墨西哥逮捕一名毒贩 怀疑其牵涉多达7日本伊豆大岛因新一轮台风向2300人美媒:斯诺登仍掌握美针对俄中展开情报南京科委存在项目经费挪用现象 市民要武昌一高校今年171人因挂科留级 教成都亚非牙科命案宣判 母亲:希望看到@你@我广东茂名:500余民众聚集抗议建殡仪疑煤气泄漏引爆炸 两人重伤穗楼盘拿预售证需承诺不搞“双合同”后卫王皓献助攻租金太高 港一幼儿园停办[个论]陶短房专栏:阿富汗大选首轮投学习的误区和价值投资多生育未必能防“妇科癌”惠城已有22人 申请“单独二孩”九旬老兵长逝 半生渴望正名他不是便衣 是退役侦察兵“这里的东西都不想要了”水东街工地挖出600斤重古炮国内游讯给你好看钢铁巨人海鑫病危调查有业主称无票可投 物管说意见函已寄发他不是便衣 是退役侦察兵“微服私访”不是大考 应是日常功课平行进口车:搅动车市的鲶鱼?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘