zoukankan      html  css  js  c++  java
  • 在.Net如何制作自定义的快捷方式

    我们用.Net安装程序生成的快捷方式是这样的,如下图:



      该图中目标所对应的文本框是灰色的,并且下方的查找目标和更改图标两个按钮也是不可用。这样我们根本就没有办法更改这个快捷方式。

    假如这时有个客户需要在程序启动的时候传入一些参数,那样我们根本就没有办法,因为快捷方式不可编辑,我们总不能让客户在CMD窗口启动吧~~这样我们就不能使用.Net提供的快捷方式。只能是自己建立快捷方式。

    那我们怎么建立快捷方式呢,这里我们需要用到一个Com组件:Windows Script Host Object Model

    这个组件,就是帮助我们建立快捷方式的。

    首先:我们先在启动项目中添加上引用,如下图



    然后,我们再在启动项目中添加一个安装程序类,这个类的主要作用就是在程序进行安装和卸载的时候添加或者删除快捷方式。代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;
    using IWshRuntimeLibrary;
    using System.IO;

    namespace New
    {
        [RunInstaller(
    true)]
        
    public partial class MyInstaller : Installer
        
    {
            
    public MyInstaller()
            
    {
                InitializeComponent();
            }


            
    public override void Install(System.Collections.IDictionary stateSaver)
            
    {
                
    try
                
    {
                    
    base.Install(stateSaver);

                    System.Reflection.Assembly Asm 
    = System.Reflection.Assembly.GetExecutingAssembly();//获取当前程序集信息
                    System.IO.FileInfo fileinfo = new System.IO.FileInfo(Asm.Location);//获取当前程序集位置
                    string dbpath = fileinfo.DirectoryName;//获取文件夹名称
                    string name = fileinfo.Name;//获取文件名称
                    
    //去掉后缀
                    if (name.ToUpper().Contains(".EXE"))
                    
    {
                        name 
    = name.ToUpper().Replace(".EXE""");
                    }

                    
    //在桌面创建快捷方式
                    WshShell shell = new WshShell();
                    IWshShortcut shortcut 
    = (IWshShortcut)shell.CreateShortcut(
                        Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 
    + "\\" + name + ".lnk"
                        );

                    shortcut.TargetPath 
    = Asm.Location;//目标
                    shortcut.WorkingDirectory = dbpath;//工作文件夹
                    shortcut.WindowStyle = 1;//窗体的样式:1为默认,2为最大化,3为最小化
                    shortcut.Description = "yangyang8848";//快捷方式的描述
                    shortcut.IconLocation = Asm.Location;//图标
                    shortcut.Save();

                    
    //在程序菜单中创建文件夹
                    if (!Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\yangyang8848\\" + name))
                    
    {
                        Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
    + "\\yangyang8848\\" + name);
                    }

                    
    //在程序菜单中创建快捷方式
                    IWshShortcut shortcut2 = (IWshShortcut)shell.CreateShortcut(
                        Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
    + "\\yangyang8848\\" + name + "\\" + name + ".lnk"
                        );

                    shortcut2.TargetPath 
    = Asm.Location;
                    shortcut2.WorkingDirectory 
    = dbpath;
                    shortcut2.WindowStyle 
    = 1;
                    shortcut2.Description 
    = "yangyang8848" + "-" + name;
                    shortcut2.IconLocation 
    = Asm.Location;
                    shortcut2.Save();


                }

                
    catch (Exception e)
                
    {
                    System.Windows.Forms.MessageBox.Show(e.Message);
                }


            }


            
    public override void Uninstall(System.Collections.IDictionary savedState)
            
    {
                
    base.Uninstall(savedState);
                
    //卸载程序的时候将两个快捷方式删除
                System.Reflection.Assembly Asm = System.Reflection.Assembly.GetExecutingAssembly();
                System.IO.FileInfo fileinfo 
    = new System.IO.FileInfo(Asm.Location);
                
    string name = fileinfo.Name;

                
    if (name.ToUpper().Contains(".EXE"))
                
    {
                    name 
    = name.ToUpper().Replace(".EXE""");
                }


                
    if (Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\yangyang8848\\" + name))
                
    {
                    
    if (Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\yangyang8848\\").Length > 1)
                    
    {
                        Directory.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
    + "\\yangyang8848\\" + name +"\\"true);
                    }

                    
    else
                    
    {
                        Directory.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
    + "\\yangyang8848\\"true);
                    }

                }

                
    if (System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\" + name + ".lnk"))
                
    {

                    System.IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 
    + "\\" + name + ".lnk");
                    
                }

            }

        }

    }


    利用上边的代码创建出来的快捷方式样式如下:


    我们可以看到,这个快捷方式目标处的文本框是可以编辑的,并且按钮查找目标和更改图标也是可以编辑的。这样我们就可以在启动程序的时候通过快捷方式输出参数,满足用户的需求。

    不过,到现在我还是不明白为什么.Net生成的快捷方式,不可以进行更改。哪位老大知道,请多多指点,告知小弟。谢谢~!(创作人:yangyang8848          http://yangyang8848.cnblogs.com

  • 相关阅读:
    Ext.Msg.alert要注意的问题
    项目终于到了可以轻松下的时候,^_^
    Ext最佳应用
    Google居然无视中国人民的感情
    google的logo居然还是鲜艳色的!!!(下午已经是黑的了,还是感谢google)
    我们必须支持国产,这是义务
    管理软件更需要Open Social
    设计模式外观模式(Facade)
    设计模式代理模式(Proxy)
    设计模式桥接模式(Bridge)
  • 原文地址:https://www.cnblogs.com/yangyang8848/p/839252.html
Copyright © 2011-2022 走看看