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

news2024/9/19 10:43:14

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

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

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

            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、创建一个快捷方式,代码如下。

            // 创建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、设置开机启动项。



            //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、有些时候设置好桌面的快捷方式,但是不能马上显示,需要刷新一下桌面才行,下面的代码是刷新桌面的代码。

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、关闭防火墙,代码如下。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习:DBSCAN算法(内有精彩动图)

目录 前言 一、DBSCAN算法 1.动图展示&#xff08;图片转载自网络&#xff09; 2.步骤详解 3.参数配置 二、代码实现 1.完整代码 2.代码详解 1.导入数据 2.通过循环确定参数最佳值 总结 前言 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications w…

World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Strand of the Ancients

Call to Arms: Strand of the Ancients - Quest - 魔兽世界怀旧服CTM4.34《大地的裂变》数据库_大灾变85级魔兽数据库_ctm数据库 Call to Arms: Strand of the Ancients 战斗的召唤&#xff1a;远古海滩 打掉最后一个门【古代圣物之厅】&#xff0c;人跳进去就赢了

算法之二分查找法和双指针

用二分查找法刷leetcode算法题目的时候&#xff0c;经常遇到视频看着理解很透彻&#xff0c;当上手写时一看就会&#xff0c;一写就废。二分查找法涉及边界条件很多&#xff0c;逻辑很简单&#xff0c;就是写不好。何时写 while(left<right)&#xff0c;while(left<right…

【动态规划】背包问题 - 二维费用的01背包问题

文章目录 1. 前言2. 二位费用的01背包问题2.1_一和零2.2_盈利计划2.3_珠宝的最高价值 3. 似包非包问题3.1_不同的二叉搜索树3.2_组合总和Ⅳ 1. 前言 关于 动态规划的理解 与例题&#xff0c;点击&#x1f447; 【动态规划】C解决斐波那契模型题目&#xff08;三步问题、爬楼梯…

winXP下构建python开发环境

近期车间有个动平衡检测仪数采的需求&#xff0c;工控机是xp系统&#xff0c;原理也很简单&#xff0c;监控文件变化&#xff0c;发现有新的检测数据就调用远程接口传输到服务器上去。 通常python监控文件变化会用watchdog这个库&#xff0c; 可是xp太老了&#xff0c;测试了一…

身份实名认证-身份证实名认证-身份证实名-实名认证-身份证二要素-身份证实名认证-身份实名认证-身份证号码实名认证核验校验接口

身份证号码实名认证接口API是一种服务&#xff0c;它允许开发者或企业通过编程方式验证用户提供的身份证号码是否真实有效&#xff0c;以及该身份证号码与提供者的姓名是否匹配。这种服务对于确保用户身份的真实性、防止欺诈行为以及遵守相关法律法规&#xff08;如反洗钱法、网…

自博弈-PSRO类方法综述

参考文章&#xff1a;PSRO2024最新综述 关键名词 解释 Meta-Strategy Solver (MSS) 元博弈求解器&#xff0c;从现有策略集合中提取meta-strategy&#xff08;策略集合中每个策略对应一个权重&#xff09;用于构造新策略的优化目标 Response Objective&#xff08;RO&#…

【系统分析师】-缓存

目录 1、常见分类 2、集群切片方式 3、Redis 3.1、分布式存储方式 3.2、数据分片方式 3.3、数据类型 3.4、持久化方案 3.5、内存淘汰机制 3.6、Redis常见问题 4、布隆过滤器 1、常见分类 1、MemCache Memcache是一个高性能的分布式的内存对象缓存系统&#xff0c;用…

RocketMQ:高速消息中间件的秘密武器

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 关于RocketMQ的详细图表&#xff0c;包含了Producer、Consumer、Broker和NameServer等关键组件&#xff0c;展示…

你知道有哪些Spring MVC扩展点可以解析接口参数和处理返回值吗?

1.概述 Spring MVC 是一个灵活且强大的框架&#xff0c;它允许开发者在框架的基础上进行深度定制&#xff0c;以满足各种复杂的业务需求。HandlerMethodArgumentResolver 和 HandlerMethodReturnValueHandler 是 Spring MVC 提供的两个重要扩展点&#xff0c;分别用于处理控制…

SLF4J 警告 - SLF4J: Class path contains multiple SLF4J bindings.

SLF4J 警告是因为类路径中存在多个 SLF4J 绑定。SLF4J 是一个抽象的日志接口&#xff0c;它可以与不同的日志实现&#xff08;如 Logback 或 SLF4J Simple&#xff09;一起使用。这个警告表明在你的项目中&#xff0c;SLF4J 找到了多个实现&#xff0c;导致它不知道该使用哪一个…

python如何判断回文

打开JUPTER NOTEBOOK&#xff0c;新建一个PYTHON文档。 n input("Please input string: ") print(n) 我们首先让用户输入要进行判断的字符串&#xff0c;然后打印出来查看一下。 n input("Please input string: ") is_palidrome n[::-1] if n is_palid…

Windows IPv6漏洞CVE-2024-38063

2024年8月&#xff0c;微软发现Windows10、Windows11、Windows Server2008~Server2022系统里&#xff0c;有个TCP/IP栈的远程代码执行漏洞&#xff0c;它通过目标系统的445端口&#xff0c;走IPv6协议&#xff0c;向目标系统发生特制的TCP包&#xff0c;执行任意代码&#xff0…

MySQL索引(三)

MySQL索引(三) 文章目录 MySQL索引(三)为什么建索引&#xff1f;怎么建立索引为什么不是说索引越多越好什么时候不用索引更好 索引怎么优化索引失效如何解决索引失效 学习网站&#xff1a;https://xiaolincoding.com/ 为什么建索引&#xff1f; 1.索引大大减少了MySQL需要扫描…

io进程中进程的创建,回收,退出

目录 一丶什么是进程 1.概念 2.特点 3 进程段 4.进程分类 5.进程状态 6.进程状态切换图 7.进程相关命令 8.优先级调度 二丶进程函数接口 1.创建进程fork() 2.进程回收wait() 3.结束进程exit() 4.获取进程号getpid(),getppid() 5.exec函数族 6.守护进程 特点&a…

AI辅助创作全攻略:如何高效利用人工智能撰写各类作品文字

在数字化时代的浪潮中人工智能&#xff08;AI&#xff09;已经渗透到咱们生活的方方面面&#xff0c;其中就包含文学创作领域。辅助创作不仅可以加强写作效率还能激发创作灵感宽创作视野。 那么怎么样高效利用人工智能撰写各类作品文字呢&#xff1f;本文将为您详细解析这一全攻…

软件测试 | 测试用例

测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境&#xff0c;测试步骤&#xff0c;测试数据&#xff0c;预期结果等要素。 设计测试用例原则⼀&#xff1a; 测试用例中⼀个必需部分是对…

进程间通信:采用有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.

作业1&#xff1a;有名管道&#xff0c;创建两个发送接收端&#xff0c;父进程写入管道1和管道2&#xff0c;子进程读取管道2和管道1. 右进程 #include <myhead.h> int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0)//父进程&#xff0c;将数据发…

PHP软件下载-安装-环境配置

.1.下载 下载地址如下 windows.php.net - /downloads/releases/ 安装包如下. .2.安装 可以在D盘或者E盘的根目录创建一个自定义目录。注意文件夹目录中不能包含中文&#xff0c;不能包含空格等特殊字符。 版本说明&#xff1a; (1)ts表示非线程安全版本。这个安装包还指明了…

easypoi实现ftl转doc文档(循环填充数据)

1.pom文件 java <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency><!-- EasyPoi依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypo…