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;
}
}