1.注册表 开机自启项,环境变量 地址
如下为本次修改的注册表地址 。
//开机自启项
#define REG_RUN "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
//全局环境变量
#define REG_PATH "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"
//用户环境变量
#define REG_USERPATH "HKEY_CURRENT_USER\\Environment"
通过QT修改和查看注册表
首先给出代码
void setAutoStart(const QString path,const QString name,const QString value)
{
QSettings *settings = new QSettings(path/*REG_RUN*/, QSettings::NativeFormat);
settings->setValue(name, value);
delete settings;
}
void getSettingApp(const QString path,const QString name,QString &strvalue)
{
QSettings *settings = new QSettings(path/*REG_RUN*/, QSettings::NativeFormat);
strvalue = settings->value(name,QString("")).toString();
delete settings;
}
QT自带的Qsetting可直接修改,QSettings::NativeFormat QT给的解释中这样的写的,并且不需要管理员权限:
QSettings::NativeFormat 0
Store the settings using the most appropriate storage format for the platform. On Windows, this means the system registry; on macOS and iOS, this means the CFPreferences API; on Unix, this means textual configuration files in INI format.
使用最适合平台的存储格式存储设置。在Windows上,这意味着系统注册表。在macOS和iOS上,这意味着CFPreferences API;在Unix上,这意味着INI格式的文本配置文件。
通过C修改和查看查看环境变量
getenv(“Path”);//返回环境变量名为 Path的值
注意: getenv获取的变量名在环境变量中没有,程式会卡住,如果不用管理员打开,程式会卡住
使用 _dupenv_s可以防止程式卡死情况,但是两种方式都需要管理员权限才能获取到值,比较鸡肋
char* buf = nullptr;
size_t sz = 0;
if (_dupenv_s(&buf, &sz, "SDT_BASEAOI") == 0 && buf != nullptr)
{
printf("SDT_BASEAOI = %s\n", buf);
free(buf);
}
setenv 和 putenv都可已修改环境变量的值,但只是在本次程式中有效,就更鸡肋的,所以不多介绍。