一:用WSH直接创建快捷方式:

1.首先要添加引用.

添加引用的方法非常简单,右击你的项目并选择添加引用,

选择 COM 选项卡并选择 Windows Script Host Object Model

2.引用命名空间

using System.Runtime.InteropServices;//互动服务

using IWshRuntimeLibrary;

3.创建快捷方式(注释中有详细说明)

//实例化WshShell对象

WshShell shell = new WshShell();

//通过该对象的 CreateShortcut 方法来创建 IWshShortcut 接口的实例对象

IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "//ShortCut.lnk");

//设置快捷方式的目标所在的位置(源程序完整路径)

shortcut.TargetPath = System.Reflection.Assembly.GetExecutingAssembly().Location;

//应用程序的工作目录

//当用户没有指定一个具体的目录时,快捷方式的目标应用程序将使用该属性所指定的目录来装载或保存文件。

shortcut.WorkingDirectory = System.Environment.CurrentDirectory;

//目标应用程序窗口类型(1.Normal window普通窗口,3.Maximized最大化窗口,7.Minimized最小化)

shortcut.WindowStyle = 1;

//快捷方式的描述

shortcut.Description = "ChinaDforce YanMang";

//可以自定义快捷方式图标.(如果不设置,则将默认源文件图标.)

//shortcut.IconLocation = System.Environment.SystemDirectory + "\\" + "shell32.dll, 165";

//设置应用程序的启动参数(如果应用程序支持的话)

//shortcut.Arguments = "/myword /d4s";

//设置快捷键(如果有必要的话.)

//shortcut.Hotkey = "CTRL+ALT+D";

//保存快捷方式

shortcut.Save();

缺点:

用这种方法写的程序,必须有Interop.IWshRuntimeLibrary.dll跟着,

才能正确执行.对于创建"单文件程序"的人来讲,麻烦了吧.

二:通过创建VBS,并执行,创建方式:

1.首先看一下VBS创建快捷方式的代码:

'VBS实例

set WshShell = WScript.CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop") '获得桌面目录

set oShellLink = WshShell.CreateShortcut(strDesktop & "\D4S.lnk") '快捷方式存放目录及名称

oShellLink.TargetPath = "X:\Program Files\XXX.exe"   '指向的可执行文件

oShellLink.WindowStyle = 1 '运行方式(窗体打开的方式)

oShellLink.Hotkey = "CTRL+SHIFT+F"    '快捷键

oShellLink.IconLocation = "X:\Program Files\XXX.exe, 0" '图标(同样可不指定)

oShellLink.Description = "ChinaDforce YanMang"    '备注信息

oShellLink.WorkingDirectory = "X:\Program Files\"   '起始目录

oShellLink.Save '保存快捷方式

2.那我们如何在C#中使用VBS呢?方法我想应该有很多吧!

在这里介绍一种"最笨"但最直接的方法.

思路如下:

>>> 生成VBS全部代码文本;

>>> 写入临时文件"temp.vbs";

>>> 用Process打开这个文件执行.

3.下面是C#中实现的关键代码:

//生成VBS代码

string vbs = this.CreateVBS();

//以文件形式写入临时文件夹

this.WriteToTemp(vbs);

//调用Process执行

this.RunProcess();

//生成VBS代码

string vbs = this.CreateVBS();

//以文件形式写入临时文件夹

this.WriteToTemp(vbs);

//调用Process执行

this.RunProcess();

///

/// 创建VBS代码

///

///

private string CreateVBS()

{

string vbs = string.Empty;

vbs += ("set WshShell = WScript.CreateObject(\"WScript.Shell\")\r\n");

vbs += ("strDesktop = WshShell.SpecialFolders(\"Desktop\")\r\n");

vbs += ("set oShellLink = WshShell.CreateShortcut(strDesktop & \"\\D4S.lnk\")\r\n");

vbs += ("oShellLink.TargetPath = \"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"\r\n");

vbs += ("oShellLink.WindowStyle = 1\r\n");

vbs += ("oShellLink.Description = \"ChinaDforce YanMang\"\r\n");

vbs += ("oShellLink.WorkingDirectory = \"" + System.Environment.CurrentDirectory + "\"\r\n");

vbs += ("oShellLink.Save");

return vbs;

}

///

/// 写入临时文件

///

///

private void WriteToTemp(string vbs)

{

if (!string.IsNullOrEmpty(vbs))

{

//临时文件

string tempFile = Environment.GetFolderPath(Environment.SpecialFolder.Templates) + "[url=file://\\temp.vbs]\\temp.vbs[/url]";

//写入文件

FileStream fs = new FileStream(tempFile, FileMode.Create, FileAccess.Write);

try

{

//这里必须用UnicodeEncoding. 因为用UTF-8或ASCII会造成VBS乱码

System.Text.UnicodeEncoding uni = new UnicodeEncoding();

byte[] b = uni.GetBytes(vbs);

fs.Write(b, 0, b.Length);

fs.Flush();

fs.Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "写入临时文件时出现错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

finally

{

//释放资源

fs.Dispose();

}

}

}

///

/// 执行VBS中的代码

///

private void RunProcess()

{

string tempFile = Environment.GetFolderPath(Environment.SpecialFolder.Templates) + "\\temp.vbs";

if (File.Exists(tempFile))

{

//执行VBS

Process.Start(tempFile);

}

}

private void btn退出_Click(object sender, EventArgs e)

{

Application.Exit();

//清除临时文件

File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Templates) + "\\temp.vbs");

}

强调一点:

在写入VBS文件时,一定要用UnicodeEncoding.

因为UTF-8和ASCII码,都会导致VBS生成快捷方式的时候,

产生乱码,而导致快捷方式错误.

本人原来使用UTF8Encoding的时候,不放在包含中文的路径中还可以,但一出现中文就挂了!

困扰我好半天,才发现的这个细节.

c#简单记事本应用程序的快捷方式_C#创建快捷方式的两种方法相关推荐

  1. WPF程序将DLL嵌入到EXE的两种方法

    2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了> ...

  2. 小程序底部弹窗css_微信小程序之animation底部弹窗动画(两种方法)

    简单分享一下常用的底部弹窗层或下拉框弹出层(代码需要修改)的内容弹窗的动画效果,这里分享的是点击按钮后底部弹窗的动画效果.第一种方式是动态设置显示区域的高度,第二种方法是动态设置显示区域的移动的位置( ...

  3. java程序将汉字转成拼音的两种方法

    1.使用pinyin4j将汉字转成拼音,附件为pinyin4j的jar包 Java代码   import net.sourceforge.pinyin4j.PinyinHelper; import n ...

  4. inno setup打包的安装包如何在卸载完程序后可以继续安装_这两个方法就够了!快速制作Python程序Windows安装包...

    点击关注州的先生 编程应用.实战教程,不容错过 /00/ 前言 我们使用Python可以编写很多提高工作和学习效率的小工具,在编写完之后,如果我们想将其分享给更多的人使用,那么最便捷的方法就是将其打包 ...

  5. yii2 php 生成小程序分享海报的两种方法

    前段时间做了个小程序-爱小环保,现在要给它加一个生成海报分享朋友圈的功能. 先简单介绍下这个小程序,主要是号召大家随手捡垃圾,如果你在马路上见到别人随手丢的垃圾,可以将它拍下来,然后丢到垃圾桶,拍下来 ...

  6. win10计算机桌面快捷方式,Win10程序快捷方式添加到桌面上的两种方法

    在使用电脑的时候一般都是把程序快捷方式添加到电脑桌面上,因为打开电脑面对的就是桌面.在桌面打开程序也是最快的.那么在Win10系统中如何把应用程序 快捷方式 添加到桌面上呢?方法有两种,这里就为大家一 ...

  7. 转:实例学习PHP程序对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制. 当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求 ...

  8. JAVA中初始化线程的两种方法_java中最简单的方式新起一个线程

    启动一个线程 在一个方法中启动一个线程,有两种方法 第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法) 第二种是,现在方法中new一个线程,然后直接调 ...

  9. 微信小程序 使用特殊字体的两种方法

    微信小程序中如何使用特殊字体 我有两种方法: 1. 转base64格式 下载要使用的字体,建议TTF格式 打开网站 https://transfonter.org/ 转换格式,得到压缩包 将压缩包解压 ...

最新文章

  1. 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序
  2. Vue build之后访问dist目录静态资源不加载问题解决
  3. 744. 寻找比目标字母大的最小字母 golang
  4. matlab max报错,奇怪的报错。未定义'*'
  5. 通过Java反射来理解泛型的本质
  6. qomo linux最新版本,“珠峰”Qomo Linux新版本将迎来重大变革
  7. 用python实现bt下载_python实现bt种子 torrent转magnet
  8. linux 取出本机IP
  9. Mac使用minicom串口工具
  10. 精明管理者选人的N种方式
  11. Oracle 性能诊断艺术 第四章 笔记
  12. 中级通信工程师证书会过期吗
  13. C++控制台模拟网上购物商城
  14. 搜索引擎网站登录入口|免费登录|百度登录|谷歌登录|网站收录入口
  15. 0.1+0.2 等于 0.3 吗?
  16. r语言是高级编程语言_什么是R编程?
  17. 一点小感受:界面和程序的分离
  18. java 从已知日期计算干支纪日_天干地支纪日纪时计算公式
  19. 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
  20. Eric靶机渗透测试通关全教程

热门文章

  1. 移动端h5视频处理方案
  2. java开发之ServLet注解、自定义容器方式详解
  3. python去重计数_如何python快速实现数组的去重计数
  4. oracle 查看表空间总量,oracle 查看表空间以及剩余量
  5. MDICT的100G的辞典资源_我是亲民_新浪博客
  6. 从零开始的C/C++数据结构 01 累项求和并计时
  7. 单点登录、注销实现原理(SSO)
  8. Nor Flash笔记--看一图看懂并学会计算Flash大小
  9. Mythtype公式对齐和分栏分节符后删除空白页
  10. 笔记本计算机充不上电,笔记本充不了电怎么回事_笔记本电脑怎么充不了电-win7之家...