C# c++ 实现程序开机自启动

C# c++ 实现程序开机自启动

1、C#

1、使用注册表

cpp 复制代码
using Microsoft.Win32;

public static void SetAutoStart(bool enable)
{
    RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    if (enable)
    {
        rk.SetValue("MyApp", Application.ExecutablePath);
    }
    else
    {
        rk.DeleteValue("MyApp", false);
    }
    rk.Close();
}

2、使用启动文件夹

cpp 复制代码
using System;
using System.IO;
using IWshRuntimeLibrary;

public static void SetAutoStartByStartupFolder(bool enable)
{
    string startupFolder = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
    string shortcutPath = Path.Combine(startupFolder, "MyApp.lnk");

    if (enable)
    {
        // 创建快捷方式
        WshShell shell = new WshShell();
        IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);
        shortcut.TargetPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
        shortcut.WorkingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        shortcut.Description = "My Application";
        shortcut.Save();
    }
    else
    {
        // 删除快捷方式
        if (File.Exists(shortcutPath))
        {
            File.Delete(shortcutPath);
        }
    }
}

2、C++

1、使用注册表

cpp 复制代码
#include <Windows.h>
#include <string>

bool SetAutoStart(bool enable) {
    HKEY hKey;
    LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
    LONG lResult = RegOpenKeyEx(HKEY_CURRENT_USER, lpSubKey, 0, KEY_SET_VALUE, &hKey);
    if (lResult != ERROR_SUCCESS) {
        return false;
    }

    TCHAR szExePath[MAX_PATH];
    GetModuleFileName(NULL, szExePath, MAX_PATH);

    if (enable) {
        // 设置注册表值,程序路径
        lResult = RegSetValueEx(hKey, TEXT("MyApp"), 0, REG_SZ, (BYTE*)szExePath, (lstrlen(szExePath) + 1) * sizeof(TCHAR));
    } else {
        // 删除注册表值
        lResult = RegDeleteValue(hKey, TEXT("MyApp"));
    }

    RegCloseKey(hKey);
    return lResult == ERROR_SUCCESS;
}

2、使用启动文件夹

cpp 复制代码
#include <Windows.h>
#include <ShlObj.h>
#include <string>

bool SetAutoStartByStartupFolder(bool enable) {
    TCHAR szStartupPath[MAX_PATH];
    TCHAR szExePath[MAX_PATH];
    TCHAR szLinkPath[MAX_PATH];

    // 获取启动文件夹路径
    if (FAILED(SHGetFolderPath(NULL, CSIDL_STARTUP, NULL, 0, szStartupPath))) {
        return false;
    }

    // 获取当前程序路径
    GetModuleFileName(NULL, szExePath, MAX_PATH);

    // 构造快捷方式路径
    _stprintf_s(szLinkPath, MAX_PATH, TEXT("%s\\MyApp.lnk"), szStartupPath);

    if (enable) {
        // 创建快捷方式
        // 使用Shell API创建快捷方式
        HRESULT hres;
        IShellLink* pShellLink = NULL;
        IPersistFile* pPersistFile = NULL;

        hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&pShellLink);
        if (SUCCEEDED(hres)) {
            pShellLink->SetPath(szExePath);
            pShellLink->SetDescription(TEXT("My Application"));

            hres = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile);
            if (SUCCEEDED(hres)) {
                pPersistFile->Save(szLinkPath, TRUE);
                pPersistFile->Release();
            }
            pShellLink->Release();
        }
        return SUCCEEDED(hres);
    } else {
        // 删除快捷方式
        return DeleteFile(szLinkPath) != 0;
    }
}
相关推荐
专注于大数据技术栈20 分钟前
java学习--final
java·开发语言·学习
gihigo199826 分钟前
基于MATLAB的IEEE 14节点系统牛顿-拉夫逊潮流算法实现
开发语言·算法·matlab
合作小小程序员小小店40 分钟前
游戏开发,桌面%小游戏,贪吃蛇%demo,基于vs2022,c语言,easyX,无数据库
c语言·开发语言
x***J3481 小时前
Python多线程爬虫
开发语言·爬虫·python
AA陈超1 小时前
从0开始学习 **Lyra Starter Game** 项目
c++·笔记·学习·游戏·ue5·lyra
m***D2861 小时前
Python网络爬虫实战案例
开发语言·爬虫·python
q***T5832 小时前
C++在游戏中的Unreal Engine
c++·游戏·虚幻
保持低旋律节奏2 小时前
C++——C++11特性
开发语言·c++·windows
ID_180079054732 小时前
基于 Python 的淘宝商品详情数据结构化解析:SKU、价格与库存字段提取
开发语言·数据结构·python