2014年2月19日星期三

环境变量

#include "stdafx.h"

/*
环境变量,大家熟知而容易忽视的东西.

程序有,
用户也有,
系统也有.

注册表里面经常用到.

有的是环境变量的缩写.
如何转换为真正的路径呢?
也许!大多说人认为是小事一桩.

真正的用来,要安全的使用还要好好考虑考虑.

其余的更多的函数还有:
ExpandEnvironmentStringsForUser 
PathUnExpandEnvStrings
DoEnvironmentSubst
GetAllUsersProfileDirectory 

有的读取到的环境变量是缩写的,注册表和GetEnvironmentStrings函数等.
所以这就需要转化.
虽然自己写入注册表的缩写的环境变量机会很小,修改环境变量或者自己的程序的设置等.
所以有此文.

made by correy
made at 2014.02.19
email:kouleguan at hotmail dot com
homepage:http://correy.webs.com
*/

#include <windows.h>

#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

#define INFO_BUFFER_SIZE 32767 //参见ExpandEnvironmentStrings 的说明:The size of the lpSrc and lpDst buffers is limited to 32K.


int main( )
{
    ////////////////////////////////////////////////////////////////////////////////
    //测试ExpandEnvironmentStrings函数的用法.

    TCHAR  infoBuf[INFO_BUFFER_SIZE] = {0};
    DWORD  bufCharCount = INFO_BUFFER_SIZE;

    bufCharCount = ExpandEnvironmentStrings(L"%TEMP%", infoBuf, INFO_BUFFER_SIZE );//其实也可以动态获取需要的内存的大小.
    if (bufCharCount > INFO_BUFFER_SIZE  || bufCharCount == 0)
    {
        int x = GetLastError();
        return 0;
    }

    //获取的结果如下:C:\Users\ADMINI~1\AppData\Local\Temp

    ////////////////////////////////////////////////////////////////////////////////
    //测试PathUnExpandEnvStrings函数的用法.

    TCHAR  szBuf[MAX_PATH] = {0};
    UINT cchBuf = MAX_PATH;
    if (!PathUnExpandEnvStrings((LPWSTR)infoBuf, (LPWSTR)&szBuf, cchBuf))
    {
        int x = GetLastError();
        return 0;
    }

    //获取的结果如下:%SystemDrive%\Users\ADMINI~1\AppData\Local\Temp

    ////////////////////////////////////////////////////////////////////////////////

    return 1;
}