BOOL SHGetSpecialFolderPath( HWND hwndOwner,
                                 LPTSTR lpszPath,

                                 int nFolder,

                                 BOOL fCreate
);

参数解释:

hwndOwnerHandle to the owner window the client should specify if it displays a dialog box or message box.

lpszPath:Pointer to a null-terminated string that receives the drive and path of the specified folder. This buffer must be at least MAX_PATH characters in size

nFolder:A CSIDL that identifies the folder of interest. If a virtual folder is specified, this function will fail.

fCreate:Indicates if the folder should be created if it does not already exist. If this value is nonzero, the folder will be created. If this value is zero, the folder will not be created.

一个简单的test
建立控制台程序:

#include "stdafx.h"
#include <Windows.h>
#include <string>
#include <Shlobj.h> using namespace std;; int _tmain(int argc, _TCHAR* argv[])
{
WCHAR szPath[MAX_PATH + 1] = { 0 };
wstring strMsgW; BOOL bRet;
//严格一点,每个返回值要判断
bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAM_FILES, FALSE);
strMsgW.append(L"CSIDL_PROGRAM_FILES: ");
strMsgW.append(szPath);
strMsgW.append(L"\r\n"); bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAM_FILES_COMMON, FALSE);
strMsgW.append(L"CSIDL_PROGRAM_FILES_COMMON: ");
strMsgW.append(szPath);
strMsgW.append(L"\r\n"); bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_SYSTEM, FALSE);
strMsgW.append(L"CSIDL_SYSTEM: ");
strMsgW.append(szPath);
strMsgW.append(L"\r\n"); bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_STARTUP , FALSE);
strMsgW.append(L"CSIDL_STARTUP: ");
strMsgW.append(szPath);
strMsgW.append(L"\r\n"); bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_APPDATA , FALSE);
strMsgW.append(L"CSIDL_APPDATA: ");
strMsgW.append(szPath);
strMsgW.append(L"\r\n"); MessageBox(NULL, strMsgW.c_str(), L"SHGetSpecialFolderPath Test", MB_OK); return 0;
} 运行结果:

Windows API 第二篇 SHGetSpecialFolderPath的更多相关文章

  1. Windows API 25篇 TerminateProcess

    导语:结束一个进程的方法通常有:exit(), ExitProcess, TerminateProcess. 通常一个进程在正常情况下结束的话,系统会调用 ExitProcess函数结束进程,但有时候 ...

  2. windows API 第九篇 _tcslwr _strlwr _wcslwr _mbslwr

    将字符串转化为小写Convert a string to lowercase. 函数原型: char *_strlwr( char *string );             //#include ...

  3. Windows API 23 篇 WTSQuerySessionInformation

    函数原型:BOOLWINAPIWTSQuerySessionInformationW(                                                      IN ...

  4. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  5. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  6. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  7. 【OpenGL】第二篇 Hello OpenGL

    ---------------------------------------------------------------------------------------------------- ...

  8. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  9. 第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

随机推荐

  1. postman在有登录认证的情况下进行接口测试!!!

    1.启动自己的项目之后直接使用浏览器进行登录,登陆之后随意点击一个请求,F12找到该请求中请求头的Cookie键值对. 2.将该键值对复制粘贴到postman中的请求Headers中,如下图. 3,请 ...

  2. Allegro文档错误之:Iangle 命令

    Allegro绘制弧线时,可以使用add rarc命令,或者菜单栏里 Add|Arc w/Radius. 使用该命令时,需要输入3个参数: 1,圆心坐标:如 x –0.3 –0.8 2,半径,以及起始 ...

  3. Python: 生成器与迭代 generators and iteration

    https://eastlakeside.gitbooks.io/interpy-zh/content/Generators/ 文章不是非常好 1,三个概念 可迭代对象 iterable, 迭代器 i ...

  4. DelphiHookApi(经典)

    论坛里有关于HOOK API的贴子, 但其实现在方式显示得麻烦, 其实现在拦截API一般不用那种方式, 大都采用inline Hook API方式.其实也就是直接修改了要拦截的API源码的头部,让它无 ...

  5. CF919D Substring (dag dp)

    传送门 解题思路 感觉这种题都是套路,首先缩点判了环(没看见自环挂了一次..),然后设\(f[x][i]\)表示到了\(x\),\(i\)这个字母走过的最长距离,然后拓扑排序更新即可. 代码 #inc ...

  6. DNS 攻击方式及攻击案例

    [赛迪网-IT技术报道]2010年1月12日晨7时起,网络上开始陆续出现百度出现无法访问的情况反馈, 12时左右基本恢复正常:18时许百度发布官方版本公告:对事故原因说明为:"因www.ba ...

  7. Python中%r和%s的详解及区别_python_脚本之家

    Python中%r和%s的详解及区别_python_脚本之家 https://www.jb51.net/article/108589.htm

  8. 《初识Python之认识常量type函数》

    <初识Python之认识常量type函数> 1.2 认识常量 1.常量:我们用的就是它字面意义上的值或内容. 2.数字(Number) (1)整数表示:97. (2)浮点数表示:5.29 ...

  9. 数组,List,Set相互转化

    1.数组转化为List: String[] strArray= new String[]{"Tom", "Bob", "Jane"}; Li ...

  10. mysql数据库字段bigint使用

    Mysql里有个数据类型bigint 在java转换成实体对象时,处理不当容易出现以下异常: java.lang.ClassCastException: java.lang.Long cannot b ...