利用C#实现动态替换桌面快捷方式对应的应用程序

news2024/11/24 20:10:50

公司有一个特殊的业务可能会用到这个,至于什么业务就不展开了。本文的内容作为备用方案。

实现思路:

1   获取当前exe程序运行的全路径

2  获取桌面的所有快捷方式

3  遍历快捷方式,获取快捷键方式对应程序的运行路径,并与当前exe程序运行的全路径比较,如果相等,则表示拿到当前exe程序运行的快捷方式

4  把新的程序的运行路径赋值给快捷方式

测试环境:

.net framework 3.5 

vistual studio 2017

测试步骤如下:

1  新建控制台程序,名为ApplicationQuickLink

2  添加COM引用:Window  Script Host Object  Model

 3  在Debug目录下新建记事本文件,名为"新建文本文档.txt",并编辑内容如下:

 4  新建类,名为"ShortCutHelper" ,并编辑如下:

using IWshRuntimeLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ApplicationQuickLink
{
    public class ShortCutHelper
    {
        /// <summary>
        /// 设置当前程序的快捷方式
        /// </summary>
        /// <param name="newAppName">新的程序名称</param>
        public static bool SetApplicationNewQuickNewPath(string newAppName)
        {
            IWshRuntimeLibrary.IWshShortcut  shortcut= GetCurrentApplicationQuickPath();
            if (shortcut!=null&& !string.IsNullOrEmpty(shortcut.TargetPath))
            {
                shortcut.TargetPath = GetExecuteAppPath(shortcut.TargetPath)+ "\\" + newAppName;
                shortcut.WindowStyle = 1;//设置运行方式,默认为常规窗口
                shortcut.Save();
                return true;
            }
            return false;
        }
        /// 获取程序的运行路径
        /// </summary>
        /// <param name="executeFullPath"></param>
        /// <returns></returns>
        private static string GetExecuteAppPath(string executeFullPath)
        {
            string []pathArray = executeFullPath.Split('\\');
            if (pathArray.Length >= 2)
            {
                return executeFullPath.Replace(pathArray[pathArray.Length - 1],"");
            }
            return null;
        }     
        /// <summary>
        /// 获取当前应用程序快捷方式
        /// </summary>
        /// <returns></returns>
        private static IWshRuntimeLibrary.IWshShortcut GetCurrentApplicationQuickPath()
        {
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            string[] desktopAllLinkArray = Directory.GetFiles(desktopPath, "*.lnk");
            if (desktopAllLinkArray != null && desktopAllLinkArray.Length > 0)
            {
                foreach (var item in desktopAllLinkArray)
                {
                    IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShellClass();
                    IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(item);
                    string currentExcutePath= GetCurrentExecuteFullPath();
                    if (currentExcutePath.Equals(shortcut.TargetPath))
                    {
                        return shortcut;
                    }
                }
            }
            return null;
        }
        /// <summary>
        /// 获取当前程序运行的全路径
        /// </summary>
        /// <returns></returns>
        private static string GetCurrentExecuteFullPath()
        {
           return Application.ExecutablePath;
        }
    }
}

5  编辑主程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ApplicationQuickLink
{
    class Program
    {
        static void Main(string[] args)
        {
            bool setResult= ShortCutHelper.SetApplicationNewQuickNewPath("新建文本文档.txt");
            if (setResult)
            {
                Console.WriteLine("设置成功");
            }
            else
            {
                Console.WriteLine("设置失败");
            }
            Console.ReadLine();
        }
    }
}

6  生成程序,并为Debug目录下的运行程序ApplicationQuickLink.exe创建桌面快捷方式,如下图:

 

7  点击桌面的快捷方式实现运行程序,运行结果如下图:

桌面的快捷方式对应的目标程序如下:

 点击桌面的快捷方式,可以成功打开Debug目录下的记事本文件"新建文本文档.txt",如下图:

 

 好了,本文的内容到此结束。

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

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

相关文章

【开发工具】 今天我要教会你安装Office 2021 RTM 专业增强零售版 你开不开心

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

统一请求封装和pytest入门使用

统一请求封装解决的问题 解决多个py文件共享session的问题 统计请求的数据 统一异常处理 统一日志监控 封装 在项目文件中创建一个common文件夹&#xff0c; 用来进行统一接口封装 import requestsclass RequestUtil:# 调用底层的requests.session()方法进行封装sess r…

超详细的R语言svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)

我们在既往的文章《R语言绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)》中介绍了怎么使用jskm包的svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)&#xff0c;但是有粉丝觉得讲得不够详细&#xff0c;希望讲得详细一点&#xff0c;今天我们继续来介绍一下…

flinkCDC在Delta.io中是什么 是CDF

类似flink CDC databricks 官方文档: How to Simplify CDC With Delta Lakes Change Data Feed - The Databricks Blog delta.io 官方文档: Change data feed — Delta Lake Documentation 概述 更改数据馈送 (CDF) 功能允许 Delta 表跟踪 Delta 表版本之间的行级更改 在…

vue+element-plus角色权限管理分配

这里的图片是截图这个老师的项目 在src/uitls/permission.js加入以下内容 本段代码讲解: 参数一:后台传来的路由 参数二:前端所有的路由 先遍历前端所有路由,在里面继续遍历后台路由,通过二者某一个关键字的是否相同判断用户是否有权限(这里老师使用的是title关键字),关键字相…

21安徽练习

题目分为4部分 APK 集群 流量 exe 我尽量都做一下&#xff0c;逆向不是很会&#xff0c;就当提升自己。 [填空题]请获取app安装包的SHA256校验值&#xff08;格式&#xff1a;不区分大小写&#xff09;&#xff08;10分&#xff09; e15095d49efdccb0ca9b2ee125e4d8136cac5…

树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

本博文介绍采用ThonnyMicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序&#xff0c;将Pico W无线开发板、电脑或Android手机无线连接到远程MQTT服务器&#xff0c;给出采用电脑MQTTX应用程序及手机Android MQTT客户端App远程控制…

用python的QT做界面

文章目录 入口文件界面参数调整数据从dat解析出来的文件从界面点击打开文件夹的功能实现主要功能代码网络参数存图替换功能&#xff0c;比如把倒频谱替换成倒频谱2 入口文件 入口文件&#xff0c;主要用来实例化窗口&#xff08;不重要&#xff09;&#xff0c;只要知道从这里…

每日学术速递4.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Masked Frequency Modeling for Self-Supervised Visual Pre-Training(ICLR 2023) 标题&#xff1a;用于自监督视觉预训练的掩蔽频率建模 作者&#xff1a;Jiahao Xie, Wei Li, Xi…

SwiftUI 设计和调试复杂界面的基本技巧示例

功能需求 对于比较复杂的 SwiftUI 界面,我们需要在充分了解 SwiftUI 各个视图基本特性的同时,合理利用 Xcode 强大的预览(Preview)机制,实时且全面的测试所有场景下的显示情况。 如上图所示:我们在 App 支持的每种语言环境中都对界面进行了全面的测试,并解决了 Cell 里…

使用Lambda表达式mutable有感

使用Lambda表达式mutable有感 在学Qt的时候&#xff0c;我看着mutable陷入了沉思&#xff0c;总觉得它和C中的某个特性很像&#xff1f;没错&#xff0c;就是 深拷贝 如果你忘记了深拷贝和浅拷贝是什么&#xff0c;那跟着我来一起回忆一下吧。首先来看深拷贝与浅拷贝的概念 浅…

从零开始学习Linux运维,成为IT领域翘楚(四)

文章目录 &#x1f525;Linux路径&#x1f525;Linux处理文件目录的常用命令&#x1f525;Linux文件编辑工具vi/vim&#x1f525;Linux文件内容查看命令 &#x1f525;Linux路径 路径&#xff0c;顾名思议&#xff0c;是指从树形目录中的某个目录层次到某个文件的一条道路。 Li…

设计模式-工厂、装饰模式

一. 设计模式-工厂模式 package com.factory.pattern;/**目标&#xff1a;工厂模式。什么是工厂设计模式&#xff1f;工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的方…

Spring 5 笔记 - AOP

1. AOP 简介 AOP&#xff1a;Aspect Oriented Programming&#xff0c; 面向切面编程或面向方面编程。利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提高了开发的效率。 将日志…

【英语】大学英语CET考试,写作部分(论述文+应用文,6篇范文)

文章目录 3项评分标准&#xff08;内容&结构&#xff0c;语言&#xff09;0.1 论述文个人小结 1、论述文&#xff1a;审题与功能句2、论述文&#xff1a;修饰内容和名言模板3、论述文&#xff1a;现象作文&利弊分析4、论述文&#xff1a;给出权威论据和有侧重的现象5、…

新老stp的配置和安全总结部分

老stp只有根桥没有备份桥 老stp的五种接口状态&#xff1a; disable 接口down没开stp blocking 阻塞 listening 发bpdu&#xff0c;比较bpdu优劣 leraning 开始学习mac地址表 forwardding 转发 老stp直接拓扑变化30秒&#xff0c;间接拓扑变化50秒 RSTP只有3种端口状态&#…

每日学术速递4.28

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.StepFormer: Self-supervised Step Discovery and Localization in Instructional Videos(CVPR 2023) 标题&#xff1a;StepFormer&#xff1a;教学视频中的自我监督步骤发现和定位…

vue diff算法与虚拟dom知识整理(1) 概念叙述

今天开始 我们来学习 虚拟dom和diff算法 首先 我们要简单了解 虚拟dom和diff算法在vue中的作用 例如 下图左侧是我们的加 然后 我们要将 家按图右改造一下 我们先来找一下不同 如图卷出来的效果 我们起居室想多装一个沙发 卧室床改了位置 电视不要了 阳台小改了一下 其实改…

每日学术速递4.27

Subjects: cs.CV 1.End-to-End Spatio-Temporal Action Localisation with Video Transformers 标题&#xff1a;使用视频转换器进行端到端时空动作定位 作者&#xff1a;Alexey Gritsenko, Xuehan Xiong, Josip Djolonga, Mostafa Dehghani, Chen Sun, Mario Lučić, Corde…

IS-IS协议基础知识

文章目录 前言介绍地址格式报文格式区域及路由器类型区域类型路由器类型Level-1 路由器Level-2 路由器Level-1-2路由器 IS-IS 网络类型DIS及伪节点伪节点DIS与OSPF的DR/BDR不同之处 IS-IS 邻接关系握手报文邻接关系的建立 IS-IS 链路状态数据库概述数据库同步报文泛洪机制数据库…