快到圣诞了!先祝大家圣诞快乐!我想在自己的程序中关联一些已知的和我自己的文件类型,但有的文件类型我不希望直接用我的程序打开,只是让我的程序作为一个可选项。
而有的文件我希望直接用我的程序打开(双击)
不知道该在注册表的什么位置添加或者修改什么!?请不要嫌问题简单!~*_*谢谢!

解决方案 »

  1.   

    HKEY_CLASSES_ROOT\.mdb = DataBase.Document//扩展名
    HKEY_CLASSES_ROOT\DataBase.Document\shell\open\command = DATABASE.EXE %1//打开用到的EXE
    HKEY_CLASSES_ROOT\DataBase.Document\shell\open\ddeexec = [open("%1")]
    HKEY_CLASSES_ROOT\DataBase.Document\shell\open\ddeexec\application = DATABASE
    HKEY_CLASSES_ROOT\DataBase.Document = Access 数据库
      

  2.   

    http://www.hongen.com/pc/program/apitutor/api0009/api01.htmVB的例子,不过你可以看是在注册表的什么位置改。
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=618
      

  4.   

    设你的应用程序为c:\abc.exe
    在你的应用程序中加入以下两个函数,stol为类型转换函数,reg为文件类型注册函数,执行它,然后所有的.abc文件图标全部变为c:\abc.exe的图标(需重启),并且双击.abc默认使用abc.exe打开,但你还需要增加对命令行的参数的处理才能进行打开后的进一步操作.
    我在VC6+WIN98中使用通过无误,如有问题欢迎联系:[email protected] 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;
    }