设置和获取所在进程的环境变量
2013-05-28 08:02
120 查看
转载网址:http://hi.baidu.com/code_tin/item/244219505b567b9309be1796
设置和获取所在进程的环境变量,使用API函数
GetEnvironmentStrings,GetEnvironmentVariable和SetEnvironmentVariable等.
1.GetEnvironmentStrings
GetEnvironmentStrings可以获得所有环境变量字串,GetEnvironmentStrings函数无参数,
返回PVOID类型函数,指向保存环境变量的缓冲区,使用完成需由FreeEnvironmentStrings函数释放.
2.GetEnvironmentVariable
获取指定的环境变量
DWORD GetEnvironmentVaribale(
LPCTSTR lpName,
LPTSTR lpBuffer,
DWORD nSize
);
lpName是环境变量名,lpBuffer指向保存环境变量值的缓冲区,nSize是缓冲区大小,返回真实的环境变量值大小.
3.SetEnvironmentVariable
BOOL SetEnvironmentVariable(
LPCTSTR lpName,
LPCTSTR lpValue
);
EnumEnvironmentVariables和ChangeEnviromentVariables分别是显示和设置进程的环境变量.
/* 头文件 */
#include <windows.h>
#include <stdio.h>
#include "env.h"
/* 预定义 */
#define BUFSIZE 4096
/*************************************
* DWORD WINAPI EnumEnvironmentVariables()
* 功能 显示进程的所有环境变量
**************************************/
DWORD WINAPI EnumEnvironmentVariables()
{
// 获取环境变量
PVOID pEv = GetEnvironmentStrings();
LPSTR szEnvs;
// 显示
for (szEnvs = (LPSTR) pEv; *szEnvs;)
{
printf("%s\n",szEnvs);
while (*szEnvs++);
}
// 释放
FreeEnvironmentStrings(pEv);
return 0;
}
/*************************************
* DWORD WINAPI ChangeEnviromentVariables(LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag)
* 功能 改变环境变量
*
* 参数 LPSTR szName 需要改变的环境
* LPSTR szNewValue 新的变量值
* DWORD dwFlag 附加、重置还是清零,相关常量在env.h在定义
**************************************/
DWORD WINAPI ChangeEnviromentVariables(LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag)
{
DWORD dwErr;
PVOID szVal;
DWORD dwReturn;
DWORD dwNewValSize;
// 如果标志为附加则则先获取,然后将szNewValue附加到末尾
if(dwFlag == VARIABLES_APPEND)
{
dwNewValSize = lstrlen(szNewValue)+1; // 新变量值的大小
// 分配内存
szVal = HeapAlloc(GetProcessHeap(),0,BUFSIZE+dwNewValSize);
// 获取值
dwReturn = GetEnvironmentVariable(szName,szVal,BUFSIZE);
if(dwReturn == 0) // 出错
{
dwErr = GetLastError();
if( ERROR_ENVVAR_NOT_FOUND == dwErr )
{
printf("Environment variable %s does not exist.\n", szName);
}
else
{
printf("error: %d",dwErr);
}
return FALSE;
}
else if(BUFSIZE < dwReturn) // 缓冲区太小
{
szVal = (LPTSTR) HeapReAlloc(GetProcessHeap(), 0,szVal, dwReturn+dwNewValSize);
if(NULL == szVal)
{
printf("Memory error\n");
return FALSE;
}
dwReturn = GetEnvironmentVariable(szName, szVal, dwReturn);
if(!dwReturn)
{
printf("GetEnvironmentVariable failed (%d)\n", GetLastError());
return FALSE;
}
}
lstrcat(szVal,";"); // 分隔符
lstrcat(szVal,szNewValue); // 附加
//设置
if(!SetEnvironmentVariable(szName,szVal))
{
printf("Set Value Error %d",GetLastError());
}
// 释放内存
HeapFree(GetProcessHeap(),0,szVal);
return TRUE;
}
// 如果是重置,则直接设置
else if(dwFlag == VARIABLES_RESET)
{
if(!SetEnvironmentVariable(szName,szNewValue))
{
printf("Set value error %d",GetLastError());
}
}
// 清零,忽略szNewValue
else if(dwFlag == VARIABLES_NULL)
{
if(!SetEnvironmentVariable(szName,NULL))
{
printf("Set value error %d",GetLastError());
}
}
return TRUE;
}
env.h:
dll的导出函数
#include <windows.h>
#define VARIABLES_APPEND 1
#define VARIABLES_RESET 2
#define VARIABLES_NULL 0
DWORD WINAPI EnumEnvironmentVariables();
DWORD WINAPI ChangeEnviromentVariables(
LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag);
调用部分:
/* 头文件 */
#include <windows.h>
#include <stdio.h>
#include "../env_dll/env.h"
/*************************************
* int main(void)
* 功能 演示虚拟内存的使用
*
* 参数 未使用
**************************************/
int main(void)
{
EnumEnvironmentVariables();
ChangeEnviromentVariables("PATH","C:\\",VARIABLES_APPEND);
EnumEnvironmentVariables();
ChangeEnviromentVariables("PATH","C:\\",VARIABLES_NULL);
EnumEnvironmentVariables();
ChangeEnviromentVariables("XX","C:\\",VARIABLES_RESET);
EnumEnvironmentVariables();
}
设置和获取所在进程的环境变量,使用API函数
GetEnvironmentStrings,GetEnvironmentVariable和SetEnvironmentVariable等.
1.GetEnvironmentStrings
GetEnvironmentStrings可以获得所有环境变量字串,GetEnvironmentStrings函数无参数,
返回PVOID类型函数,指向保存环境变量的缓冲区,使用完成需由FreeEnvironmentStrings函数释放.
2.GetEnvironmentVariable
获取指定的环境变量
DWORD GetEnvironmentVaribale(
LPCTSTR lpName,
LPTSTR lpBuffer,
DWORD nSize
);
lpName是环境变量名,lpBuffer指向保存环境变量值的缓冲区,nSize是缓冲区大小,返回真实的环境变量值大小.
3.SetEnvironmentVariable
BOOL SetEnvironmentVariable(
LPCTSTR lpName,
LPCTSTR lpValue
);
EnumEnvironmentVariables和ChangeEnviromentVariables分别是显示和设置进程的环境变量.
/* 头文件 */
#include <windows.h>
#include <stdio.h>
#include "env.h"
/* 预定义 */
#define BUFSIZE 4096
/*************************************
* DWORD WINAPI EnumEnvironmentVariables()
* 功能 显示进程的所有环境变量
**************************************/
DWORD WINAPI EnumEnvironmentVariables()
{
// 获取环境变量
PVOID pEv = GetEnvironmentStrings();
LPSTR szEnvs;
// 显示
for (szEnvs = (LPSTR) pEv; *szEnvs;)
{
printf("%s\n",szEnvs);
while (*szEnvs++);
}
// 释放
FreeEnvironmentStrings(pEv);
return 0;
}
/*************************************
* DWORD WINAPI ChangeEnviromentVariables(LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag)
* 功能 改变环境变量
*
* 参数 LPSTR szName 需要改变的环境
* LPSTR szNewValue 新的变量值
* DWORD dwFlag 附加、重置还是清零,相关常量在env.h在定义
**************************************/
DWORD WINAPI ChangeEnviromentVariables(LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag)
{
DWORD dwErr;
PVOID szVal;
DWORD dwReturn;
DWORD dwNewValSize;
// 如果标志为附加则则先获取,然后将szNewValue附加到末尾
if(dwFlag == VARIABLES_APPEND)
{
dwNewValSize = lstrlen(szNewValue)+1; // 新变量值的大小
// 分配内存
szVal = HeapAlloc(GetProcessHeap(),0,BUFSIZE+dwNewValSize);
// 获取值
dwReturn = GetEnvironmentVariable(szName,szVal,BUFSIZE);
if(dwReturn == 0) // 出错
{
dwErr = GetLastError();
if( ERROR_ENVVAR_NOT_FOUND == dwErr )
{
printf("Environment variable %s does not exist.\n", szName);
}
else
{
printf("error: %d",dwErr);
}
return FALSE;
}
else if(BUFSIZE < dwReturn) // 缓冲区太小
{
szVal = (LPTSTR) HeapReAlloc(GetProcessHeap(), 0,szVal, dwReturn+dwNewValSize);
if(NULL == szVal)
{
printf("Memory error\n");
return FALSE;
}
dwReturn = GetEnvironmentVariable(szName, szVal, dwReturn);
if(!dwReturn)
{
printf("GetEnvironmentVariable failed (%d)\n", GetLastError());
return FALSE;
}
}
lstrcat(szVal,";"); // 分隔符
lstrcat(szVal,szNewValue); // 附加
//设置
if(!SetEnvironmentVariable(szName,szVal))
{
printf("Set Value Error %d",GetLastError());
}
// 释放内存
HeapFree(GetProcessHeap(),0,szVal);
return TRUE;
}
// 如果是重置,则直接设置
else if(dwFlag == VARIABLES_RESET)
{
if(!SetEnvironmentVariable(szName,szNewValue))
{
printf("Set value error %d",GetLastError());
}
}
// 清零,忽略szNewValue
else if(dwFlag == VARIABLES_NULL)
{
if(!SetEnvironmentVariable(szName,NULL))
{
printf("Set value error %d",GetLastError());
}
}
return TRUE;
}
env.h:
dll的导出函数
#include <windows.h>
#define VARIABLES_APPEND 1
#define VARIABLES_RESET 2
#define VARIABLES_NULL 0
DWORD WINAPI EnumEnvironmentVariables();
DWORD WINAPI ChangeEnviromentVariables(
LPSTR szName,
LPSTR szNewValue,
DWORD dwFlag);
调用部分:
/* 头文件 */
#include <windows.h>
#include <stdio.h>
#include "../env_dll/env.h"
/*************************************
* int main(void)
* 功能 演示虚拟内存的使用
*
* 参数 未使用
**************************************/
int main(void)
{
EnumEnvironmentVariables();
ChangeEnviromentVariables("PATH","C:\\",VARIABLES_APPEND);
EnumEnvironmentVariables();
ChangeEnviromentVariables("PATH","C:\\",VARIABLES_NULL);
EnumEnvironmentVariables();
ChangeEnviromentVariables("XX","C:\\",VARIABLES_RESET);
EnumEnvironmentVariables();
}
相关文章推荐
- 【C#学习笔记】获取当前应用程序所在路径及环境变量
- java 获取系统变量(环境变量和设置变量)
- Windows命令行获取当前bat文件所在目录,添加永久系统环境变量的方法
- C#获取当前应用程序所在路径及环境变量
- C#获取当前应用程序所在路径及环境变量
- mysql 获取设置环境变量
- getenv、setenv函数 获取和设置系统环境变量
- getenv、setenv函数 获取和设置系统环境变量
- linux下getenv、putenv、setenv获取设置环境变量
- C#获取当前应用程序所在路径及环境变量
- java 获取系统变量(环境变量和设置变量)
- Windows命令行获取当前bat文件所在目录,添加永久系统环境变量的方法
- Windows命令行获取当前bat文件所在目录,添加永久系统环境变量的方法
- 在 linux 下 使用代码(获取/设置)环境变量
- Java 中系统环境变量的设置和获取
- C#获取当前应用程序所在路径及环境变量
- Java 获取环境变量及获取和设置系统变量
- getenv和putenv在获取和设置环境变量中的使用
- 基于visual c++之windows核心编程代码分析(21)获取和设置环境变量
- Windows下利用C语言程序设置环境变量---能否用环境变量实现进程间的通信?