【代码备忘】VC设置电脑环境变量、注册表操作

来源:互联网 发布:哈密顿通路算法 编辑:程序博客网 时间:2024/05/17 06:26

欢迎加入C/C++ QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 


【设置电脑环境变量】

设置电脑环境变量很简单,因为window而言,环境变量都对应的存储在注册表中,所以只要写注册表就能做到新增删除修改环境变量了!

So easy

环境变量在注册表中的位置: HKEY_CURRENT_USER ->Environment


so 看代码:

bool createComputerPath()    {        if(createReg(HKEY_CURRENT_USER,L"Environment",L"PathName",L"PathValue"))        {            //DWORD dwRet=0;            //SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, (LPARAM)"Environment", SMTO_NOTIMEOUTIFNOTHUNG, INFINITE, &dwRet);            //SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE , NULL, (LPARAM)"Environment",SMTO_NORMAL, 1000, &dwRet);            //SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE , NULL, (LPARAM)"Environment", SMTO_NOTIMEOUTIFNOTHUNG,1000, &dwRet);            ::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment")); //由于新增环境只会 没有立即生效,所以需要发送//WM_SETTINGCHANGE消息给所有窗口,刷新环境变量return true; } return false;  }   


【新增注册表项】

    bool createReg(HKEY table,LPCTSTR key,LPCTSTR item,LPCTSTR values)    {        HKEY hAppKey = NULL;        HKEY hSoftKey = NULL;        if (RegOpenKeyEx(table, key, 0, KEY_WRITE|KEY_READ,&hSoftKey) == ERROR_SUCCESS)        {            if(RegSetValueEx(hSoftKey,                item,                NULL,                REG_SZ,                (LPBYTE)values,                 (lstrlen(values)+1) * sizeof(TCHAR)) == ERROR_SUCCESS)            {                if (hSoftKey != NULL)                {                    RegCloseKey(hSoftKey);                }                   if (hAppKey != NULL)                {                    RegCloseKey(hAppKey);                }                   return true;            }        }        if (hSoftKey != NULL)        {            RegCloseKey(hSoftKey);        }           if (hAppKey != NULL)        {            RegCloseKey(hAppKey);        }           return false;    }

【读取注册表】

    std::string getInnoSetupPath()    {        //CString regPath = L"HKEY_CLASSES_ROOT\InnoSetupScriptFile\shell\open\command";        HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭        LPCTSTR data_Set=L"InnoSetupScriptFile\\shell\\open\\command\\";        if(::RegOpenKeyEx(HKEY_CLASSES_ROOT,data_Set,0,KEY_READ,&hKEY) != ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行        {            return "";        }        TCHAR res[MAX_PATH];//=new BYTE[MAX_PATH];        DWORD type_1=REG_SZ;//定义数据类型        DWORD cbData_1=MAX_PATH;//定义数据长度        if(RegQueryValueEx(hKEY,L"",NULL,&type_1,(LPBYTE)res,&cbData_1)!=ERROR_SUCCESS)        {            return "";        }                ::RegCloseKey(hKEY);        return CStringConvert::CString2string(res);//CString转string    }

欢迎加入C/C++ QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

0 0
原创粉丝点击