1. 程式人生 > >在Windows系統上以C++打印出當前活動用戶的環境變量

在Windows系統上以C++打印出當前活動用戶的環境變量

include copyto cal ntb views read += tac windows.h

在Windows系統上以C++打印出當前活動用戶的環境變量,代碼如下(QT環境):

[cpp] view plain copy
  1. void getEnvironmentVariables()
  2. {
  3. DWORD sessionId = WTSGetActiveConsoleSessionId();
  4. qInfo() << "Session ID = " << sessionId;
  5. HANDLE token;
  6. if (!WTSQueryUserToken(sessionId, &token))
  7. {
  8. qCritical() << "Failed to get the user token of session " << sessionId;
  9. }
  10. wchar_t* pEnv = NULL;
  11. if (CreateEnvironmentBlock((void**)&pEnv, token, TRUE))
  12. {
  13. while (*pEnv) {
  14. // printf("%ls\n", pEnv);
  15. qInfo() << QString::fromWCharArray(pEnv);
  16. pEnv += wcslen(pEnv) + 1;
  17. }
  18. }
  19. }


以上是打印當前活動用戶(active user)的。

如果僅僅是是打印當前進程所處環境的環境變量,見Visual Studio的代碼如下:

[cpp] view plain copy
    1. #include <Windows.h>
    2. #include <UserEnv.h>
    3. #include <assert.h>
    4. #include <stdio.h>
    5. #pragma comment(lib, "userenv.lib")
    6. int main()
    7. {
    8. HANDLE hToken = NULL;
    9. BOOL ok = OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
    10. assert(ok);
    11. wchar_t* penv = L"";
    12. ok = CreateEnvironmentBlock((void**)&penv, hToken, TRUE);
    13. assert(ok);
    14. while (*penv) {
    15. printf("%ls\n", penv);
    16. penv += wcslen(penv) + 1;
    17. }
    18. return 0;
    19. }

http://blog.csdn.net/nirendao/article/details/52040232

在Windows系統上以C++打印出當前活動用戶的環境變量