huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


获取程序自身路径详见http://huidong.xyz/?mode=2&id=172 


把这个开机自启动的代码做成了一个函数,复制代码后直接调用即可,上码:

//要添加这两个头文件,缺一不可
#include <windows.h>
#include <winuser.h>
 
void HKRunator()
{
    //获取程序路径
 
    char programName[100];
    GetModuleFileName(NULL, programName, 100); //调用win api 获得路径
 
    //获取程序路径 -- 结束
 
    HKEY hkey = NULL;
    DWORD rc;
 
    rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE,                      //创建一个注册表项,如果有则打开该注册表项
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_ALL_ACCESS,
        NULL,
        &hkey,
        NULL);
 
    if (rc == ERROR_SUCCESS)   
    {
        rc = RegSetValueEx(hkey, 
            "MyApp",    /* 改为你的程序名称 */
            0,
            REG_SZ,
            (const BYTE *)programName,
            strlen(programName));
        if (rc == ERROR_SUCCESS)
        {
            RegCloseKey(hkey);
        }
    }
}

注意,程序必须以管理员模式开启,注册表写入才生效


各字符集通用版,需要传入路径参数:

// programName 要设置开机自启的程序路径
// 返回值:表示是否设置成功
bool HKRunator(const TCHAR* programName)
{
    HKEY hkey = NULL;
    DWORD rc;

    rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE,                      //创建一个注册表项,如果有则打开该注册表项
        _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_ALL_ACCESS,
        NULL,
        &hkey,
        NULL);

    if (rc == ERROR_SUCCESS)
    {
        rc = RegSetValueEx(hkey,
            _T("YourAppName"),    /* 改为你的程序名称 */
            0,
            REG_SZ,
            (const BYTE*)programName,
            lstrlen(programName));
        if (rc == ERROR_SUCCESS)
        {
            RegCloseKey(hkey);
        }
    }
    else
    {
        return false;
    }

    return true;
}


注意,函数里YourAppName那个字符串的地方,如果设置的是不同的程序开机自启,那么这个YourAppName也不能一样。



返回首页


Copyright (C) 2018-2024 huidong