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

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环境中调试通过。
智能手表是个尴尬的产品 屏幕缺陷一枪毙命 看15岁的谷歌的前21位员工现在都在做什么 分析师:三星将失去中国市场份额的头把交椅 5款工具助你写出更好的Java代码 Noitom:"中国创造"的动捕技术 缘创派:帮助技术人员寻找创业伙伴 Nginx创始人Igor Sysoev解读Nginx的发展史 对女性友好的编程语言 ISC2013专家云集,畅谈全球网络安全 CTO俱乐部第109期下午茶:数据库之分久必合,合久必分 CloudConvert:支持移动应用的格式转化服务 Angular.js VS. Ember.js:谁将成为Web开发的新宠? 斯卡利沉寂多年后首谈乔布 他的离开错在董事会不在我 CTO如何避免决策失控(二):遭遇棘手问题的七种迹象 微软面向开发者提前发布Windows 8.1 安抚不满情绪 PostgreSQL 9.3发布,可靠性、可用性获得较大提升! Web设计的新宠儿:卡片式设计 LSI:从“计算”架构到“数据流”架构的变迁 [开源推荐]TurboGears:一站式的Python开发框架集合 腾讯云公测终究还是来了 BAT云大战将开启? iOS 7将从这三方面影响IT界 超越Google,他企图将整个互联网塞进1台电脑 2013互联网安全大会议题先睹为快之CSA中国理事赵粮 移动建站工具(二):分秒钟DIY一个移动网站 2013上半年中国移动互联网报告,在线完整版 iOS开发者必备:九大设计类工具 已到“迟暮之年”?微软投资者提议两“救世主”外部候选 【SDCC讲师专访】Joseph G. Brown:云带来的软件销售方式变革 用户界面设计攻略:设计师需注意的九大要点 Google Glass的竞争对手来了:看YC演示日的五款新孵化项目! GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构 如果自己创建一个类,在这个类中想调用当前CXXVIEW类中的函数该如何办? P:Pointer? 数据库连接问题? 如何在菜单中显示图片?谢谢! 在线等待!急,tomcat中文问题 工作很非常特别烦心,散分 如何监控网络中的打印 请问在COMCAT中如何更改根目录的路径 java 中的double类型,在Oracle数据库中应该对应的是什么类型? 怎样作才能不让用户随意更改系统时间和日期? 关于单击和双击的问题 请问一个关于GB要转换成日文的Shift-JIS内码的问题 请问一下这个字符串什么意思? 在ASP.NET中怎樣讀取通過用XMLHTTP Send過來的XML數據包(一個問題50) 关于IrDA在WINDOWS/NT/XP下的编程实现 一定给分啊,快点进来看看阿 ! 帮忙写个SQL语句。 静态文本框里的文字如何调整其大小? store procedure类型 数据窗口问题 编译器参数,在线等待 求sql 如何用BUTTON按钮,将一个窗体文件关闭? 非常简单的付值问题.火急,再线等待,马上送份 调用RasDia();第一次拨号成功断线后再拨就返回错误字符终止连接为何代码如下: 怎样能编写用于用ie注册邮箱、论坛账号时自动填表的软件 资源文件的问题! 一个挑战斑竹的问题!!50分 如何把压缩文件(*.rar或则*.zip)和word文档存到Acess数据库啊??? 如何可以知道访问我的网站的用户来自哪里? 关于SQL的问题 这对话框我如何去掉 asp.net 能否运行在Solaris系统下,参与者有分 c#请求援助 int a 除以 int b 取他们的余数用C#该怎么写啊?谢谢 求救!显示后台数据,在线等待!等…… jsp中的数据库问题,求教!!急 刚学数据库,弱智问题,高分赠送! 这个查询怎么写? 关于表生成文本文件遇到的事情,急 InstallShield Professional Standard Edition 6.30 英文版的下载(高分:200) 寻一男友:发展方向——>老公 我用serv-u,客户端访问为什么没有用户登陆窗口啊? 脚本验证datetime要准确点的 请问,想做出象Protel(Tango)作图效果的程序,如何下手呢? win API函数的区别(win xp 和win 2000)高难度!! 那儿有winsock.pbl 进入系统的速度变慢????在线等待 当 AllowPaging 设置为真并且选定的数据源不实现 ICollection 时,AllowCustomPaging 必须为真,并且 ID 为 DataGrid1 的 Data 怎么提高搜索速度? 如何printScreen并获得这个图片? 如何用SQL格式化一个IP地址?我得到的IP地址是一串数字,想显示为255.255.255.255那样的样子。 为什么别人总抄我的作业,却不给我抄 谁帮我写英语作文?小弟我重谢、写的好积分再加!以“Why a sense of humor is important”为题,写一篇100词左右的短文.提示如下:1.幽默能体现个性.2.幽默有益于身心健康.3.幽默能融洽与他人的关系. 感动中国人物的故事 作文 550字 谁知道抄作业的速度和做作业的速度是几倍关系? 谁能帮我检查这篇英语作文啊,如果无错小弟必有重谢The Commander Fort Henry of the FortHenry was very angrily,he accuse Ashley is accomplice.Ashley was Imprisoned for 8hour.Ashleyemploy John for his lawye.Henry Dundas employChief J 中国的三大丘陵有那些 成了写成比喻句 本人考托福 今天写了一篇作文 大神看看能得几分,哪里可以改进的?Many teachers assign homework to students every day.Do you think daily homework is necessary for students?Use specific reasons and details to support your answer. 有什么适合女生唱的英文歌?最好是有创意的,比如cups那类的~`星期一就要在英语课上表演了.就是课前.不要太长,好听一点 自动扶梯每个台阶的轮子是怎样的? 小明和小强原有图画纸之比是4:3,小明有买来15张,小强用掉了8张,现有的图画纸之比是5:2,则原来他们各有多少张? 李华读一本书,第一天读了全书的1/5,第二天读了全书的1/3,这是时还剩350页 ,这本书一共有多少页? 如何解决家长和孩子之间的矛盾冲突? 假如给我三天光明作者是谁? 以“守候”为话题的作文怎么写?只需提纲!提纲格式参照问题补充一.标题二.中心论点三.开头(必须是一整段文字,不能概括)四.主体.1.分论点 论据 说理方式 2.分论点 论据 说理方式 3.分论 你和老师之间发生过矛盾冲突吗?事情是怎样的?事情是怎样解决的? 假如给我三天光明作者 超市买的瓷茶杯怎么检测是否含有有毒物质?如何消毒? 如何拒绝别人借作业 《反对邪教,崇尚科学》征文五一回校要交 中国的三大平原 怎样借别人抄作业别人会出高价 急需《崇尚科学 反对邪教》的征文, 杯子怎样消毒 已知角α,β的顶点在坐标原点,始边与x轴的正半轴重合,α,β∈(0,π),角β的终边与单位圆交点的横坐标是-1知角α,β的顶点在坐标原点,始边与x轴的正半轴重合,α,β∈(0,π),角β的终边与单位圆交点 三角方程(2cosx-1)(2sinx+3)=0的解集为 新买的白瓷杯子怎么消毒还有 可以盛沸水吗 用不用每次盛沸水的时候先温一温杯子? 已知角a的顶点与原点重合,始边与x轴的正半轴重合,终边与单位圆的交点p在直线5x+5y-1=0上则sin2a=? 三角方程2sinx+1=0的解集是 目前,普遍使用什么消毒茶杯?A.煮沸 B.高压蒸汽 C.红外线 D.速消净 直角坐标系中角α的顶点是原点,始边与x轴正半轴重合,终边交单位圆与点A,α∈(π/6,π/2).将角α的终边按逆时针旋转交单位圆与B,记A(X1,y1)),B(x2,y2).(1)若x1=1/3,求x2=?.(2)分别过A,B作x轴的垂线垂足 三角方程2sinx=-1的解集是?三角方程,急 关于初三离别的作文 小红13分钟打了996个字 小明12分钟打了936鸽子个字,怎么列式 求三角方程2sinx+1=0在[0,2π]范围内的解集 作文提纲,根据以下一段话,列作文提纲.“华盛顿走上大街,挥动礼帽,向群众致意.人们依依难舍,不愿离去,跟随他的马车一直走到他的寓所门前,这是任何语言也难以描绘的情景,这是任何人为的 用一张矩形的纸,折成一个直角三角形,使其中有一个角是30度,请问如何折? 小明和小红以同样的速度打字,小明打了2分钟,小红打了5分钟,小红比小明多打了33个字,小红和小明每分钟各能打多少字? 已知x,y,z是一个三角形的三个内角,求三元方程2cosx+2cosy+2cosz=3的所有解 用矩形纸折出一个直角三角形并使它的一个锐角是30度画出折痕,给证明 一个朋友有人找我抄作业,我又不好拒绝,怎么办?不是一次了,几乎每天都打电话抄我的,我又不好拒绝,毕竟是朋友.但是她没完没了,而且有时我还因为告诉她作业而耽误时间写作业,结果被我爸 位于我国地势第二级阶梯上的地形区是 A阴山山脉,吐鲁番盆地 B武夷山山脉,四川盆地 如何将A4纸折成一个角为三十度的直角三角形 小明和小红以同样的速度打字.小明打了2分钟,小红打了5分钟,小红比小明多打33个字.小红和小明每分钟各能打多少个字? 描写泰山的语句 充电电池充电的时候是将什么转化为什么,工作的时候是将什么转化为什么? 如何婉转拒绝被别人抄作业 含有昆虫的成语 幼教怎么样就可以成为早教 一个直圆锥和一个直圆柱底面积和高都相等,已知直圆锥的底面周长是18.84厘米,高是21厘米.求直圆柱的体积是多少立方厘米快快快快快快快快快 崇尚科学,反对邪教 征文 如何解决幼儿教育小学化问题? 小明和李强原有的画纸张数之比是4:3,后来,他们图画纸之比是5:2,原来两个各有多少张图画纸?是不是少了条件? 老师有100张面值50元和20元的人民币,一共有4100元,50元和20元的人民币各有多少张? 做幼教好还是早教好呢? 小明和小强原有的图画纸之比是4:3小明又买来14张,现有的图画纸之比是5:2,问原来两人各有多少张图画纸?不要用方程 中国的三大平原是什么?主要山脉和主要丘陵呢? 如何让别人不抄你的作业?我是班里的英语课代表,英语成绩又名列前茅,就经常有人来问问题,我也告诉他们,但有一个人,经常找我要英语作业,我说没写完,他仍然找我要,没办法,我心肠软,没有 小明和小强原有图画纸张数的比是4:3,小明又买来35张,现在两人的张数比是5:2,原来两人各有多少张图画纸?急啊 算术法 中国三大丘陵包括哪些? 美为击毙塔利班头目辩护 称与巴基斯坦美联储官员称不急于缩减购债 将取决于美澳科学家呼吁 研发更安全核能替代矿路透社:黑市汇率在朝鲜大行其道推特调高IPO发行价区间南京富二代杀妻案庭审结束 被告人愿赔日媒:中国和日本被美国列入“重点监视台向美购阿帕奇战机抵台组装测试(图)台向美购阿帕奇战机组装过程曝光(组图克里急赴中东安抚盟友沙特中国梦惠及非洲英超市香蕉出剧毒蜘蛛 全家躲出三晚消美海军一教练机坠毁 两飞行员受伤送医曝孙杨所载女子为新女友 已与大5岁空独家:小沙丘 大文章——本网记者探访韩国总统朴槿惠赴英访问 重点商讨经济美一T-45C“苍鹰”教练机坠毁 机叙政府不参加日内瓦会议 称不会参与交日本拟造两艘宙斯盾护卫舰 将搭载最新美媒:28%美国人视中国为全球头号经马来西亚保安现状存隐患 保安员过半是小方,这个世界太危险内需依然疲弱拜尔口腔签约ICOI 为申城种植牙发“百日千里”青春酷跑挑战赛上海交大站再见,人间四月天姑嫂树片区停水NBA等待着一个冷门竞争强,公交想招赚客流完美复仇后 彭帅遇小威扮靓最美妈妈 享悠闲下午茶峨眉山金银币 行情看涨屈臣氏开设首间婴幼儿概念店有便血应检查 是痔疮还是直肠肿瘤东京地震 国乒淡定银行系宝宝脱颖而出重基础 讲实效 创优质餐饮消费增速 将继续放缓“众筹”走进绿地国际金融城王伟平书法展匠心尤文提前三轮夺冠无胜败非好戏
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘