CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

怎样改变文件的打开方式

楼主figo1209(水之鱼)2003-10-01 11:21:08 在 VB / 基础类 提问

我想在程序里动态选择文件的打开方式。例如"dwg"文件本来使用AutoCad打开,我想在程序里使用IE来打开,不知怎么实现? 问题点数:0、回复次数:2Top

1 楼Vcar(阿猫)回复于 2003-10-01 12:41:41 得分 0

在注册表里面修改:HKEY_CLASSES_ROOT下面有文件扩展名,其缺省值指向了一个描述性的主键(也在HKEY_CLASSES_ROOT下),在那里可以指定自己要的动作。  
  访问注册表用api,在api   view里面找,msdn里有说明。  
  Top

2 楼rainstormmaster(暴风雨 v2.0)回复于 2003-10-01 13:23:24 得分 0

如何在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环境中调试通过。    
  Top

相关问题

  • 如何改变文件默认的打开方式!
  • 怎样改变文件的打开方式?
  • 急求!如何改变WORD文件双击打开时的关联方式?
  • 改变文件缺省打开位置??????????
  • 文件的"打开方式"问题
  • 如何修改文件打开方式?
  • ppt文件的打开方式
  • 已什么方式打开该文件?
  • Random方式打开文件,如何在文件末尾添加??
  • *.VOS文件和*.VAS文件的打开方式?

关键词

  • 文件
  • visio
  • 模块
  • myregistry
  • myreturn
  • hkey
  • 注册表
  • osregopenkey
  • regsetstringvalue
  • byval

得分解答快速导航

  • 帖主:figo1209

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo