/*
autorun.hpp
sdragonx 2018-02-19 16:27:13
*/
#ifndef AUTORUN_HPP_20180219162713
#define AUTORUN_HPP_20180219162713
#include <windows.h>
#include "ttype.hpp"//之前文章里面有
namespace cgl{
namespace windows{
namespace app{
//判断软件是否开机运行
template<typename _char_t>
bool is_autorun(const _char_t* appname)
{
_char_t buf[MAX_PATH] = {0};
DWORD n = MAX_PATH;
HKEY hKey;
DWORD type = REG_SZ;
bool autorun = false;
LONG result = tvalue<_char_t>(RegOpenKeyExA, RegOpenKeyExW)(
HKEY_CURRENT_USER,
T_TEXT(_char_t, "Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0, KEY_READ, &hKey);
if(ERROR_SUCCESS == result)
{
tvalue<_char_t>(RegQueryValueExA, RegQueryValueExW)(hKey, appname, 0, &type, buf, &n);
if(n){
if(!cscmp(buf, appname)){
autorun = true;
}
}
RegCloseKey(hKey);
}
return autorun;
}
//设置是否开机运行,兼容xp
template<typename _char_t>
bool set_autorun(const _char_t* appname, const _char_t* exefile, bool run)
{
HKEY hKey;
bool autorun = false;
LONG result = tvalue<_char_t>(RegOpenKeyExA, RegOpenKeyExW)(
HKEY_CURRENT_USER,
T_TEXT(_char_t, "Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0, KEY_WRITE, &hKey);
if(ERROR_SUCCESS == result)
{
if(run){
tvalue<_char_t>(RegSetValueExA, RegSetValueExW)(hKey, appname, 0, REG_SZ, (BYTE*)exefile, cslen(exefile)*sizeof(_char_t));
autorun = true;
}
else{
tvalue<_char_t>(RegDeleteValueA, RegDeleteValueW)(hKey, appname);
autorun = false;
}
RegCloseKey(hKey);
}
return autorun;
}
}//end namespace app
}//end namespace windows
}//end namespace cgl
#endif //AUTORUN_HPP_20180219162713
char* app_name = "myapp";
char* app = "myapp.exe";
if(!is_autorun(app_name)){
set_autorun(app, true);
}
模板函数,到哪都能用。