系统对于32位程序这种注册表操作,都写在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run里面去了
Win7和Win8的64位把32位程序和64位分开管理了
HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run这个目录是管理64位的
如果你是32位系统使用前一个注册表项
如果你是64位系统使用后一个注册表项
LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE | KEY_WOW64_64KEY, &hKey);
void SetAutoStart()
{
//把当前路径中的TTS播放程序YLYT_TTSPlayer.exe设置为开机自动启动
TCHAR path[512];
GetModuleFileName(NULL, path, sizeof(path));
TCHAR* ptr = &path[lstrlen(path)];
while (ptr > path&& *ptr != _T('\\')) ptr--;
*ptr = 0;
TCHAR DispatcherApp[1024];
wsprintf(DispatcherApp, _T("%s\\TTSPlayer.exe"), path);
HKEY hKey;
//LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey);
LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE | KEY_WOW64_64KEY, &hKey);
if (result != ERROR_SUCCESS){
RegCloseKey(hKey);
mylog("开机自动启动设置失败[%d]!\n", result);
return;
}
result = RegSetValueEx(hKey, L"TTSPlayer", NULL, REG_SZ, (CONST BYTE *)DispatcherApp, sizeof(TCHAR) * lstrlen (DispatcherApp)+1);
if (result != ERROR_SUCCESS){
//AfxMessageBox(_T("设置失败2!"));
mylog("开机自动启动设置失败[%d]\n", result);
}
RegCloseKey(hKey);
}