#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;
}
qt windows 开机自启和关闭
于 2024-05-16 11:28:39 首次发布