文件类型与图标关联

zhonglingyu 2010-06-21 03:37:08
一种文件类型和图标是怎么关联上的呢?
我做了一个软件,能生成.xxx类型的文件,并且该文件有特别的图标。遇到两个问题:
1、我卸载软件后,生成的.xxx类型的文件图标仍然存在。应该显示默认图标啊?怎么去掉关联?
2、我将我的软件安装到一个从来没有安装过该软件的电脑上,安装成功后,从另一电脑上拷贝一个.xxx类型的文件过来,发现该文件显示默认图标,不是软件给与的特别图标,并且双击该文件,也不自动与软件关联起来,而是弹出让你选择程序的窗口。

...全文
526 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleplane 2010-07-13
  • 打赏
  • 举报
回复
给一个函数
参数说明:
strExtension 扩展名类型 比如"txr"
strApplicationName 关联程序的路径 比如"C:\\program files\\may app\\a.exe"
strRunKey 双击运行时的参数
strDefaultIcon 默认图标的路径 比如"C:\\program files\\may app\\a.ico"
strDescription 文件类型描述 比如"a类型文件"

BOOL RegisterFileRelation( const CString& strExtension,
const CString& strApplicationName,
const CString& strRunKey,
const CString& strDefaultIcon,
const CString& strDescription )
{
HKEY hRegeditKey ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strExtension, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strExtension, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

RegSetValue( hRegeditKey, _T(""), REG_SZ, strRunKey, strRunKey.GetLength()+1 ) ;
RegCloseKey( hRegeditKey ) ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strRunKey, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strRunKey, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

RegSetValue( hRegeditKey, _T(""), REG_SZ, strDescription, strDescription.GetLength()+1 ) ;
RegCloseKey( hRegeditKey ) ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strRunKey, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strRunKey, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

CString strRegedit ;

strRegedit.Format( _T("%s\\DefaultIcon"), strRunKey ) ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

if ( strDefaultIcon.IsEmpty() )
{
strRegedit.Format( _T("\"%s\",3"), strApplicationName ) ;
}
else
{
strRegedit = strDefaultIcon ;
}

RegSetValue( hRegeditKey, _T(""), REG_SZ, strRegedit, strRegedit.GetLength()+1 ) ;
RegCloseKey( hRegeditKey ) ;

strRegedit.Format( _T("%s\\Shell"), strRunKey ) ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

strRegedit = _T("Open") ;

RegSetValue( hRegeditKey, _T(""), REG_SZ, strRegedit, strRegedit.GetLength()+1 ) ;
RegCloseKey( hRegeditKey ) ;

strRegedit.Format( _T("%s\\Shell\\Open\\Command"), strRunKey ) ;

if ( RegOpenKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
if ( RegCreateKey( HKEY_CLASSES_ROOT, strRegedit, &hRegeditKey ) != ERROR_SUCCESS )
{
return FALSE ;
}
}

strRegedit.Format( _T("\"%s\" \"%%1\""), strApplicationName ) ;

RegSetValue( hRegeditKey, _T(""), REG_SZ, strRegedit, strRegedit.GetLength()+1 ) ;
RegCloseKey( hRegeditKey ) ;

return TRUE ;
}
向立天 2010-07-13
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
allenhiman 2010-07-01
  • 打赏
  • 举报
回复
你用的什么工具打包的 那个工具你应该会写相关的脚本吧 按照链接的说明添加相关操作的脚本啊 那些手动操作都可以用脚本实现的吧
向立天 2010-07-01
  • 打赏
  • 举报
回复
此贴已编入疑难问题汇总
希望你的问题能早日得到解决
needanothercoder 2010-07-01
  • 打赏
  • 举报
回复
顶顶得分
allenhiman 2010-06-22
  • 打赏
  • 举报
回复
我。。。 那你就用代码写那些手动该做的事情啊 安装包都支持脚本的吧 常用的NIS MSI都支持
zhonglingyu 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 allenhiman 的回复:]
我。。。 那你就用代码写那些手动该做的事情啊 安装包都支持脚本的吧 常用的NIS MSI都支持
[/Quote]
小妹不才,能否说的详细些,应该在什么地方做些什么工作。
zhonglingyu 2010-06-21
  • 打赏
  • 举报
回复
我看了,没有达到我想要的目的。
我发布软件,希望它在安装后自动与类型关联,在卸载后自动失去关联。而不是手动去修改关联。。
zhonglingyu 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 allenhiman 的回复:]
http://zhidao.baidu.com/question/2230417.html
[/Quote]
先谢谢楼上。很多呀!我先看看能用上不。
allenhiman 2010-06-21
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/2230417.html
zhonglingyu 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xfill 的回复:]
注册表 root 下,找到你的扩展名,比如 *.txt 删除掉。
[/Quote]
我删除了,图标还是存在。。
xfill 2010-06-21
  • 打赏
  • 举报
回复
注册表 root 下,找到你的扩展名,比如 *.txt 删除掉。

第二个,你没设置文件关联。软件应该有这个功能。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧