środa, 28 października 2009

Ustawienie zmiennej środowiskowej w systemie

Po ustawieniu zmiennej środowiskowej wymagany jest restart systemu

function BOOL SetEnvironment(szName, szValue, bDodaj, bLog)
#define WM_WININICHANGE 0x001A
#define WM_SETTINGCHANGE 0x001A
#define SMTO_ABORTIFHUNG 0x2
#define HWND_BROADCAST 0xffff
BOOL bResult;
NUMBER nResult, nvSize, nType;
NUMBER nvFileHandle;
STRING szKey, szEnv, svValue;
STRING szProgram, szCmdLine, szLine;
LONG bvReturn;
BOOL bFind;
POINTER pEnv;
LIST szList1;
int i;
begin
if (bLog) then WriteLog(0,"Ustawienie zmiennej środowiskowej "+szName+"..."); endif;
bResult = FALSE;
nvSize = -1;
//nType = REGDB_STRING;
nType = REGDB_STRING_EXPAND;
szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
if !bDodaj then
if RegDBGetKeyValueEx (szKey, szName, nType, svValue, nvSize )=0 then //pobierz dotychczasowe wartosci
if StrFind(svValue,szValue)<0 then nResult = RegDBSetKeyValueEx(szKey, szName, REGDB_STRING, szValue, -1); //Ustawienie zmiennej else if bLog then WriteLog(1,"- zmienna systemowa ustawiona w systemie \""+szName+"\" o wartości: \""+szValue+"\""); endif; return FALSE; endif; else nResult = RegDBSetKeyValueEx(szKey, szName, REGDB_STRING, szValue, -1); //Ustaiwienie zmiennej endif; else if RegDBGetKeyValueEx (szKey, szName, nType, svValue, nvSize )=0 then //pobierz dotychczasowe wartosci if StrLength(svValue)>0 then
if StrFind(svValue,szValue)<0 then svValue = svValue + ";" + szValue; else if (bLog) then WriteLog(1,"- zmienna systemowa \""+szName+"\" o wartości: \""+szValue+"\" już ustawiona"); endif; return FALSE; endif; else svValue = szValue; endif; nResult = RegDBSetKeyValueEx(szKey, szName, REGDB_STRING, svValue, -1); else nResult = RegDBSetKeyValueEx(szKey, szName, REGDB_STRING, szValue, -1); //ustaw nowa zmienna endif; endif; if (nResult < 0) then if bLog then WriteLog(1,"- nie udało się ustawić zmiennej systemowej \""+szName+"\" o wartości: \""+szValue+"\""); endif; else if bLog then WriteLog(1,"- ustawiono zmienną systemową \""+szName+"\" o wartości: \""+szValue+"\""); endif; szEnv = "Environment"; pEnv = &szEnv; SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, pEnv ); bResult = TRUE; endif; return bResult; end;

Brak komentarzy:

Prześlij komentarz