不知道有这样的API函数吗? 因为现在安装目录一般都是此默认目录,如果有的话,不知道对任意操作系统都适用吗

解决方案 »

  1.   

    用SHGetSpecialFolderPath();
    Char MyDocumentDir[MAX_PATH]={0};
    memset(MyDocumentDir,0,MAX_PATH);
    SHGetSpecialFolderPath(m_hWnd, MyDocumentDir, CSIDL_PROGRAMS, 0 ); 加shell32.lib ,对所有windows操作系统都适用
      

  2.   

    使用API函数SHGetSpecialFolderLocation。shlobj.h里有SHGetSpecialFolderLocation的原型声明。这个函数可以帮我们找到Windows的桌面目录、启动目录、我的文档目录等。 
        SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在调用这个函数时可能出现的对话框或消息框。第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是: 
    CSIDL_BITBUCKET 回收站 
    CSIDL_CONTROLS 控制面板 
    CSIDL_DESKTOP Windows 桌面Desktop 
    CSIDL_DESKTOPDIRECTORY Desktop的目录 
    CSIDL_DRIVES 我的电脑 
    CSIDL_FONTS 字体目录 
    CSIDL_NETHOOD 网上邻居 
    CSIDL_NETWORK 网上邻居虚拟目录 
    CSIDL_PERSONAL 我的文档 
    CSIDL_PRINTERS 打印机 
    CSIDL_PROGRAMS 程序组 
    CSIDL_RECENT 最近打开的文档 
    CSIDL_SENDTO “发送到”菜单项 
    CSIDL_STARTMENU 任务条启动菜单项 
    CSIDL_STARTUP 启动目录 
    CSIDL_TEMPLATES 文档模板 
    ===============================
    TCHAR szDocument[MAX_PATH]={0};
    memset(m_lpszDefaultDir,0,_MAX_PATH); LPITEMIDLIST pidl=NULL;
    SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);
    if (pidl && SHGetPathFromIDList(pidl, szDocument))
    {
    GetShortPathName(szDocument,m_lpszDefaultDir,_MAX_PATH);
    }
      

  3.   

    可能大家理解错了,我需要的是程序安装的默认目录,比如一般程序安装都是:
    C:\Program Files\不过还是非常感谢大家
      

  4.   

    没理解错吧
    SHGetSpecialFolderLocation返回就是系统程序的默认安装目录!
      

  5.   

    代码不是都给你了 char MDir[MAX_PATH]={0};
    SHGetSpecialFolderPath(m_hWnd, MDir, CSIDL_PROGRAMS , 0);这时  MDir 的值就是 C:\Program Files CSIDL_PROGRMS的值是0x0026
      

  6.   

    我这里编译得到的是:
    C:\Documents and Settings\Administrator\「开始」菜单\程序
      

  7.   

    C:\Documents and Settings\Administrator\「开始」菜单\程序
    这不就是"CSIDL_PROGRAMS 程序组"目录吗?
      

  8.   

    参考如下:
    用GetWindowsDirectory(....)可以得到:c:\Windows,取前3个字母得到:c:\,
    再加上Program Files。
      

  9.   

    读注册表
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 下"ProgramFilesDir"的键值就可以了. 
      

  10.   

    TCHAR szDocument[MAX_PATH]={0};
    memset(m_lpszDefaultDir,0,_MAX_PATH); LPITEMIDLIST pidl=NULL;
    SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAM_FILES , &pidl);
    用这个吧
      

  11.   

    char MyDocumentDir[MAX_PATH]={0};
    memset(MyDocumentDir,0,MAX_PATH);
    SHGetSpecialFolderPath(m_hWnd, MyDocumentDir, CSIDL_PROGRAM_FILES, 0 ); 这样就可以了.别忘了加shell32.lib