Qt自启动信息写入注册表

Qt自启动信息写入注册表

/*
*┌────────────────────────────────────────────────┐
*│ 描    述:Qt程序自启动设置	
*│ 作    者:windSnowLi
*│ 版    本:0.0.1
*│ 创建时间:2020/05/31
*└────────────────────────────────────────────────┘
*┌────────────────────────────────────────────────┐
*│ 命名空间:无
*│ 类    名:无
*│ 参    数:(int) 参数int 0为取消自启动,1为设置自启动,2为查询自启动,自启动返回true,不是自启动返回false
*└────────────────────────────────────────────────┘
*/
bool OperationAutoStart(int operation)
{
    
    
	//程序名称
	QString appName = QApplication::applicationName();
	// 程序路径
	QString application_path = QApplication::applicationFilePath();
	application_path.replace("/", "\\");
	application_path = "\"" + application_path + "\" auto";
	std::shared_ptr<QSettings> reg = std::make_shared<QSettings>(
		"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
		QSettings::NativeFormat);
	// 如果此键不存在,则返回的是空字符串
	QString val = reg->value(appName).toString();
	switch (operation) {
    
    
		//取消自启动
	case 0:
		//移除键
		reg->remove(appName);
		break;
		//设置自启动
	case 1:
		if (val != application_path) {
    
    
			//写入随意的字符串都能写入,但唯独自启动的程序路径写入自动成空,加入这个先添加空的值得解决了
			reg.setValue(appName, "\"\"");
			//设置键
			reg->setValue(appName, application_path);
		}
		break;
		//查询自启动
	case 2:
		if (val.compare(application_path) == 0) {
    
    
			reg->deleteLater();
			return true;
		}
		else {
    
    
			reg->deleteLater();
			return false;
		}
		break;
	default:
		reg->deleteLater();
		return false;
	}
	return false;
}

猜你喜欢

转载自blog.csdn.net/qq_44575789/article/details/106472309