[C++] Environment variabele schrijven naar Windows

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sperenvanger
  • Registratie: December 2000
  • Laatst online: 19-09 12:53
Ik heb een klein probleem met onderstaand stukje code. Wat ik wil (en al kan) is uit de Windows Environment de username halen, de eerste 2 karakters er van weg gooien. Mijn probleem zit echter bij het terugschrijven. Ik krijg het er niet in. Hij print op het scherm nu het commando wat ik in Windows zou moeten uitvoeren zodat ik het nu kan echoën naar een bat bestand maar dat vind ik niet netjes. De fout zit in regel 11, ik krijg op geen enkele manier dan ook maar iets aangemaakt in het Environment. Ik heb al verschillende manieren geprobeerd, inclusief "setenv()" maar ik kom er niet uit. Wie verlost mij? :)

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;

int main ()
{
   char * ibusername = getenv("USERNAME");
   string str=ibusername;
   string str2;
   size_t pos;
   str2 = str.substr (2,50); //Selecteer vanaf karakter 2, dat mogen er max 50 zijn
   putenv("realusername=str2");
   cout<<"set realusername="<< str2;

  return 0;
}

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik weet niet of u code juist is, maar dit is in ieder geval fout:
C++:
1
   putenv("realusername=str2"); 


Moest uw code werken, dan moet dit in ieder geval:

C++:
1
    putenv("realusername=" + str2); 

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het kan sowieso niet. Het environment is lokaal aan je proces. Je kunt dat dus wel aanpassen, maar die aanpassingen zie je alleen terug in hetzelfde proces - alle andere processen blijven ongemoeid.
Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify system environment variables using the Control Panel. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message. This allows applications, such as the shell, to pick up your updates. Note that environment variables listed in this key are limited to 1024 characters.
Het is dus sowieso zo dat als je die registry key aanpast en de WM_SETTINGCHANGE stuurt, je nog altijd afhankelijk bent van andere processen om dat bericht af te vangen en dan zelf weer die registry key gaan uitlezen. De environments in andere processen zal dus niet zomaar veranderen.
Snake schreef op dinsdag 15 juli 2008 @ 21:33:
Moest uw code werken, dan moet dit in ieder geval:

C++:
1
    putenv("realusername=" + str2); 
putenv() verwacht een const char * en geen std::string. Je moet dus ("realusername=" + str2).c_str() doen.

[ Voor 40% gewijzigd door .oisyn op 15-07-2008 21:49 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.