父进程向其环境块添加一个环境变量,变量的名称应该是子进程知道的一个名称,然后当父进程生成子进程的时候,这个子进程会继承父进程的环境变量,所以能轻松调用GetEnvironmentVariable来获得这个环境变量的值。如果子进程还要生成另一个子进程,这种方式就应该非常不错,因为环境变量是可以反复继承的。
代码举例:
父进程:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR lpName(_T("zzc"));
LPCTSTR lpValue(_T("88888"));
//设置环境变量的值
::SetEnvironmentVariable(lpName,lpValue);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
if( !CreateProcess( _T("D:\\绘图编程\\Parent\\Debug\\Child.exe"),
NULL,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi) )
{
cout <<"shibai" <<endl;
}
else{
cout << "chenggong" << endl;
}
return 0;
}
子进程:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR lpName(_T("zzc"));
int nlength = ::GetEnvironmentVariable(lpName,NULL,0);
LPTSTR lpValue = new TCHAR[nlength+1];
memset(lpValue,'\0',nlength+1);
::GetEnvironmentVariable(lpName,lpValue,nlength+1);
setlocale(LC_ALL, "chs");
_tprintf(lpValue);
cout << endl;
system("pause");
return 0;
}
注:CreateProcess()参数5:
表示新进程是否从调用进程处继承了内核对象句柄。如果参数的值为 TRUE,调用进程中的每一个可继承的内核对象句柄都将被子进程继承,这样我们可以通过环境变量的形式将所继承的某个句柄值传递给子进程,子进程就可以通过收到的句柄值对内核对象进行操作了,被继承的句柄与原进程拥有完全相同的值和访问权限;如果设为 FALSE,那么不继承。