关于通过注册表设置程序自启动

系统对于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);
}

你可能感兴趣的:(关于通过注册表设置程序自启动)