怎么使用C#代码创建快捷方式文件详解

作者:无名 - C#教程 -

前言

快捷方式是一种特殊的文件,扩展名为 lnk。有很多种方式来创建快捷方式,首先我们看一下快捷方式是什么。对快捷方式点右键,选择属性菜单,在弹出的属性对话框的常规Tab中可以看到,文件类型是快捷方式(.lnk),所以快捷方式本质上是lnk文件。

不过使用 C# 代码创建一个却并不那么容易,本文分享三种不同的方式创建快捷方式。

随处可用的代码

这是最方便的方式了,因为这段代码随便放到一段代码中就能运行:

/// <summary>
/// 为当前正在运行的程序创建一个快捷方式。
/// </summary>
/// <param name="lnkFilePath">快捷方式的完全限定路径。</param>
/// <param name="args">快捷方式启动程序时需要使用的参数。</param>
private static void CreateShortcut(string lnkFilePath, string args = "")
{
 var shellType = Type.GetTypeFromProgID("WScript.Shell");
 dynamic shell = Activator.CreateInstance(shellType);
 var shortcut = shell.CreateShortcut(lnkFilePath);
 shortcut.TargetPath = Assembly.GetEntryAssembly().Location;
 shortcut.Arguments = args;
 shortcut.WorkingDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
 shortcut.Save();
}

以上代码为当前正在运行的程序创建一个快捷方式。当然,如果你希望给其他文件创建快捷方式,就改一改里面的代码吧,将 TargetPath 和 WorkingDirectory 改为其他参数。


▲ 快捷方式属性(其中 Target 等同于上面的 TargetPath 和 Arguments 一起,Start in 等同于上面的 WorkingDirectory)

引用 COM 组件

引用 COM 组件 Interop.IWshRuntimeLibrary.dll 能够获得类型安全,不过本质上和以上方法是一样的。

private static void CreateShortcut(string lnkFilePath, string args = "")
{
 var shell = new IWshRuntimeLibrary.WshShell();
 var shortcut = (IWshRuntimeLibrary.IWshShortcut) shell.CreateShortcut(linkFileName);
 shortcut.TargetPath = Assembly.GetEntryAssembly().Location;
 shortcut.Arguments = args;
 shortcut.WorkingDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
 shortcut.Save();
}

兼容 .NET 3.5 或早期版本

如果你还在使用 .NET Framework 3.5 或更早期版本,那真的很麻烦。同情你以下,不过也贴一段代码:

private static void CreateShortcut(string lnkFilePath, string args = "")
{
 var shellType = Type.GetTypeFromProgID("WScript.Shell");
 var shell = Activator.CreateInstance(shellType);
 var shortcut = shellType.InvokeMember("CreateShortcut",
  BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod,
  null, shell, new object[] { linkFileName });
 var shortcutType = shortcut.GetType();
 shortcutType.InvokeMember("TargetPath",
  BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty,
  null, shortcut, new object[] { Assembly.GetEntryAssembly().Location });
 shortcutType.InvokeMember("Arguments",
  BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty, 
  null, shortcut, new object[] { args });
 shortcutType.InvokeMember("WorkingDirectory",
  BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty, 
  null, shortcut, new object[] { AppDomain.CurrentDomain.SetupInformation.ApplicationBase });
 shortcutType.InvokeMember("Save",
  BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod,
  null, shortcut, null);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

本文内容由IT人知识库(原文链接:http://www.itpeo.net/12809/518882.html)本站为各位整理





C# 7.2中结构体性能问题的解决方案

前言 在某些使用了readonly关键字的情况下,C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下... ...

.NET Core开发之配置详解

熟悉ASP.NET的开发者一定对web.config文件不陌生。在ASP.NET环境中,要想添加配置参数,一般也都会在此... ...

rfedfre

WPF Slider滑动条的颜色修改方法

效果如下: 鄙人虽然开发WPF有些时间,但之前一直是一些简单Template和Style改改之类的工作,并没有深入研究... ...

C#实现文章添加内链的方法

为什么文章要添加内链?  1.有利于读者      &nb... ...

C#公众号开发之给用户发红包

红包功能简单介绍: 1、商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种... ...

C# 获取 PC 序列号的方法示例

在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是... ...

C#程序异常关闭时的捕获

本文主要以一个简单的小例子,描述C# Winform程序异常关闭时,如何进行捕获,并记录日志。 概述 有时在界面的事件... ...

C#实现一个简单实用的TXT文本操作及日志框架详解

前言 首先先介绍一下这个项目,该项目实现了文本写入及读取,日志写入指定文件夹或默认文件夹,日志数量控制,单个日志大小控制... ...

rfedfre

c#源码的执行过程详解

要讲到C#源码的执行过程 首先要提下程序集,因为Clr并不是和托管摸块打交道的,而是和程序集(dll,exe) 1、从哪... ...

C# winform主界面打开并关闭登录界面的方法

在winform 界面编程中,我们有时候要在主界面打开之前先显示登录界面,当登录界面用户信息校验正确后才打开主界面,而这... ...

rfedfre

WPF 在image控件用鼠标拖拽出矩形的实现方法

今天有小伙伴问我一个问题,在image控件用鼠标拖拽出矩形,本文告诉大家如何使用鼠标画出矩形 做出来的效果先请大家看一下... ...

WPF实现控件拖动的示例代码

实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在... ...

rfedfre

C#中字段、属性、只读、构造函数赋值、反射赋值的问题

C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动... ...

C#获取日期的星期名称实例代码

具体代码如下所示: private string GetWeekName(DayOfWeek week) {... ...

rfedfre

C# 7.0中解构功能详解

本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下 解构元组   C#7.0新增了诸多功能,其中有一项是... ...

C#实现ini文件读写操作

本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下 1、ini文件是什么? 见百度百... ...

rfedfre

C# WPF 父控件通过使用可视化树找到子控件的示例代码

在我们使用WPF设计前台界面时,经常会重写数据模板,或者把控件放到数据模板里。但是一旦将控件放到数据模板中,在后台就没有... ...

C#实现金额转换成中文大写金额

本文实例为大家分享了C#金额转换成中文大写金额的具体代码,供大家参考,具体内容如下 /// <summary&... ...

rfedfre

C#利用VS中插件打包并发布winfrom程序

本文为大家分享了C#利用VS中插件打包并发布winfrom程序,供大家参考,具体内容如下 1.先在VS 的扩展更新中搜索... ...

微信小程序支付C#后端源码

本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下 using System; using S... ...