標籤:
用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的時候,不放在包含中文的路徑中還可以,但一出現中文就掛了!
困擾我好半天,才發現的這個細節.
源:http://www.cnblogs.com/linmilove/archive/2009/06/10/1500989.html
C# 建立捷徑