我们做了一个应用程序,后缀名为.Reft,是个MDI程序。现在我们想双击该特定的后缀名就打开我们的应用程序,因此把这个功能提出来,做成(consol下)EXE,运行该程序就进行注册该后缀名。
可是结果为什么不对,图标没有改并且双击也不能用我们指定的应用程序打开!发现注册表也是正确的:如:
HKEY_CLASSES_ROOT\.Reft //Reft为文件扩展名,并把它的缺省值设为Reft.Doc
HKEY_CLASSES_ROOT\Reft.Doc\shell\open\command //Reft.Doc为上一个键值,并把它的缺省值设为 "(绝对路径)Reft.exe %1"
HKEY_CLASSES_ROOT\Reft.Doc\DefaultIcon //该键用来设置该类文件的显示图标(该Reft.exe的图标)可是真的很奇怪,不知道为什么双击总是不能打开?(计算机也重启了!)哪位高手指点下????是不是还有其他的地方要更改!
非常感谢!
可是结果为什么不对,图标没有改并且双击也不能用我们指定的应用程序打开!发现注册表也是正确的:如:
HKEY_CLASSES_ROOT\.Reft //Reft为文件扩展名,并把它的缺省值设为Reft.Doc
HKEY_CLASSES_ROOT\Reft.Doc\shell\open\command //Reft.Doc为上一个键值,并把它的缺省值设为 "(绝对路径)Reft.exe %1"
HKEY_CLASSES_ROOT\Reft.Doc\DefaultIcon //该键用来设置该类文件的显示图标(该Reft.exe的图标)可是真的很奇怪,不知道为什么双击总是不能打开?(计算机也重启了!)哪位高手指点下????是不是还有其他的地方要更改!
非常感谢!
另外,可以在InitInstance函数中显示一个MessageBox来确定程序是否被加载。
HKEY key;
HKEY key1,key2,key3,key4,key5;
DWORD d=sizeof(char);
char sName[128]="\"";
strcat(sName,"e:\\text\\Myor.exe"); //打开的程序 strcat(sName,"\"");
strcat(sName," \"");
strcat(sName,"%1");
strcat(sName,"\" ");
strcat(sName,"%*");
//char *p=strrchr(sName,'"');
//strcpy(p,"\"");
char demo[20]="C3DFile"; //文件描述, 后缀名为.c3d
if(RegOpenKeyEx(HKEY_CLASSES_ROOT,".c3d",0,KEY_READ,&key))//如果.c3d键没有创建,以下就创建
{
if (ERROR_SUCCESS==RegOpenKeyEx(HKEY_CLASSES_ROOT,"",0,KEY_READ,&key1))//打开HKEY_CLASSES_ROOT
{
if (ERROR_SUCCESS==RegCreateKeyEx(key1,".c3d",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key2,&d))
{
RegSetValueEx(key2,NULL,NULL,REG_SZ,(LPBYTE)demo,20); if (ERROR_SUCCESS==RegCreateKeyEx(key2,"DefaultIcon",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key3,&d))
{
RegCloseKey(key3);
}
if (ERROR_SUCCESS==RegCreateKeyEx(key2,"shell",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key3,&d))
{
if (ERROR_SUCCESS==RegCreateKeyEx(key3,"open",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key4,&d))
{
if (ERROR_SUCCESS==RegCreateKeyEx(key4,"command",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key5,&d))
{ RegSetValueEx(key5,NULL,NULL,REG_SZ,(LPBYTE)sName,MAX_PATH);
RegCloseKey(key5);
}
RegCloseKey(key4);
}
RegCloseKey(key3);
}
RegCloseKey(key2);
}
RegCloseKey(key1);
}
// RegCloseKey(key);
}
????????
但是有一个地方很奇怪:
我注册了好几种后缀名:.Reft,.cpp,.c,cxx,.h,.hpp; 还有就是我的电脑装有VS6.0 和 VS2008, 运行该程序注册后缀名后,其他几种后缀名的文件都可以以我们的应用程序打开。
可是.h 和 .cpp的后缀名的文件始终是以VS2008打开,并不按照我们的应用程序执行,我看了注册表发现也是更改了。
(注:原来VS2008注册的.h和.cpp被更改成以我们的程序打开)
什么回事????