qt windows 开机自启和关闭

#include <Windows.h>
#include <WtsApi32.h>

#include <string>
#include <locale>
#include <codecvt>

std::wstring g_wstrExePath;
HKEY hkey;

//convert string to wstring
inline std::wstring to_wide_string(const std::string& input)
{
	std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
	return converter.from_bytes(input);
}
 
//convert wstring to string 
inline std::string to_byte_string(const std::wstring& input)
{
	std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
	return converter.to_bytes(input);
}


//开启
//name应用程序名, strExePath可执行程序路径
bool startup_with_system(const std::string& name, const std::string& strExePath)
{
    std::wstring wstrProgramName = to_wide_string(name);
    g_wstrExePath = to_wide_string(strExePath);

    // open startup handle
    if (RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS) {
        // check key
        TCHAR strDir[MAX_PATH] = {};
        DWORD nLength = MAX_PATH;
        // If the function succeeds, the return value is ERROR_SUCCESS.
        long result = RegGetValue(hkey, nullptr, wstrProgramName.c_str(), RRF_RT_REG_SZ, 0, strDir, &nLength);

        // key already exist
        if (result != ERROR_SUCCESS) {
            // add register key
            RegSetValueEx(hkey, wstrProgramName.c_str(), 0, REG_SZ, (LPBYTE)g_wstrExePath.c_str(),
                          (g_wstrExePath.length() + 1) * sizeof(TCHAR));
            // close register
            RegCloseKey(hkey);
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
//关闭
//strProgramName 应用程序名
bool RemoveStartupWithSystem(const std::string& strProgramName)
{
    std::wstring wstrProgramName = to_wide_string(strProgramName);

    auto nCode = RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hkey);
    if (ERROR_SUCCESS == nCode)
    {
        RegDeleteValue(hkey, wstrProgramName.c_str());
        RegCloseKey(hkey);
        return true;
    }
    return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值