怎么设置一个文件的默认打开方式。(在程序中实现)

frankxht 2003-03-26 11:34:40
是向注册表里写什么东东?
...全文
2322 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuv2002 2003-03-31
  • 打赏
  • 举报
回复
我以.txt文件为例
用regedit.exe打开注册表
到HKEY_CLASSES_ROOT主键
它下面有一长串的".*"的键值
找到.txt
它有默认值为"txtfile"
再在HKEY_CLASSES_ROOT下面搜索名为"txtfile"的主键
找到了
它有子键"DefaultIcon" 默认值为"%SystemRoot%\system32\shell32.dll,-152"
意思是文件的默认图标从shell32.dll 得来 -152为图标序号
另一子键"shell" 这个是关键了
"Shell"键下面有
"open"子键: 里面有“command” 子键其默认值就是对.txt文件的默认打开方式
值为%SystemRoot%\system32\NOTEPAD.EXE %1
另外"open"下面还有"print" 子键,就是打印的操作方式了
这样应该很清楚啦吧
xuv2002 2003-03-26
  • 打赏
  • 举报
回复
手动改就用google 去改吧
其实我给你的函数已经很清楚了
你随便建一个工程
然后执行一下函数不就可以了
例如txt的默认操作
RegisterExt(".txt","Text files","C:\\Winnt\\notpad.exe");
frankxht 2003-03-26
  • 打赏
  • 举报
回复
要手动改注册表呢?怎么改?
xuv2002 2003-03-26
  • 打赏
  • 举报
回复
给你一个例子吧
ext 是你要注册的文件后缀名,desc 是 描述 exe 是你默认打开的执行程序的文件名

RegisterExt(".txt;.tixt","My Text",Application->ExeName.c_str());

ext 可以用';'隔开多个注册
bool RegisterExt(const char* ext, const char* desc, const char* exe)
{
unsigned long Size = 0 ;
char buf [255] , Ext [17];
memset(Ext,17,0); memset(buf,0,255);
if (!ext || !ext[0] || !desc || !desc[0] || !exe || !exe[0]) return false;
strncpy(buf, exe, 3); buf[3] = '\0';
if (GetDriveType(buf)!=DRIVE_FIXED) return false;
TRegistry * Reg=new TRegistry();
Reg->RootKey=HKEY_CLASSES_ROOT;
while(ext) {
const char* s = strchr(ext, ';');
Size = s ? int(s-ext) : strlen(ext);
if (Size >= sizeof(Ext)) Size = sizeof(Ext) - 1;
strncpy(Ext, ext, Size);
Ext[Size] = '\0';
ext = s ? s+1 : NULL;
Size = sizeof(buf); buf[0] = '\0';
Reg->OpenKey(Ext,true);
Reg->WriteString("",desc);
Reg->CloseKey();
}
AnsiString Desc = desc;
if(!Reg->OpenKey(Desc+"\\DefaultIcon",true)){
Reg->CloseKey(); delete Reg; return false;
}
sprintf(buf,"%s,0",exe);
Reg->WriteString("",buf);
Reg->CloseKey();
if(!Reg->OpenKey(Desc+"\\Shell\\Open\\Command",true)){
Reg->CloseKey(); delete Reg; return false;
}
sprintf(buf,"%s %%1",exe);
Reg->WriteString("",buf);
Reg->CloseKey();
delete Reg; return true;
}
frankxht 2003-03-26
  • 打赏
  • 举报
回复
我的意思是,想在注册表里查看一下它的位置。
xuv2002 2003-03-26
  • 打赏
  • 举报
回复
要手动?

用资源管理器吧,很简单
点开资源管理器的文件夹选项
里面有文件类型,点开它
若要新建,点新建
输入你要注册的后缀名如".bik"
然后点高级按钮,出来一个对话框
最上边的是文件类型的描述,我写成"Bik Vedio"
里面有个操作列表框
点新建,然后在操作编辑框中输入"Open"。 注:这个是Windows对文件操作打开的默认值
然后输入你要用来打开该文件类型的程序的名称
如"c:\\bik\\binkplay.exe %1"
%1 是参数,当你打开*.bik文件时,自动将文件名当作参数传给执行文件了
这样你该明白了
呵呵

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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