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

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环境中调试通过。
将立体的ListView标题栏转换成平面式的标题栏 -VB资料 禁用窗体上所有控件 -VB资料 拷贝或移动列表框或组合框中的内容-VB资料 利用VB5开发ActiveX控件 利用VB三维面板控件设计流动条 浅谈用VB6.0编写BO程序 巧用Visual Basic的TIMER控件 VB取得控件绝对Top值 VB如何解决VB中的Grid 控件的打印问题 VB如果自定义 MsgBox 的按钮,标题等 VB如何创建数据绑定控件。 VB如何解决VB中的Grid控件的打印问题 VB如何强制文件对话框再次读取正确的磁盘? VB如何取得RichTextBox控件中光标所在行的值? VB如何设定 MsgBox 在若干时间之后若无回应則自动关闭? VB如何使用VB控件Commom Dialog VB如何用VB6写COM组件(二) VB如何用VB6写COM组件(一) VB如何在VB中使用Delphi的控件 VB如何在运行时动态增加控件 显示和隐藏鼠标-VB资料 VB用ActiveX Control Pad VB用API函数改进ListView 控件的显示效果 用VB6.0中文版进行DHTML程序开发 用VB编写标准CGI程序 用VB编写留言板 用VB播放FLASH动画 用VB开发进程管理软件 VB用WinSock设计Chat程序 运用MSChart,生成统计图形-VB资料 向文本框等等控件的系统右键菜单里追加自己定义的菜单-VB资料 刚毕业的不能报? .lib 文件到底是怎么回事?如何查看它的内容? 请问,下面的警告提示什么意思(关于sybase) 那位可以给我描述一下“代表”? 请问有WINsock编程高手么,帮我看一下下面的程序 紧急招聘PB程序员(成都) 关于产品序列号的问题……想了很久了。 这里有几个问题,能者请进! 请教VC项目开发经验 如何让下载的程序变成免费的? 请问有Pdf到Text的转化的源代码么? 能否让下载的程序变成免费的? 请问怎样才能自动复制文本框中的文本到剪贴板? 是否可用简体中文的VB开发翻体中文的应用程序? 使用JavaMail转发邮件 在servlet中是不是不可以引用其它的类中的函数.(这个类不是派生于HttpServlet) 为什么买书配送的光盘文件在BCB工程中打开后不让修改(打开前已转换为存档文件了)? 请教使用OPEN CLIENT 的一个小问题 索求算法 请问能否将下载的程序变成免费的? 现在学习C#不晚吧,:P 关于VB中控制运行实例的问题 请教关于DBGRid的问题。 请问在Java下如何实现文件压缩?有没有现成的接口或者压缩算法代码?多谢 这里下载C#电子书《C#教程》(中文 希望出版社) 我如何才能删除ORACLE中建立的用户??总是提示用户不存在或SQL第归错误等等!! CSDN灌水乐园的惊世大骗局!!CSDN灌水乐园的惊世大骗局!!CSDN灌水乐园的惊世大骗局!! 如何用简体中文VB开发翻体中文软件? 高分请教!!!! 一定加分!!!1111111 在打印或打印预览前如何获取报表页数 求助.希望有人帮忙!! 我用ACTIVE REPORT出了问题....相教 请问如何获得硬盘的序列号? 请问各位,有什么好的方法来为用户分配权限,要多少分就给多少? 我有一个www.cnjava.com,有没有人愿意要这个域名? 请问Delphi中关于fropro数据库的软删除问题!急用!谢谢! 当两个表用主键关联时,删除主表的一条记录,关联表对应的记录能不能自动删除(不用代码)? 大家来谈谈各自在制作网页时的css于inc的运用吧 小弟对Java及C#的一点看法-请大家指正! 高手请进,帮我看看这是什么意思?感谢非常 基于组件的三层应用程序怎么打包?200分相赠!!! 如何执行带OUT参数的ORACLE的存储过程 有谁做过矩阵奇异值分解的程序? 讨论:爱需要表白吗? 请教各位大侠:我用TNMStrm控件发送数据时,怎样实现定时连续发送?我现在发送一次成功,紧接着第二次发送就不行了,出现蓝屏. slide中的滚动条,有NM_RELEASEDCAPTURE事件,是响应mouseup,有没有什么事件响应mousedown的? 再送50分,求大家来讨论用存储过程建datawindow时应注意的事情。 我想做一个网页,实现文本分割,发送短消息! 那为老兄知道SCO OPENSERVER下面PHP的安装方法! 在asp中可不可以不用recordset来开发? 是否有好的ASP书籍 一个工程队计划3天修完一条水渠,第一天修了200米,第二天修了全长的五分之二,第三天修了前两天总和的一半,这条水渠长多少米? 工程队修建一条水渠,第一天修了180米.第二天修了全长的4分之1,第三天修的水渠的长度为前两.工程队修建一条水渠,第一天修了180米.第二天修了全长的4分之1,第三天修的水渠的长度为前两天 数学应用题:某一工程修一条路,第一天修了全长的二十七分之五,补充上面的:第二天修了余下的十一分之三,第三天修了第二天余下的六分之五,第四天修8千米,正好修完.求这条路的总长度 工程队计划三天修完一条公路,第一天修了全长的百分之六十,第二天与第三天修的长度比是3:5.已知第二天比第一天少修45米.这条公路有多长? 一支工程队要修一条水渠,第一天修了全长的5分之1,第二天修了全长的4分之1,第二天比第一天多修了25千米,这条水渠全长多少米?(注意单位) 工程队修一条路,3天修了全长的9分之2,多少天可以修完? 工程队计划3天修完一条路,第一天修了200米,第二天修了全长的2/5,第3天修了前两天总和的一半.这条路有几米? 修一条路 第一天修了全长的2分之1 第二天修了余下的2分之1,这条路还剩几分之几没有修? 工程队修一条公路,第一天铺了全长的五分之二第二天比第一天少铺三分之一,还剩210米没铺.这条路有多长? 甲队计划3天修完一条水渠.第一天修200米,第二天修全长的2/5,第三天修全长的一半.这条 水渠长多少米? 一条路100米,第一天修了这条路的2分之1,第2天修的是第一天的3分之1,还剩这条路的几分之几没有修 某工程队修筑一条马路,第一天修了全长的十分之三,第二天修了全长的五分之二,还剩630米没有修,这条马路全长多少米? 一个工程队计划修一条水渠,第一天修了九分之二,第二天修了二分之一,还剩200米没修完,这条水渠长多少米 一条路100米,第一天修了全长的二分之一,第二天修了全长的三分之一,还剩这条路的几分之几没修? 市工程队修一条路第一天修了全长的五分之二第二天修了全长的百分之二十五还剩154米没修这条路全长多少米 工程队计划修一条水渠,第一个月完成了全长的五分之二,第二天完成了全长的七分之三,这条水渠全长21km1.两个月一共修了多少km2.第二个月比第一个月多修多少km3.还剩多少km没修 一段路第一天修了二分之一,第二天修了剩下的二分之一,还剩几分之几没修? 市工程队俢一条路,第一天修了全长的五分之二,第二天修了全长的百分之二十五,还剩154m没修,这条路全长多少m 修一条水渠用了3天,第一天修了全长的25%,第一天比第三天少修21米,第二、三天的比是7:8,这条水渠长多少 一条路一百米,第一天修了二分之一,第二天修了余下的三分之一,还剩这条路的几分之几?只要算式! 工程队修一条路.第一天修了全长的百分之二十五,第二天与第一天所修的比是4:3,还剩500米没有修.这条路 修一条水渠用了三天第一天修了全长的25%,第一天比第三天少修21天第2、3天的比是7比8,这条水渠长多少米? 一段路,第一天修了二分之一,第二天修了二分之一,还剩全长的几分之几 修路队修一条公路,第一天修了全长的四分之一还多1.2千米,第二天修了全长的五分之二少0.8千米,这时还剩6.6千米没修,这条公路全长是多少千米? 长顺工程师三天修完一条水渠,第一天修了全长的25%,第二天与第三天的比是7:8,第一天比第三天少21水渠多长? 修一条水渠,第一天修了全长的十五分之二,第二天比第一天多修了全长的20分之3,还剩几分之几没有修? 某工程队,第一天修了600米,第二天修了全长的20%,两天共修了全长的1/2.这条公路全长多少米? 某队修一条水渠,第一天修了全场的25%,第二天与第三天的比是7:8,第一天修的比第三天修的少21米,这条水渠全长多少米? 修一条长五分之四米长的水渠,第一天修了全长的三分之一,第二天修了全长的五分之二,还剩几分之几没有修把全长看做单位一来减,还是用五分之四减 某工程队修路,第一天修了三分之一,第二天修了50米,两天共修了全长的百分之50,这条路有多长? 工程队修一条路,第一天修了240米,第2天修了余下的40%,其余的第2天修完,已知第三天修的与全长的比是1:3.这条路有多少米 某队修一条水渠,第一天修了全场的25%,第二天与第三天的比是7:8,第一天修的比第三天修的少21米,这条水渠全长多少米?不要用2个未知数方程 修一条水渠,第一天修了全长的十五分之二,第二天修了全长的十分之一,还剩几分之几没有修? 某工程队修一条路,第一天修了全长的27分之15第二天修了余下的11分之3,第三天修了第二天余下的6分之5,第四天修了8千米,正好修完,求这条路的长度. 工程队修一条路,第一天修了全长的25%,第2天与第3天修的比是7:8,第一天比第3天少修21米,这条路全长多少 修一条长5分之4米长的水渠,第一天修了全长的3分之1,第2天修了 全长的5分之2还剩几分之几没有修 工程队两天修完一条路,第一天修了5分之3千米,比第二天多修了8分之1千米,这条路 工程队修一条路第一天修的比全长的三分之一少100米第二天修了300米两天共修了全长的40%这条路全长多少米 一条路100米,第一天修了这条路的12%,第二天修了余下的13%,还剩这条路的几分之几没修? 某工程队修一条路,第一天修了全长的27分之5,第二天修了余下的7分之3,第二天修了8千米,求这条路的长度.尽量用算术法,不然我不懂,也可以用方程, 工程队3天修一条水渠第一天修全长的25%第二天与第三天修的比是7:8第一天比第二天少21米这水渠全长多少 一条路长100米,第1天修了1/2,第2天修了1/3,还剩这条路的几分之几没修? 工程队修完一段公路,第一天修了全长的30%,第二天修了150米,第三天修了全长的2/5,第三天正好完成,这段公路长多少米 工程队修一条水渠,第一天修了全长了四分之一,第二天修了全长的百分之三十,还剩下900米没修.这水渠全长 工程队修一段160米长的公路,第一天修了全长的1/5第二天修了全长的3/8,还剩全长的几分之几没有修? 工程队修公路,第一天修全长的4分之1,第二天修150米,第三天修8分之1,三天完成,这段公路长多少米 工程队修一条水渠,第一天修了全长了四分之一,第二天修了全长的百分之三十,还剩下900米没修水蕖全长不要方程 工程队修一条长3/4千米的道路,第一天修全长的1/4,第二天修全长的1/3,还剩全长的几分之几没有修完 工程队修公路,第一天修了公路全长的8分之1,第二天修了后已修的长度与未修的比是3:5,工程队第二天公路修了全长的几分之几?(用比例来列)2.一个零件长2cm,它的长度与模型的长度比是1:5,模 工程队修一条水渠,第一天修了全长了1/4,第二天修了全长的30%,还剩下900米没修.这条水渠全场多少米? 工程队修一条公路,第一天修了全长的3分之1,第二天修了80米,还剩86米没有修,这条公路长多少米? 某个工程队修一条路,第一天修了全长的3分之一.第二天修了全长的4分之一 工程队修一条水渠,第一天修了全长的25%,第二天修了全长的30%,还剩下900米没修,这条渠全长多少米?今天就要 工程队要修一条长200米得路,修了一段后还剩63米没修.已知的米数占 条路的几分之几 工程队修一条公路,第一天修了公路全长的1/8,第二天修了后,已修的长度与未修的比是3:5,工程队第二天公路全长的几分之几?(用比例解) 工程队修一条水渠,第一天修了全长的15%,第二天修了全长的40%,还剩下900米没修,这道水渠全长多少米 工程队修一条路已经修了5分之4千米,剩下的是已修的8分之7,这条路长多少千米? 某工程队修一条公路,第一天修了全长的5分之1,第二天修了全长的8分之3,___________.这条公路长多少千米1、第一天修了3.2千米.列式:.2、两天一共修了9.2千米.列式:.3、第二天比第一天多修2.8 某工程队挖一条水渠.第一天挖了全长的5分之1,第二天又挖了全长的5分之1,第三天挖了全长的6分之1.这条水渠(要算式) 应用题:工程队修一条路,已修了800米,正好占全长的9分之4.这条路全长多
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn