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. 新知道一个 端对端加密 Signal protocol

    看 socketio Sponsors 列表中的小蓝鸟,发现网站中有使用 x-jquery-tmpl [翻译]WhatsApp 加密概述(技术白皮书) 知道一个叫 Signal 协议 的端对端加密 端 ...

  2. 纯PHP Codeigniter(CI) ThinkPHP效率测试

    最近一直想做一个技术类的新闻站点,想做的执行效率高些,想用PHP做,一直纠结于用纯PHP做还是用CI或者THINKPHP.用纯PHP效率高,缺点 n多,比如安全方面.构架方面等等等等:用CI.thin ...

  3. ios 中倒计时计算,时间戳为NaN

    // 倒计时 daojishi(params) { let _this = this; let datetemp = this.servertimes; let lasttime = Date.par ...

  4. 2016.8.15上午纪中初中部NOIP普及组比赛

    2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...

  5. day 86 Vue学习之八geetest滑动验证

    Vue学习之八geetest滑动验证   本节目录 一 geetest前端web中使用 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 geetest前端web ...

  6. a标签 href触发及传值

    var d=document.getElementById("exportA");alert(d.href);d.href="${ctx}/templet/tEdasTe ...

  7. 最难的工作 /// SPFA模板 oj1396

    题目大意: Input 第一行是一个整数T ( T ≤ 100 ),表示测试用例的个数. 每个测试用例的第一行是两个整数 n 和 m ( 1 ≤ n ≤ 200 , 0 ≤ m ≤ 10000 ),分 ...

  8. 面试系列14 redis的过期策略都有哪些

    (1)设置过期时间 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时?10分钟?这个很有用,我们自己可以指定缓存到期就失效. 如果假设你 ...

  9. SpringBoot之集成通用Mapper

    第一种: 1.引入POM坐标,需要同时引入通用mapper和jpa <dependency> <groupId>tk.mybatis</groupId> <a ...

  10. webservice、httpClient、dubbo的区别

    在开发中,对于同一个war包中的对象方法我们可以直接调用,但是很多情况下需要在不同项目或者不同服务器进行相互调用 webservice webservice技术可以实现不同服务器项目直接的调用和交换数 ...