怎么做到通过修改注册表,使某一类型文件默认由我的程序打开

0

怎么做到通过修改注册表,使某一类型文件默认由我的程序打开?

上次也问了类似的问题,但是得到的回答更多的是如何使用argc和argv两个参数。

我在贴吧也问了这个问题,上次村长建议我使用InnoSetup等程序,在安装时实现,我觉得这样的话,如果我做一个小程序,还需要安装,有点麻烦。
并且,万一,嗯……万一。这个类型的文件被修改成别的程序默认打开了,用户也无法在我的程序中进行设置,使得该类型文件的默认打开方式恢复成我的程序。

因为我之前在网上搜到过通过修改注册表事程序开机自启的代码,所以我想,修改注册表实现这个功能应该不难吧?

但是我没有搜到如何实现此功能,我对注册表分析了一下,但是写了代码后没有效果。

综上所述,我需要实现这个功能。可以直接给可直接编译的示例代码吗?可以的话,谢谢。

C
ava
huidong

2020-4-7

1

我提到的用安装程序来做,只是最常见的做法。你也可以放到 app 里面来做,比如 7-zip 就是这样。

无论怎样做,都是修改注册表,实现文件关联。具体的关联举例如下:

示例信息:

文件类型:.abc (Test 数据文件)
app 路径:D:\\App\\Test\\test.exe
app 打开文件的方式:D:\\App\\Test\\test.exe %1

需要写入这几个位置的注册表:

HKCR\.abc\(Default),"abc_file"
HKCR\abc_file\(Default),"Test 数据文件"
HKCR\abc_file\DefaultIcon\(Default),"D:\App\Test\test.exe,1"(图标自己指定)
HKCR\abc_file\shell\open\command\(Default),"D:\App\Test\test.exe %1"

先手动修改这几个位置,然后重启 explorer.exe,然后文件关联就可以生效了。

如果没问题,再用程序来修改。但是注意:程序修改注册表,是需要管理员权限的。这也是很多软件用安装程序来修改文件关联的原因。

ava
慢羊羊

2020-4-8

好的,现在要上课,我晚点试试 -  huidong  2020-4-9
0

c自带修改注册表的API函数,实现起来不难

建议先手动改注册表实现效果,再调用函数进行对比

argc和argv是必要的,用来指向要打开的文件

ava
无名氏

2020-4-8

我尝试过调用API,但是写入后没有任何效果。你一提醒,我想到可能是我写入的地方出错了。我一开始以为在HKEY_CLASSES_ROOT下新建一项,再在里面写入数据就行了,这样应该是错的,我那我再试试吧,谢谢! -  huidong  2020-4-8
技术讨论社区