CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

如何定制自己的文件如.ttm,.prp等图标(急)

楼主icat2002(icat2002)2003-09-04 19:45:50 在 VB / API 提问

情大牛指点一二。//bow 问题点数:100、回复次数:2Top

1 楼rainstormmaster(暴风雨 v2.0)回复于 2003-09-04 20:24:50 得分 100

VB:在Windows操作系统中改变文件打开方式    
  张建军   滕明贵   韩莹   (11/26/1999)  
     
      在Windows   95/NT/98操作系统中改变文件打开方式的问题,又可称为改变文件类型关联的问题,即把某类型(扩展名)的文件与某应用程序关联,例如通常当双击*.txt文件时系统自动调用Notepad.exe。本文介绍利用Windows注册表编辑器Regedit.exe手工或编程改变文件打开方式的方法,并提供程序实例。    
   
    一、基本思路:    
   
    1、注册表编辑器Regedit.exe是用于更改系统注册表设置的高级工具,包含了关于系统配置及运行的重要信息,默认访问路径为C:WindowsRegedit.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文件的图标;shellopencommand,右侧显示栏内“C:WINDOWSNOTEPAD.EXE   %1”为打开*.txt文件的应用程序名称及参数。  改变打开文件方式的方法(例如用VISIO打开*.exc文件):    
    ◆手工:打开系统注册表,在HKEY_CLASSES_ROOT下找到.exc及另一主键名,找到此主键,将shellopencommand右侧显示栏内“C:WINDOWSNOTEPAD.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+“shellopencommand”,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+`shellopencommand`,``,`c:visio.exe   %1`);    
       finally    
       MyRegistry.Free;    
       end;    
       ShowMessage(`改变文件打开方式成功!`);    
    end;    
   
    4、按F9运行程序,在简体中文Windows95/NT/98、Delphi3.0/4.0环境中调试通过。    
   
   
     
  Top

2 楼icat2002(icat2002)回复于 2003-09-04 23:19:45 得分 0

非常感谢大侠。确实给我了一个像样的提示。Top

相关问题

  • 转化图标文件
  • EXE文件的图标
  • 文件的图标问题
  • 图标问题,如何提取图标文件里的图标?
  • 如何取得文件的图标?
  • 怎样刷新文件图标
  • 如何刷新文件图标
  • 如何正确读取文件图标?
  • 如何修改exe文件的图标?
  • 有关文件夹图标的问题!

关键词

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

得分解答快速导航

  • 帖主:icat2002
  • rainstormmaster

相关链接

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

广告也精彩

反馈

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