不知道有这样的API函数吗? 因为现在安装目录一般都是此默认目录,如果有的话,不知道对任意操作系统都适用吗
解决方案 »
- 单文档工程主窗体最小化情况下,想让某个对话框仍正常显示!
- 为何我用PlaySound()播放wav文件没有声音?
- VS2005中的error C2182
- 哪位大哥帮推荐一个打印预览的程序
- 紧急求助:答出一题 给 100分! 拜托! 明天下午之前要!
- 一个实现两个类互相调用,编译出错why??
- 设置鼠标忙碌状态时,为什么在窗体失去焦点后重新得到焦点时,SetCapture()会失去作用?怎么解决
- _variant_t怎么转换为字符串类型呀?
- 卸载了boundchecker后程序不能运行了
- FTP的问题,奇怪的问题。
- VC 6 能否把 C++源文件变成 汇编语言文件?
- 哪里可以下载英文版的《MFC Internals》?请指教。谢谢!
Char MyDocumentDir[MAX_PATH]={0};
memset(MyDocumentDir,0,MAX_PATH);
SHGetSpecialFolderPath(m_hWnd, MyDocumentDir, CSIDL_PROGRAMS, 0 ); 加shell32.lib ,对所有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);
}
C:\Program Files\不过还是非常感谢大家
SHGetSpecialFolderLocation返回就是系统程序的默认安装目录!
SHGetSpecialFolderPath(m_hWnd, MDir, CSIDL_PROGRAMS , 0);这时 MDir 的值就是 C:\Program Files CSIDL_PROGRMS的值是0x0026
C:\Documents and Settings\Administrator\「开始」菜单\程序
这不就是"CSIDL_PROGRAMS 程序组"目录吗?
用GetWindowsDirectory(....)可以得到:c:\Windows,取前3个字母得到:c:\,
再加上Program Files。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 下"ProgramFilesDir"的键值就可以了.
memset(m_lpszDefaultDir,0,_MAX_PATH); LPITEMIDLIST pidl=NULL;
SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAM_FILES , &pidl);
用这个吧
memset(MyDocumentDir,0,MAX_PATH);
SHGetSpecialFolderPath(m_hWnd, MyDocumentDir, CSIDL_PROGRAM_FILES, 0 ); 这样就可以了.别忘了加shell32.lib