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);
            }
相关推荐
挣钱花3884 分钟前
Vue2时间轴组件(TimeLine/分页、自动顺序播放、暂停、换肤功能、时间选择,鼠标快速滑动)
开发语言·前端·javascript
鹿野素材屋5 分钟前
Unity3D类似于桌面精灵的功能实现
unity·c#·游戏引擎
陈大爷(有低保)19 分钟前
Java多线程——模拟看病叫号
java·开发语言
顶呱呱程序23 分钟前
2-93 基于matlab的无人机FMCW(频率调制连续波)毫米波高度计雷达仿真
开发语言·matlab·无人机·毫米波高度计雷达仿真·频率调制连续波·fmcw
Wangx_wang32 分钟前
C++——list常见函数的使用和模拟实现(2)
开发语言·c++·list
MessiGo35 分钟前
Qt 实战(10)模型视图 | 10.4、模型角色
开发语言·qt
搁浅°87940 分钟前
Collection
java·开发语言·windows
nice666601 小时前
xml基础
xml·java·开发语言·前端·css·bootstrap·idea
Evand J1 小时前
【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接
开发语言·matlab·r语言
小白学大数据1 小时前
利用R语言进行头条主页内容的自动化下载
开发语言·r语言·自动化