如何?

rokia 2000-11-02 09:10:00
我想在程序中程序中实现这种功能呢:例如,我想打开一个jpg文件,它就自动运行acdsee去打开它。 如果想打开doc文件,就自动运行word。 就象双击文件名那咱效果?

thanks!
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunlet 2000-11-02
  • 打赏
  • 举报
回复
设你的应用程序为c:\abc.exe
在你的应用程序中加入以下两个函数,stol为类型转换函数,reg为文件类型注册函数,执行它,然后重新启动,所有的.abc文件图标全部变为c:\abc.exe的图标,并且双击.abc默认使用abc.exe打开,但你还需要增加对命令行的参数的处理才能进行打开后的进一步操作.
我在VC6+WIN98中使用通过无误,如有问题欢迎联系:delwlj@yeah.net

void CLj1Dlg::reg(char p[]) //文件注册函数,p在这里为加点扩展名".abc"
{
//创建入口

HKEY hKEY;
LPBYTE set;
DWORD type_1;
int cbData_1;

CString s=p,s1;

s.Delete(0);


//在WINDOWS中注册.abc
s+="file";
::RegCreateKey(HKEY_CLASSES_ROOT,p,&hKEY);//建立子键
set=stol(s); //使用自定义函数将CString型转换为LPBYTE方可写入
type_1=REG_SZ;//指定写入数据的类型为字符串
cbData_1=s.GetLength();
::RegSetValueEx(hKEY,"", NULL,type_1,set,cbData_1);


//将.abc的图标改为abc.exe的图标
s1=s;
s1+="\\DefaultIcon";
set=stol("c:\\abc.exe");//设你的abc.exe在C盘根目录下
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY); // 建立入口
::RegSetValueEx(hKEY,"",NULL,type_1,set,11); //向入口写入数据


//设置.abc的打开文件为c:\abc.exe
s1=s;
s1+="\\shell\\open\\command";
set=stol("c:\\abc.exe %1");
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY);
::RegSetValueEx(hKEY,"",NULL,type_1,set,11);

}

LPBYTE CLj1Dlg::stol(CString s)//类型转换函数
{
char ch1=0;
int i;

LPBYTE lpb=new BYTE[s.GetLength()+1];
for(i=0;i<s.GetLength();i++)
{lpb[i]=s[i];}


lpb[i]=ch1;


return lpb;
}
andygood 2000-11-02
  • 打赏
  • 举报
回复

靠,难道用ShellExecute不好吗?????
Edward 2000-11-02
  • 打赏
  • 举报
回复
看看 MFC 类库的源代码吧!注册文件类型的代码在 DOCMGR.CPP,查找
void CDocManager::RegisterShellFileTypes(BOOL bCompat)
即可,它是入口。
dingsg 2000-11-02
  • 打赏
  • 举报
回复
回答你的问题:
1>首先建立两个列表:
>>>>用来存放你要打开的文件类型;;可用字符串;(有效信息为:文件路径名和文件名);
>>>>用来打开这个文件的程序:::也可用字符串;(有效信息为程序的路径和名称);
2>定位要打开的文件:
查找类型,定位;搜索对应的程序;
3>按你的要求打开!
方式:system(程序路径名+名称,文件路径名+名称)

如有问题,请与我联系!
dingsg@sohu.com
dingsg 2000-11-02
  • 打赏
  • 举报
回复
回答你的问题:
1>首先建立两个列表:
>>>>用来存放你要打开的文件类型;;可用字符串;(有效信息为:文件路径名和文件名);
>>>>用来打开这个文件的程序:::也可用字符串;(有效信息为程序的路径和名称);
2>定位要打开的文件:
查找类型,定位;搜索对应的程序;
3>按你的要求打开!
方式:system(程序路径名+名称,文件路径名+名称)

如有问题,请与我联系!
dingsg@sohu.com
wjf 2000-11-02
  • 打赏
  • 举报
回复
查注册表吧。
查HKEY_CLASS_ROOT\.XXX读默认下的字符串string,
查HKEY_CLASS_ROOT\[string]\shell\[第一项]\command下的默认下的字符串就是启动路径
rokia 2000-11-02
  • 打赏
  • 举报
回复
另外,我想问一下,怎么在自己的程序中激活 屏幕保护呢?
rokia 2000-11-02
  • 打赏
  • 举报
回复
噢。。。sunlet. 你没明白我的意思。 我不是想让我自己的文档可以缺省被我的程序打开,而是我想在程序中打开别的文件,例如打开一个doc文件,当我执行这段代码以后,能够启动word去打开它。 嘻。。。不过, 我会给你加很多分的。嘻....你现在过得好吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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