我的一个程序要用到.aaa(自定义)文件,有以下问题:1 为让.aaa文件看上去美观一些,我想给.aaa,文件加(关联)一个图标(图标文件在资源里),怎么在程序中给.aaa文件设置图标?2 我想双击.aaa文件,打开abc.exe文件,同时传递一个参数给abc.exe,abc.exe根据该参数显示不同的界面。该怎么做?

解决方案 »

  1.   

    BOOL   ModifyIcon(LPCSTR   ExtName,   LPCSTR   IconFile)   
      {   
              BOOL   ret;   
              LONG   nLen;   
              char   Key[65];   
              char   buf[MAX_PATH];   
        
              nLen   =   sizeof(Key);   
              if   (RegQueryValue(HKEY_CLASSES_ROOT,ExtName,Key,   
                      &nLen)   !=   ERROR_SUCCESS)   
                      return   FALSE;   
              if   (Key[0]=='\0')   return   FALSE;   
              strcat(Key,   "\\DefaultIcon");   
              strcpy(buf,   IconFile);     strcat(buf,   ",   0");   
              ret   =   RegSetValue(HKEY_CLASSES_ROOT,   Key,   
                      REG_SZ,   buf,   sizeof(buf)+1)   ==   ERROR_SUCCESS;   
              SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,   
                      0,   0);   
              return   ret;   
      }   
        
      调用的例子:   
      ModifyIcon(".xch",   "c:\\test.ico");
      

  2.   

    1、修改注册表中的“DefaultIcon”;在HKEY_CLASSES_ROOT目录下;
    2、在程序开始处(如InitInstance()函数中)用GetCommandLine来获取参数,判断之。
      

  3.   

    主要是写注册表
    1. HKEY_CLASSES_ROOT\.aaa  默认项 aaafile
    2. HKEY_CLASSES_ROOT\aaafile\DefaultIcon 默认项 x:\xxx\xxx.ico
    3. HKEY_CLASSES_ROOT\aaafile\shell\open\command 默认项 "x:\xxx\123.exe %1"主程序读取参数即可全路径名
      

  4.   

    谢谢楼上几位的回答。我的图标是在资源里(res文件夹里),在程序编译完成后就一个setup文件,图标文件已经包在setup里面了,所以没有这样的目录(x:\xxx\xxx.ico)。但是图标有一个ID。请问怎么使用图标的ID完成关联?或者怎么用ID把图标拷贝到一个windows目录下?
      

  5.   

    如InitInstance()函数中用GetCommandLine来对传入的字符串进行分析
      

  6.   


    谢谢,能否举个简单的例子?
    是不是参数要写在HKEY_CLASSES_ROOT\aaafile\shell\open\command 默认项 "x:\xxx\123.exe %1" 的后面?
      

  7.   

    一般是用“ExtractIcon/Ex”来从PE文件中解压出图标。所以注册表中的文件类型图标都只需要一个PE文件、一个资源索引就可以了(看看该函数的参数就会明白)。
      

  8.   


    用“ExtractIcon/Ex”从PE文件解压出来后怎么保存到硬盘呢?