C# 对桌面快捷方式的操作设置开机启动项

首先在项目中引入Windows Script Host Object Model,引入方式如下图。

对于桌面快捷方式的修改无非就是将现有的快捷方式修改和添加新的快捷方式。

1、遍历桌面快捷方式,代码如下。

cs 复制代码
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string[] files = Directory.GetFiles(desktopPath, "*.lnk");

            foreach (string file in files)
            {
                WshShell shell = new WshShell();
                IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(file);

                Debug.WriteLine($"快捷方式名称: {Path.GetFileNameWithoutExtension(file)}");
                Debug.WriteLine($"目标路径: {shortcut.TargetPath}");
                Debug.WriteLine($"工作目录: {shortcut.WorkingDirectory}");
                Debug.WriteLine($"描述: {shortcut.Description}");
                Debug.WriteLine($"图标位置: {shortcut.IconLocation}");
                //Debug.WriteLine();
            }

2、创建一个快捷方式,代码如下。

cs 复制代码
            // 创建WScript.Shell对象
            WshShell _shell = new WshShell();

            // 创建快捷方式
            IWshShortcut _shortcut = (IWshShortcut)_shell.CreateShortcut(@"C:\Users\Public\Desktop\来个快捷方式.lnk");

            // 设置快捷方式的属性
            _shortcut.TargetPath = @"C:\Program Files\ScreenToGif\ScreenToGif.exe";
            _shortcut.WorkingDirectory = @"C:\Program Files\ScreenToGif";
            _shortcut.Description = "来个快捷方式";
            _shortcut.IconLocation = "C:\\Program Files\\ScreenToGif\\ScreenToGif.exe,0";

            // 保存快捷方式
            _shortcut.Save();

            Debug.WriteLine("快捷方式已创建。");

3、设置开机启动项。

cs 复制代码
            //AppDomain.CurrentDomain.BaseDirectory 获取当前程序所在文件夹
            //Application.Current.Shutdown(); 退出当前程序
            
            string appPath = @"C:\Program Files\ScreenToGif\ScreenToGif.exe"; // 替换为你的应用程序路径
            string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run";

            RegistryKey key = Registry.CurrentUser.CreateSubKey(keyName);
            if (key != null)
            {
                key.SetValue("来个快捷方式", appPath); // "YourAppName"是注册表项的名称
                key.Close();
                Debug.WriteLine("应用程序已设置为开机启动。");
            }

4、有些时候设置好桌面的快捷方式,但是不能马上显示,需要刷新一下桌面才行,下面的代码是刷新桌面的代码。

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace XXXX
{
    public class DesktopRefurbish
    {
        /// <summary>
        /// 桌面刷新
        /// </summary>
        [DllImport("shell32.dll")]
        public static extern void SHChangeNotify(HChangeNotifyEventID wEventId, HChangeNotifyFlags uFlags, IntPtr dwItem1, IntPtr dwItem2);
        public static void DeskRef()
        {
            SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
        }
    }
    #region public enum HChangeNotifyFlags
    [Flags]
    public enum HChangeNotifyFlags
    {
        SHCNF_DWORD = 0x0003,
        SHCNF_IDLIST = 0x0000,
        SHCNF_PATHA = 0x0001,
        SHCNF_PATHW = 0x0005,
        SHCNF_PRINTERA = 0x0002,
        SHCNF_PRINTERW = 0x0006,
        SHCNF_FLUSH = 0x1000,
        SHCNF_FLUSHNOWAIT = 0x2000
    }
    #endregion//enum HChangeNotifyFlags
    #region enum HChangeNotifyEventID
    [Flags]
    public enum HChangeNotifyEventID
    {
        SHCNE_ALLEVENTS = 0x7FFFFFFF,
        SHCNE_ASSOCCHANGED = 0x08000000,
        SHCNE_ATTRIBUTES = 0x00000800,
        SHCNE_CREATE = 0x00000002,
        SHCNE_DELETE = 0x00000004,
        SHCNE_DRIVEADD = 0x00000100,
        SHCNE_DRIVEADDGUI = 0x00010000,
        SHCNE_DRIVEREMOVED = 0x00000080,
        SHCNE_EXTENDED_EVENT = 0x04000000,
        SHCNE_FREESPACE = 0x00040000,
        SHCNE_MEDIAINSERTED = 0x00000020,
        SHCNE_MEDIAREMOVED = 0x00000040,
        SHCNE_MKDIR = 0x00000008,
        SHCNE_NETSHARE = 0x00000200,
        SHCNE_NETUNSHARE = 0x00000400,
        SHCNE_RENAMEFOLDER = 0x00020000,
        SHCNE_RENAMEITEM = 0x00000001,
        SHCNE_RMDIR = 0x00000010,
        SHCNE_SERVERDISCONNECT = 0x00004000,
        SHCNE_UPDATEDIR = 0x00001000,
        SHCNE_UPDATEIMAGE = 0x00008000,
    }
    #endregion
}

5、关闭防火墙,代码如下。

cs 复制代码
            try
            {
                ProcessStartInfo psi = new ProcessStartInfo
                {
                    FileName = "netsh",
                    Arguments = "advfirewall set allprofiles state off",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = true
                };

                Process process = Process.Start(psi);
                process.WaitForExit();

                Debug.WriteLine("Windows 防火墙已关闭。");
            }
            catch (Exception ex)
            {
                Debug.WriteLine("关闭 Windows 防火墙时出错: " + ex.Message);
            }
相关推荐
ylfhpy14 分钟前
Java面试黄金宝典19
java·开发语言·数据结构·算法·面试·面经
码农幻想梦29 分钟前
18491 岛屿的数量
android·java·开发语言
Angelyb29 分钟前
前端Vue
开发语言·javascript·ecmascript
lljss202031 分钟前
C# exe窗体项目改dll并调用
c#
MobiCetus32 分钟前
C++中的智能指针
开发语言·jvm·c++
白羊不吃白菜38 分钟前
PAT乙级(1107 老鼠爱大米)C语言详解
c语言·开发语言
HashFlag1 小时前
Go常用的设计模式
开发语言·设计模式·golang
自不量力的A同学1 小时前
Next.js 中间件曝高危漏洞 CVE-2025-29927,授权绕过风险波及全版本
开发语言·javascript·中间件
LIUJH12331 小时前
哈希冲突 及 双哈希
开发语言·数据结构·c++·算法·哈希算法
java1234_小锋1 小时前
一周学会Flask3 Python Web开发-SQLAlchemy数据迁移migrate
开发语言·前端·python·flask·flask3