怎样做到双击后打开一个文件?

时间:2022-09-29 15:08:50
我最近作了一个简单的察看某种格式文件的浏览器,假设文件后缀为*.xxx,我怎样才能使以这样后缀结尾的文件以我的浏览器为默认浏览器,另外,怎样在双击文件时得到他的全名,因为我显示文件内容的前提是先知道它的文件名。

12 个解决方案

#1


command line

#2


在注册表里登记相应的关联就行。

首先在HKEY_Class_Root\.123写入 (默认)串值(REG_SZ)为 "123file";

然后在HKEY_Class_Root\123file\Shell\Open\Command写入,(默认)串值为"abc.exe %1"。
(注意串值的类型)

假设你的文件类型为*.123,浏览器的执行程序为abc.exe,路径为C:\Windows 或者 C:\Windows\System,如果不是在系统目录 "abc.exe %1" 应改为 "C:\..你的浏览器的目录..\abc.exe %1"。

#3


>>
这是MFC的标准功能,更本不用些一行代码。
>>

#4


Shines的方法正确!
vcbeginner的方法是有限的,只适合一种类型扩展名文档的打开,如果同时支持多种的话,就需要继承MFC中的CDocManager重载修改MatchDocType()函数;

#5


补充:文件名是系统通过DDE调用你的OpenDocumentFile(LPCTSTR lpfilename)时传递给你的;当然前提是你使用MFC缺省的处理方式;实际上也可以处理命令行参数象Un1提到的;

#6


请问各位,怎样在双击文件时得到他的全名并将文件名传给我的程序知道?

#7


    如shines所言,然后当你的程序被启动时,在命令行上就有完整的文件名.

#8


双击文件名时,文件所在目录即被设置位当前目录,在程序里可以用API函数
DWORD GetCurrentDirectory(
    DWORD nBufferLength, // size, in characters, of directory buffer 
    LPTSTR lpBuffer  // address of buffer for current directory 
)
获取当前目录,加上文件名即可得到他的全名

#9


怎么!没有看明白我的上一个帖子?
你只要重载CWinApp::OpenDocumentFile()函数,就不用管文件名从双击来的还是命令行来得到的,而且是全路径!

#10


正如大家所言,我已经取得了文件名,但无法用WriteProfileString在注册表的HKEY_CLASSES_ROOT内写入shines告诉的内容,好像WriteProfileString只能写在HKEY_CURRENT_USER\SOFTWARE\,有谁指点一下。

#11


因为WriteProfileString是MFC包装在CWinApp的应用程序注册函数之一,其只能根据应用程序中保存的主键在其子键中增改信息。
你需要自己打开注册表建立HKEY与要写的地方对应,简单的方法是用MFC的CRegKey类,高兴的话也可以用API来写,也没有很麻烦查找RegOpenKeyEx及其相关的函数就可。
****问题是????*********
如果你只是支持一种文件扩展名的话是不需要编程或手工修改注册表的,只需在资源文件中将文档的字符串信息填写完整即可!!
************************

#12


谢谢各位,可惜分太少了,可能分赃不均。

#1


command line

#2


在注册表里登记相应的关联就行。

首先在HKEY_Class_Root\.123写入 (默认)串值(REG_SZ)为 "123file";

然后在HKEY_Class_Root\123file\Shell\Open\Command写入,(默认)串值为"abc.exe %1"。
(注意串值的类型)

假设你的文件类型为*.123,浏览器的执行程序为abc.exe,路径为C:\Windows 或者 C:\Windows\System,如果不是在系统目录 "abc.exe %1" 应改为 "C:\..你的浏览器的目录..\abc.exe %1"。

#3


>>
这是MFC的标准功能,更本不用些一行代码。
>>

#4


Shines的方法正确!
vcbeginner的方法是有限的,只适合一种类型扩展名文档的打开,如果同时支持多种的话,就需要继承MFC中的CDocManager重载修改MatchDocType()函数;

#5


补充:文件名是系统通过DDE调用你的OpenDocumentFile(LPCTSTR lpfilename)时传递给你的;当然前提是你使用MFC缺省的处理方式;实际上也可以处理命令行参数象Un1提到的;

#6


请问各位,怎样在双击文件时得到他的全名并将文件名传给我的程序知道?

#7


    如shines所言,然后当你的程序被启动时,在命令行上就有完整的文件名.

#8


双击文件名时,文件所在目录即被设置位当前目录,在程序里可以用API函数
DWORD GetCurrentDirectory(
    DWORD nBufferLength, // size, in characters, of directory buffer 
    LPTSTR lpBuffer  // address of buffer for current directory 
)
获取当前目录,加上文件名即可得到他的全名

#9


怎么!没有看明白我的上一个帖子?
你只要重载CWinApp::OpenDocumentFile()函数,就不用管文件名从双击来的还是命令行来得到的,而且是全路径!

#10


正如大家所言,我已经取得了文件名,但无法用WriteProfileString在注册表的HKEY_CLASSES_ROOT内写入shines告诉的内容,好像WriteProfileString只能写在HKEY_CURRENT_USER\SOFTWARE\,有谁指点一下。

#11


因为WriteProfileString是MFC包装在CWinApp的应用程序注册函数之一,其只能根据应用程序中保存的主键在其子键中增改信息。
你需要自己打开注册表建立HKEY与要写的地方对应,简单的方法是用MFC的CRegKey类,高兴的话也可以用API来写,也没有很麻烦查找RegOpenKeyEx及其相关的函数就可。
****问题是????*********
如果你只是支持一种文件扩展名的话是不需要编程或手工修改注册表的,只需在资源文件中将文档的字符串信息填写完整即可!!
************************

#12


谢谢各位,可惜分太少了,可能分赃不均。