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

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环境中调试通过。
福利来了,爱拍原创免费为iOS版手游制作宣传视频 【工具推荐】Zrender——轻量级Canvas类库,让绘图大不同! 基于Docker和CoreOS的开源PaaS平台——Deis v1.0正式发布! 微软宣布.NET开发环境开源 支持三大操作系统 爆发吧,诺基亚!前员工开发物联网新设备 详解Visual Studio Emulator for Android,微软的Mobile First! HPC China 2014完美落幕,AMD Firepro荣获好评! 揭秘微软的Container技术之一Drawbridge AWS副总裁谈数据中心网络打造 【最具价值CTO评选秀】出门问问CTO雷欣:从技术极客到核心管理的秘密 《近匠》APICloud:“云”+“端”一体的移动API提供者 Oculus移动SDK发布!John Carmack操刀、集成Unity 4.5 11月15日深圳见!深圳微信开发者大会公布全部议程 参与2014中国大数据行业大调查 BDTC门票等你拿 HTML5规范尘埃落定,5个开发工具推荐 盘点最受开发者喜爱的Android 5.0 Lollipop API IoE Day侧记:想开发智能硬件?先要弄明白这几个问题 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二) 微软承诺所有Lumia WP8设备将升级至Win10,用户会买账吗? 周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 中国大数据六大技术变迁记 【最具价值CTO评选秀】当当网CTO熊长青:结合行业及技术发展,规划技术方向 社交颠覆传统,环信技术交流沙龙纪实(组图) 揭秘经典案例炼成之道 微信开发者大会精华回顾 从一家电子商务网站学到的经验教训 【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! WEB初级应用问题 DIALOGBAR问题 请想报考明年的网络设计师的朋友进来聊聊 Oracle面向对象特征讨论,请进! 我学会VISUAL C++ 到底要多少时间 线程调试问题 大家一起进来讨论oracle和sql server的日志哦 请指教如果设置服务器端COM组件的权限,使终端可以访问到?分数好说啦,急,高手快帮忙! 如何把程序嵌入到widows Expolore 中? 今天心情特好!散分 在vc下怎样调出window下的“打开方式”对话框,他是类还是控件!请高手指点! 一个门外汉的问题~~~~ 谁知道windows共享密码如何算的 vc中asm怎么不執行? 在开始菜单点右键,拉出的菜单里的内容,怎么添加删除?? 帮忙找一个和VB的属性区一样的代码,控件或类库均可。 Word 中字体的问题 我买了一台SLE4442读写器, 为什么不能写 谁用过FAST REPORT 请求帮助 realplayer中文件菜单栏中的以看过的文件名,怎么删除??? php如何改写或者是添加一个cron的命令参数给linux服务器? SQL Server 能制作表单和报表吗?????? DirectDraw页面格式问题(两个)。答对100分绝对送上,从不食言!(附源码) VC++中的内部交互调试器在哪? 人邮版的C++面向对象高效编程如何? realplayer中文件菜单栏中的以看过的文件名,怎么删除? 如何实现真正的无标题栏的拖动? 用"select top n"取了前n纪录后,要再接着取n+1至2n条纪录,接着再取2n+1至3n……,这种取法要怎样实现呢? 如何在Excel中编制一个宏? 如何得知程序的一个实例正在运行? 送分了,送分了,虽然不多,但天天有! 为什么select count(*) from test 时,提示表或示图不存在!!! 请问如何设置mp3文件的在线播放?? 请问在内部局域网正常的情况下,打印机无法共享(共享以后没有效果)的主要原因是什么?谢谢! ===我对Linux上的Oracle8.1.7.0.1操作的时候只读,为什么啊???==== 请给我一个GetCurrentDirectory使用实例, 问一个深入MFC的简单问题 请问有关delphi项目编译的一个小问题。 各位,那里有VisualAge for Java4.0下在?我从ibm的网站上下载了,但是安装不了,说是语言不对! shcv.dll 编译不过去!!!!! have a test!have a test!have a test!have a test!have a test!have a test!have a test!have a test! mysql 结果中再次查询如何才能实现呢 pc2phone java支持byte[] a = String.getBytes("iso-8859-1");转换吗? c语言中关于对windows命令调用的语法、命令及其格式。 怎么样捕捉数据库连接出错的信息?? 在SQL语句中,如何获得一汉字字段的字节长度,而不是字符长度?如“测试”返回4,不是2 如何建树 winsock.dll提供的都是什么函数?如果它提供的是winsockAPI,那么winsock32。lib提供的又是些什么?它们重复吗? FormatDateTime这个函数的日期间的字符不支持汉字,怎么解决? 在物理公式中:电流是电压除以电阻计算出来的吗? 下列各数中,与2倍根号3的积为有理数的是?2+根号32-根号3-2+根号3根号3 m、n为系数,且mx+2xy-x与3x^2-2nxy+3y的差不含二次项,求m^2-3n的值 电压 电阻 电流 之间的公式计算什么的 还有一些功率 什么的公式 例如:R=IU 什么的 列全啊求求了 最好列 清楚一点 物理电学给我学的都快阳痿了 如果一个数与根号2相乘的结果是有理数,则这个数的一般形式是什么? 用累加法和累乘法, 3.56万改写成用“一”作单位的数是() 若一个数与根号3的积是有理数,则这个数的一般形式为 请教各位高中数列中在什么情况下使用累加累乘法如题 正项等比数列an的前n项和为sn,a1=2,且a2,a3的等差中项为s2,求an的通项公式正项等比数列an的前n项和为sn,a1=2,且a2,a3的等差中项为s2,1.求an的通项公式2.设bn=log2an,求数列{bn}的前n项和Tn 求解混联电路各点电压及电流,请详细列式并讲解思路. 风机电动机用变频器启动,启动电流能降低多少? 如右图,大正方形CDEF的边长是16cm,四边形ABCG是正方形.求阴影部分面积 若多项式x的二次方+ax+8和多项式x的二次方-3x+b相乘的积中不含x的二次方.x的三次方.项.求a.bkuai 22kw的电机连接变频器 启动电流是多大 选多大的电机保护开关合适 要是用星三角启动 该怎样和变频器连接 如图,正方形ABCG的和正方形CDEF的边长分别为a、b.(1)用含a,b的代数式表示阴影部分的面积; (2)当a如图,正方形ABCG的和正方形CDEF的边长分别为a、b.(1)用含a,b的代数式表示阴影部分的面 如果关于x的多项式x^4+4x^2-1/2与3x^n+5x是同次多项式,求1/2n^3+2n^2-3n-4的值, 电动机起动时和正常工作时的电流哪个大?为什么? 串并联电路谐振原理及电路电流、电压、电抗计算公式是什么?混联电路不单是串联或并联,要在一起的电路 已知:多项式mx^4+(m-2)x^3+(2n+1)x^2-3x+n中不含x^3和x^2项,求出这个多项式,并求当x=-1时代数式的值要快啊~~很急~~好的加分 20分之9的分数单位是几,化成用百分之一做单位的数是几 若函数f(x),g(x)分别为R上的奇函数、偶函数,且满足f(x)-g(x)=e^x,则g(0),f(2),f(3)的大小关系为_____. 串联谐振为什么是过电压?并联谐振为什么是过电流? 三相异步电动机的三相电流不平衡度在10%以内,这个比值是不是一相与三相平均值的比值? 380V配电柜上三个电流表都显示100A怎样算他功率?是P=1.732乘电流i乘电压380V在乘功率因数吗 0.8的计数单位是( ),把它改成用0.001作单位的数是( ) 请问:三相电流不平衡许可范围是多少? 四边形abcd是边长为12cm的正方形,e是正方形的中心f是bc边的中心求阴影部分面积 如何证明根号2不是有理数? 已知关于x的多项式(mx+1)(-3x+4)展开后不含x项,求m的值 正方形ABCD边长12cm,阴影部分面积24平方厘米,求梯形ABCDE的面积. 请在这里概述您的问题等比数列中,a1+a2+a3=18,a2+a3+a4=-9,且Sn=a1+2a2+3(a3+a4+…+an),则limSn= 多项式(mx+4)(2-3x)展开后不含x项则m=? 正方形ABCD的边长是12cm,且E是DC的中点,求阴影部分面积. 如图,正方形ABCG的和正方形CDEF的边长分别为a、b.(1)用含a,b的代数式表示阴影部分的面积 多项式(mx+4)(2-3x)展开后不含x项,则m= 等比数列an,aq 如图,正方形ABCG和正方形CDEF的边长分别为a,b.用含a,b的代数式表示阴影部分的面积,当a=4,b=3时,阴影部分的面积为多少? 多项式(mx+8)(2-3x)展开后不含x项求m的值 甲乙两数互为倒数,把甲数缩小10倍是4分之1,原来两数的和是 如图,正方形ABCD和正方形FCDE边长分别是10厘米和12厘米,求阴影部分的面积. 有一列数:1,1,2,3,5,8,13,21,34……,第2007个数被7除的余数 下图甲,乙都是正方形,a=12cm,b=10cm,求阴影部分面积 并联电路个支路两端的电压( ),都等于( )电压.用公式表示是:( )?填空题,谢谢!. 若多项式(mx+8)(2-3x)展开后不含x项,求m的值 一个电机功率是3KW.电压是380V,电流是6.3A.这个电流数是怎么求出来的 把0.9改写成以0.001为单位的数是什么? 把最小的两位数与最大的一位数的和缩小到原来的百分之一是多少? 求下面图形中阴影部分的面积,上底是10cm,下底是12cm,高是8cm. 把0.3改写成0.01为单位的数是()改写成0.001为单位的数是() 关于EXCEL表格中累加公式我想做一个表格,一个行中A1是原始输入的数值如5,B1是最后结果5,当我第二次在A1中输入新的数值时如8,B1的最后结果就是13,第三次在A1中输入数值继续累加,B1也发生变化 电压 电流 电阻的关系?什么公式? 如上图,四边形ABCD是长方形,AB=5cm,AD=8cm;四边形GECF是正方形,EC=3cm.求阴影部分的面积. excel表格合并同类项并累加 方法A B C D E货号 名称 数量 价格 折后价001 甲 1 2 1 002 乙 2 2 1003 丙 2 1 0.8003 丙 2 2 1 001 甲 1 1 0.8 计算后需要这样A B C D E货号 名称 数量 价格 折后价001 甲 2 3 1.8002 乙 已知数列{an}的前n项和为Sn 1若数列{an}是等比数列,满足2a1+a3=3a2.a3+2是a已知数列{an}的前n项和为Sn1若数列{an}是等比数列,满足2a1+a3=3a2.a3+2是a2.a4的等差中项,求数列{an}的通向公式 正方形ABCD,AB=6厘米,EC=10厘米.求阴影部分的面积? 6.4里有()个0.1,改写成以百分之一为单位是() 填什么?快!快!快!我急着写作业! 分之一次幂怎么算 下列各数中,根号1,根号2,根号3……,根号2010,有理数有多少个?怎么解答出来的 我要的主要是过程及思路 已知m、n为系数,且mx^+2xy-x与3x^-2nxy+3y的差不含二次项,求m^-3n的值
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn