ডেস্কটপে একটি শর্টকাট তৈরি করুন


106

আমি ডেস্কটপে কিছু নেট ফাইলের দিকে ইঙ্গিত করে একটি শর্টকাট তৈরি করতে চাই, নেট ফ্রেমওয়ার্ক 3.5 ব্যবহার করে এবং একটি অফিসিয়াল উইন্ডোজ এপিআইয়ের উপর নির্ভর করে। আমি এটা কিভাবে করবো?


1
রুস্তম ইরজায়েভের উইন্ডোজ স্ক্রিপ্ট হোস্ট অবজেক্ট মডেল ব্যবহার করা সঠিক শর্টকাটের একমাত্র নির্ভরযোগ্য। আয়ুশ: এই কৌশলটি গরম কীগুলি এবং বিবরণগুলির মতো একগুচ্ছ বৈশিষ্ট্যগুলি মিস করে। থোরারিন: শেললিঙ্ক বেশিরভাগ ক্ষেত্রে ভাল কাজ করে তবে উল্লেখযোগ্যভাবে এটি উইন্ডোজ এক্সপিতে কাজ করে না এবং অবৈধ শর্টকাট তৈরি করে। সাইমন মউরিয়ার: এটি খুব আশাব্যঞ্জক, তবে উইন্ডোজ ৮
— ব্রুটালদেভ

সাইমন মুরিয়ারের উত্তরটি এখানে সেরা উত্তর। শর্টকাটগুলি তৈরি করার একমাত্র সঠিক এবং বুলেট প্রুফ উপায়টি হ'ল অপারেটিং সিস্টেমটি ব্যবহার করে একই API ব্যবহার করে এবং এটি হ'ল IShellLink ইন্টারফেস। উইন্ডোজ স্ক্রিপ্ট হোস্ট ব্যবহার করবেন না বা ওয়েব লিঙ্কগুলি তৈরি করবেন না! সাইমন মউরিয়ার 6 লাইনের কোড সহ এটি কীভাবে করবেন তা দেখায়। এই পদ্ধতিতে সমস্যা আছে এমন যে কেউ অবশ্যই অবৈধ পথগুলি পেরিয়ে গেছে। আমি উইন্ডোজ এক্সপি, 7 এবং 10 তে তার কোডটি পরীক্ষা করেছি 32 32/64 বিট উইন্ডোজ যা সমস্যা ফাইলগুলি, ইত্যাদি ফাইলের জন্য বিভিন্ন ফোল্ডার ব্যবহার করে তাতে সমস্যা এড়াতে আপনার অ্যাপ্লিকেশনটিকে "যে কোনও সিপিইউ" হিসাবে সংকলন করুন।
— এলময়ে

উত্তর:


120

অতিরিক্ত বিকল্পগুলির সাথে যেমন হটকি, বিবরণ ইত্যাদি With

প্রথমে, প্রকল্প > রেফারেন্স যুক্ত করুন > সিওএম > উইন্ডোজ স্ক্রিপ্ট হোস্ট অবজেক্ট মডেল।

using IWshRuntimeLibrary;

private void CreateShortcut()
{
  object shDesktop = (object)"Desktop";
  WshShell shell = new WshShell();
  string shortcutAddress = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\Notepad.lnk";
  IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
  shortcut.Description = "New shortcut for a Notepad";
  shortcut.Hotkey = "Ctrl+Shift+N";
  shortcut.TargetPath = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\notepad.exe";
  shortcut.Save();
}

2
এটা আমার জন্য সত্যিই কাছাকাছি ছিল। আমার শর্টকাটে "ওয়ার্কিংডাইরেক্টরি" বৈশিষ্ট্যে .exe ডিরেক্টরিটি যুক্ত করা দরকার। (শর্টকাট.
— ওয়ার্কিং ডিরেক্টরী

4
আইকন সূচক নির্দিষ্ট করতে (আইকন লোকেশনে), "path_to_icon_file, #" এর মতো মান ব্যবহার করুন, যেখানে # আইকন সূচক। এমএসডিএন.মাইক্রোসফটকম /en-us/library/xsy6k3ys(v=vs.84).aspx
— ক্রিস

1
যুক্তি: শর্টকাট.আর্গুমেন্টস = "সেতা ম্যাপ এমপি_ক্র্যাশ"; stackoverflow.com/a/18491229/2155778
— জোল্ফঘড়ি

7
এনভায়রনমেন্ট.স্পেশিয়ালফোল্ডারস.সিস্টেম - বিদ্যমান নেই ... এনভায়রনমেন্ট.স্পেশিয়াল ফোল্ডার.সিস্টেম - কাজ করে।
— জেএসওয়াল্ফ

সময়ের জন্য আপনাকে অবশ্যই মাইক্রোসফ্ট.সিএসআরপকে রেফারেন্স হিসাবে যুক্ত করতে হবে।
— l1nuxuser

76

ইউআরএল শর্টকাট

private void urlShortcutToDesktop(string linkName, string linkUrl)
{
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url"))
    {
        writer.WriteLine("[InternetShortcut]");
        writer.WriteLine("URL=" + linkUrl);
    }
}

অ্যাপ্লিকেশন শর্টকাট

private void appShortcutToDesktop(string linkName)
{
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url"))
    {
        string app = System.Reflection.Assembly.GetExecutingAssembly().Location;
        writer.WriteLine("[InternetShortcut]");
        writer.WriteLine("URL=file:///" + app);
        writer.WriteLine("IconIndex=0");
        string icon = app.Replace('\\', '/');
        writer.WriteLine("IconFile=" + icon);
    }
}

এই উদাহরণটিও পরীক্ষা করে দেখুন ।

আপনি যদি কিছু এপিআই নির্দিষ্ট ফাংশন ব্যবহার করতে চান তবে আপনি IShellLink interfaceপাশাপাশি IPersistFile interface(সিওএম ইন্টারপ মাধ্যমে) ব্যবহার করতে চাইবেন ।

এখানে একটি নিবন্ধ যা আপনাকে এটি করা দরকার সেই সাথে স্যাম্পল কোডেরও বিশদে চলে যায়।


এই উপরের ভাল কাজ করছে। তবে আমি কিছু এপিআই ফাংশনের মতো শর্টকাট তৈরি করতে চাই যেমন DllImport ("coredll.dll")] পাবলিক স্ট্যাটিক এক্সটেনশন INT SHCreateShortcut (স্ট্রিংবিল্ডার szShortcut, স্ট্রিংবিল্ডার szTarget);
— বিপিন অরোরা

@ বিপিন কেন? উপরোক্ত সমাধানগুলির কোনওটি যথেষ্ট ভাল না হওয়ার কোনও কারণ আছে কি?
— অ্যালেক্স

8
নাইটপিকিং: আপনি ফ্লাশ () লাইনটি সরিয়ে ফেলতে পারেন যেহেতু ইউজিং ব্লকের
— অবসানটি

3
এই পদ্ধতিটি নিয়ে আমার প্রচুর সমস্যা হয়েছে ... উইন্ডোজ কোথাও শর্টকাট সংজ্ঞাটি ক্যাশে করে ... এই জাতীয় শর্টকাট তৈরি করে, মুছুন, তারপরে একই নামের সাথে একটি আলাদা URL তৈরি করুন ... সম্ভাবনাগুলি উইন্ডোজ are আপনি শর্টকাটে ক্লিক করলে পুরানো মুছে ফেলা URL টি খুলবে। রুস্তমের উত্তর নীচে (.url পরিবর্তে .lnk ব্যবহার করে) আমার জন্য এই সমস্যাটি সমাধান করেছে
— টিসিসি

1
দুর্দান্ত উত্তর। .Lnk ফাইলগুলি ব্যবহার করার সময় আপনাকে হররড সিওএম নদীর গভীরতানির্ণয়কে মোকাবিলা করতে হবে তার থেকে অনেক বেশি ভাল।
— জেমস কো

61

এখানে কোডের একটি অংশ রয়েছে যা কোনও বাহ্যিক COM অবজেক্টের (ডাব্লুএসএইচ) উপর নির্ভরতা রাখে না এবং 32-বিট এবং 64-বিট প্রোগ্রামগুলিকে সমর্থন করে:

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Text;

namespace TestShortcut
{
    class Program
    {
        static void Main(string[] args)
        {
            IShellLink link = (IShellLink)new ShellLink();

            // setup shortcut information
            link.SetDescription("My Description");
            link.SetPath(@"c:\MyPath\MyProgram.exe");

            // save it
            IPersistFile file = (IPersistFile)link;
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            file.Save(Path.Combine(desktopPath, "MyLink.lnk"), false);
        }
    }

    [ComImport]
    [Guid("00021401-0000-0000-C000-000000000046")]
    internal class ShellLink
    {
    }

    [ComImport]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("000214F9-0000-0000-C000-000000000046")]
    internal interface IShellLink
    {
        void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags);
        void GetIDList(out IntPtr ppidl);
        void SetIDList(IntPtr pidl);
        void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
        void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
        void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
        void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
        void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
        void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
        void GetHotkey(out short pwHotkey);
        void SetHotkey(short wHotkey);
        void GetShowCmd(out int piShowCmd);
        void SetShowCmd(int iShowCmd);
        void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);
        void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
        void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
        void Resolve(IntPtr hwnd, int fFlags);
        void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
    }
}

@ ব্রুটালদেব - কী কাজ করে না? আমি এটি উইন্ডোজ 8 x64 এ পরীক্ষা করেছি এবং এটি কার্যকর হয়।
— সাইমন মাউরিয়ার

উইন 8 এক্স 64 চালিয়েও উপরে কোড স্যাম্পলটির ঠিক ঠিক অনুলিপি করেছেন, এটি আমার ডেস্কটপে কোনও পথ ছাড়াই একটি আইকন তৈরি করে। লিঙ্কটি কার্যকর করা ডেস্কটপে এক্সপ্লোরার খোলায়। এটি শেললিংক.এস-এর সাথে আমার উইন্ডোজ এক্সপি / 2003 এ একই সমস্যা। সমস্ত উইন্ডোজ সংস্করণ জুড়ে স্পষ্টতভাবে কাজ করার একমাত্র উদাহরণ হ'ল রুস্তম ইরজায়েভ ডাব্লুএসএইচএম ব্যবহার করে মূল প্রশ্নের সাথে আমার মন্তব্যে উল্লেখ করেছিলেন: "এটি খুব আশাব্যঞ্জক ছিল, তবে উইন্ডোজ 8-এ অবৈধ শর্টকাট তৈরি করেছে"
— ব্রুটলদেভ

আমি উইন্ডোজ 8.1 x64 এ কাজ করার জন্য এটি পেয়েছি, তবে এই মুহুর্তে এখানে দেওয়া কোডের আইপ্রেস্টিফিলের কোনও সংজ্ঞা নেই। এটি শেললিংকস পোস্ট থেকে এটির কাজটি পেতে আমাকে কপি করতে হয়েছিল ।
— ওয়াল্টার উইলফিংগার

এটি কাজ করবে না এমন কোনও স্পষ্ট কারণ আমি দেখছি না। যাই হোক, IPersistFile প্রাপ্তিসাধ্য আউট-অফ-বক্স System.Runtime.InteropServices.ComTypes হয়
— সাইমন Mourier

1
এই সমাধানটি SetIconLocation32-বিট এক্সিকিউটেবল সহ 64-বিট উইন্ডোজ 10-এ ব্যবহার করে সঠিক আইকন সেট করে না । সমাধানটি এখানে বর্ণিত হয়েছে: stackoverflow.com/a/39282861 এবং আমি সন্দেহও করি যে উইন্ডোজ 8 এর সাথে একই সমস্যা হ'ল অন্য সমস্ত ব্যক্তিরা এই বিষয়ে প্রতিক্রিয়া জানাচ্ছেন। এটি 64-বিট উইন্ডোজের 32-বিট এক্সিপ ফাইলগুলির সাথে সম্পর্কিত হতে পারে।
— মারিস বি।

26

আপনি এই শেললিঙ্ক.স ব্যবহার করতে পারেনশর্টকাট তৈরি ক্লাসটি ।

ডেস্কটপ ডিরেক্টরি পেতে, ব্যবহার করুন:

var dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

বা Environment.SpecialFolder.CommonDesktopDirectoryএটি সমস্ত ব্যবহারকারীর জন্য তৈরি করতে ব্যবহার করুন।


6
@ বিপিন: যদি কোনও সমাধান আপনার পক্ষে কাজ করে তবে এটি উজ্জীবিত করার রীতি আছে। এছাড়াও, আপনার সর্বোত্তম সমাধানটি নির্বাচন করা উচিত এবং আপনার সমস্যার উত্তর হিসাবে এটি গ্রহণ করা উচিত।
— থোররিন

এটি lnk ফাইলের সাথে বিদ্যমান এক্সকে ওভাররাইট করবে। উইন 10-তে পরীক্ষা করা হয়েছে।
— zwcloud

@zwcloud এই কোডটি কোনও কিছুই ওভাররাইট করে না কারণ এটি কিছু করে না। শর্টকাট নিয়ে কাজ করার জন্য কি ক্লাস এবং পদ্ধতি ব্যবহার করা হবে তা এটি আপনাকে কেবল বলে দিচ্ছে। যদি আপনার কোডটি আপনার উপরে থাকা এক্সিকে ওভাররাইট করে। আমি কীভাবে আপনি কীভাবে লেনক ফাইল তৈরি করবেন তা কেন এটি আপনার এক্সকে ধ্বংস করছে তা আমি দেখতে চাই।
— সিডারাগর্ন

15

অতিরিক্ত রেফারেন্স ছাড়াই:

using System;
using System.Runtime.InteropServices;

public class Shortcut
{

private static Type m_type = Type.GetTypeFromProgID("WScript.Shell");
private static object m_shell = Activator.CreateInstance(m_type);

[ComImport, TypeLibType((short)0x1040), Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")]
private interface IWshShortcut
{
    [DispId(0)]
    string FullName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0)] get; }
    [DispId(0x3e8)]
    string Arguments { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] set; }
    [DispId(0x3e9)]
    string Description { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] set; }
    [DispId(0x3ea)]
    string Hotkey { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] set; }
    [DispId(0x3eb)]
    string IconLocation { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] set; }
    [DispId(0x3ec)]
    string RelativePath { [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ec)] set; }
    [DispId(0x3ed)]
    string TargetPath { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] set; }
    [DispId(0x3ee)]
    int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; }
    [DispId(0x3ef)]
    string WorkingDirectory { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] set; }
    [TypeLibFunc((short)0x40), DispId(0x7d0)]
    void Load([In, MarshalAs(UnmanagedType.BStr)] string PathLink);
    [DispId(0x7d1)]
    void Save();
}

public static void Create(string fileName, string targetPath, string arguments, string workingDirectory, string description, string hotkey, string iconPath)
{
    IWshShortcut shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { fileName });
    shortcut.Description = description;
    shortcut.Hotkey = hotkey;
    shortcut.TargetPath = targetPath;
    shortcut.WorkingDirectory = workingDirectory;
    shortcut.Arguments = arguments;
    if (!string.IsNullOrEmpty(iconPath))
        shortcut.IconLocation = iconPath;
    shortcut.Save();
}
}

ডেস্কটপে শর্টকাট তৈরি করতে:

    string lnkFileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Notepad.lnk");
    Shortcut.Create(lnkFileName,
        System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "notepad.exe"),
        null, null, "Open Notepad", "Ctrl+Shift+N", null);

11

আমি কেবল আমার অ্যাপ্লিকেশনটির জন্য ব্যবহার করি:

using IWshRuntimeLibrary; // > Ref > COM > Windows Script Host Object  
...   
private static void CreateShortcut()
    {
        string link = Environment.GetFolderPath( Environment.SpecialFolder.Desktop ) 
            + Path.DirectorySeparatorChar + Application.ProductName + ".lnk";
        var shell = new WshShell();
        var shortcut = shell.CreateShortcut( link ) as IWshShortcut;
        shortcut.TargetPath = Application.ExecutablePath;
        shortcut.WorkingDirectory = Application.StartupPath;
        //shortcut...
        shortcut.Save();
    }

বাক্সের বাইরে কাজ করে, কেবল এটির অনুলিপি করুন
— rluks

9

আপনার শর্টকাট সহজেই তৈরি করতে vbAccelerator এ ShellLink.cs ব্যবহার করুন !

private static void AddShortCut()
{
using (ShellLink shortcut = new ShellLink())
{
    shortcut.Target = Application.ExecutablePath;
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
    shortcut.Description = "My Shorcut";
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal;
    shortcut.Save(SHORTCUT_FILEPATH);
}
}

3
সেই লিঙ্কটি এখন মারা গেছে তবে আপনি এটির সংরক্ষণাগারিত সংস্করণটি এখানে খুঁজে পেতে পারেন ।
— pswg

7

আমার কোডটি এখানে:

public static class ShortcutHelper
{
    #region Constants
    /// <summary>
    /// Default shortcut extension
    /// </summary>
    public const string DEFAULT_SHORTCUT_EXTENSION = ".lnk";

    private const string WSCRIPT_SHELL_NAME = "WScript.Shell";
    #endregion

    /// <summary>
    /// Create shortcut in current path.
    /// </summary>
    /// <param name="linkFileName">shortcut name(include .lnk extension.)</param>
    /// <param name="targetPath">target path</param>
    /// <param name="workingDirectory">working path</param>
    /// <param name="arguments">arguments</param>
    /// <param name="hotkey">hot key(ex: Ctrl+Shift+Alt+A)</param>
    /// <param name="shortcutWindowStyle">window style</param>
    /// <param name="description">shortcut description</param>
    /// <param name="iconNumber">icon index(start of 0)</param>
    /// <returns>shortcut file path.</returns>
    /// <exception cref="System.IO.FileNotFoundException"></exception>
    public static string CreateShortcut(
        string linkFileName,
        string targetPath,
        string workingDirectory = "",
        string arguments = "",
        string hotkey = "",
        ShortcutWindowStyles shortcutWindowStyle = ShortcutWindowStyles.WshNormalFocus,
        string description = "",
        int iconNumber = 0)
    {
        if (linkFileName.Contains(DEFAULT_SHORTCUT_EXTENSION) == false)
        {
            linkFileName = string.Format("{0}{1}", linkFileName, DEFAULT_SHORTCUT_EXTENSION);
        }

        if (File.Exists(targetPath) == false)
        {
            throw new FileNotFoundException(targetPath);
        }

        if (workingDirectory == string.Empty)
        {
            workingDirectory = Path.GetDirectoryName(targetPath);
        }

        string iconLocation = string.Format("{0},{1}", targetPath, iconNumber);

        if (Environment.Version.Major >= 4)
        {
            Type shellType = Type.GetTypeFromProgID(WSCRIPT_SHELL_NAME);
            dynamic shell = Activator.CreateInstance(shellType);
            dynamic shortcut = shell.CreateShortcut(linkFileName);

            shortcut.TargetPath = targetPath;
            shortcut.WorkingDirectory = workingDirectory;
            shortcut.Arguments = arguments;
            shortcut.Hotkey = hotkey;
            shortcut.WindowStyle = shortcutWindowStyle;
            shortcut.Description = description;
            shortcut.IconLocation = iconLocation;

            shortcut.Save();
        }
        else
        {
            Type shellType = Type.GetTypeFromProgID(WSCRIPT_SHELL_NAME);
            object shell = Activator.CreateInstance(shellType);
            object shortcut = shellType.InvokeMethod("CreateShortcut", shell, linkFileName);
            Type shortcutType = shortcut.GetType();

            shortcutType.InvokeSetMember("TargetPath", shortcut, targetPath);
            shortcutType.InvokeSetMember("WorkingDirectory", shortcut, workingDirectory);
            shortcutType.InvokeSetMember("Arguments", shortcut, arguments);
            shortcutType.InvokeSetMember("Hotkey", shortcut, hotkey);
            shortcutType.InvokeSetMember("WindowStyle", shortcut, shortcutWindowStyle);
            shortcutType.InvokeSetMember("Description", shortcut, description);
            shortcutType.InvokeSetMember("IconLocation", shortcut, iconLocation);

            shortcutType.InvokeMethod("Save", shortcut);
        }

        return Path.Combine(System.Windows.Forms.Application.StartupPath, linkFileName);
    }

    private static object InvokeSetMember(this Type type, string methodName, object targetInstance, params object[] arguments)
    {
        return type.InvokeMember(
            methodName,
            BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty,
            null,
            targetInstance,
            arguments);
    }

    private static object InvokeMethod(this Type type, string methodName, object targetInstance, params object[] arguments)
    {
        return type.InvokeMember(
            methodName,
            BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod,
            null,
            targetInstance,
            arguments);
    }

    /// <summary>
    /// windows styles
    /// </summary>
    public enum ShortcutWindowStyles
    {
        /// <summary>
        /// Hide
        /// </summary>
        WshHide = 0,
        /// <summary>
        /// NormalFocus
        /// </summary>
        WshNormalFocus = 1,
        /// <summary>
        /// MinimizedFocus
        /// </summary>
        WshMinimizedFocus = 2,
        /// <summary>
        /// MaximizedFocus
        /// </summary>
        WshMaximizedFocus = 3,
        /// <summary>
        /// NormalNoFocus
        /// </summary>
        WshNormalNoFocus = 4,
        /// <summary>
        /// MinimizedNoFocus
        /// </summary>
        WshMinimizedNoFocus = 6,
    }
}

5

সম্পাদনা করুন: আমি আর এই সমাধানের প্রস্তাব দিই না। যদি উইন্ডোজ স্ক্রিপ্টিং ইঞ্জিন ব্যবহারের চেয়ে আরও ভাল কোনও পদ্ধতি এখনও না থাকে তবে কমপক্ষে @ মেহমেট এর সমাধানটি ব্যবহার করুন যা মেমরিতে একটি সরল পাঠ্য স্ক্রিপ্ট তৈরির পরিবর্তে ইঞ্জিনটিকে সরাসরি কল করে।

আমরা শর্টকাট তৈরি করতে ভিবিএস স্ক্রিপ্ট ব্যবহার করেছি। এর জন্য পি / ইনভোক, সিওএম ইন্টারপ এবং অতিরিক্ত ডিএলএল দরকার নেই। এটি এর মতো কাজ করে:

  • ক্রিয়েটশোর্টক সি # পদ্ধতির নির্দিষ্ট পরামিতিগুলির সাথে রানটাইমে একটি ভিবিএস স্ক্রিপ্ট তৈরি করুন
  • একটি অস্থায়ী ফাইল এই VBScript সংরক্ষণ করুন
  • স্ক্রিপ্ট শেষ হওয়ার জন্য অপেক্ষা করুন
  • অস্থায়ী ফাইলটি মুছুন

আপনি এখানে যান:

static string _scriptTempFilename;

/// <summary>
/// Creates a shortcut at the specified path with the given target and
/// arguments.
/// </summary>
/// <param name="path">The path where the shortcut will be created. This should
///     be a file with the LNK extension.</param>
/// <param name="target">The target of the shortcut, e.g. the program or file
///     or folder which will be opened.</param>
/// <param name="arguments">The additional command line arguments passed to the
///     target.</param>
public static void CreateShortcut(string path, string target, string arguments)
{
    // Check if link path ends with LNK or URL
    string extension = Path.GetExtension(path).ToUpper();
    if (extension != ".LNK" && extension != ".URL")
    {
        throw new ArgumentException("The path of the shortcut must have the extension .lnk or .url.");
    }

    // Get temporary file name with correct extension
    _scriptTempFilename = Path.GetTempFileName();
    File.Move(_scriptTempFilename, _scriptTempFilename += ".vbs");

    // Generate script and write it in the temporary file
    File.WriteAllText(_scriptTempFilename, String.Format(@"Dim WSHShell
Set WSHShell = WScript.CreateObject({0}WScript.Shell{0})
Dim Shortcut
Set Shortcut = WSHShell.CreateShortcut({0}{1}{0})
Shortcut.TargetPath = {0}{2}{0}
Shortcut.WorkingDirectory = {0}{3}{0}
Shortcut.Arguments = {0}{4}{0}
Shortcut.Save",
        "\"", path, target, Path.GetDirectoryName(target), arguments),
        Encoding.Unicode);

    // Run the script and delete it after it has finished
    Process process = new Process();
    process.StartInfo.FileName = _scriptTempFilename;
    process.Start();
    process.WaitForExit();
    File.Delete(_scriptTempFilename);
}

3

আপনাকে সাহায্য করার জন্য মন্তব্য সহ এখানে একটি (পরীক্ষিত) এক্সটেনশন পদ্ধতি।

using IWshRuntimeLibrary;
using System;

namespace Extensions
{
    public static class XShortCut
    {
        /// <summary>
        /// Creates a shortcut in the startup folder from a exe as found in the current directory.
        /// </summary>
        /// <param name="exeName">The exe name e.g. test.exe as found in the current directory</param>
        /// <param name="startIn">The shortcut's "Start In" folder</param>
        /// <param name="description">The shortcut's description</param>
        /// <returns>The folder path where created</returns>
        public static string CreateShortCutInStartUpFolder(string exeName, string startIn, string description)
        {
            var startupFolderPath = Environment.SpecialFolder.Startup.GetFolderPath();
            var linkPath = startupFolderPath + @"\" + exeName + "-Shortcut.lnk";
            var targetPath = Environment.CurrentDirectory + @"\" + exeName;
            XFile.Delete(linkPath);
            Create(linkPath, targetPath, startIn, description);
            return startupFolderPath;
        }

        /// <summary>
        /// Create a shortcut
        /// </summary>
        /// <param name="fullPathToLink">the full path to the shortcut to be created</param>
        /// <param name="fullPathToTargetExe">the full path to the exe to 'really execute'</param>
        /// <param name="startIn">Start in this folder</param>
        /// <param name="description">Description for the link</param>
        public static void Create(string fullPathToLink, string fullPathToTargetExe, string startIn, string description)
        {
            var shell = new WshShell();
            var link = (IWshShortcut)shell.CreateShortcut(fullPathToLink);
            link.IconLocation = fullPathToTargetExe;
            link.TargetPath = fullPathToTargetExe;
            link.Description = description;
            link.WorkingDirectory = startIn;
            link.Save();
        }
    }
}

এবং ব্যবহারের একটি উদাহরণ:

XShortCut.CreateShortCutInStartUpFolder(THEEXENAME, 
    Environment.CurrentDirectory,
    "Starts some executable in the current directory of application");

১ ম পারম এক্সির নাম নির্ধারণ করে (বর্তমান ডিরেক্টরিতে পাওয়া যায়) ২ য় পারম হ'ল "স্টার্ট ইন" ফোল্ডার এবং তৃতীয় পারম শর্টকাটের বিবরণ।

এই কোড ব্যবহার করার উদাহরণ

লিঙ্কটির নামকরণের সম্মেলনটি কী করবে সে সম্পর্কে কোনও দ্বিধা প্রকাশ করে না। লিঙ্কটি পরীক্ষা করতে কেবল এটি ডাবল ক্লিক করুন।

চূড়ান্ত দ্রষ্টব্য: অ্যাপ্লিকেশন নিজেই (লক্ষ্য) এর সাথে আইকন চিত্র যুক্ত থাকতে হবে। লিঙ্কটি সহজেই উদাহরণের মধ্যে আইসিএন সনাক্ত করতে সক্ষম। যদি লক্ষ্য অ্যাপ্লিকেশনটির একাধিক আইকন থাকে তবে আপনি লিঙ্কটির বৈশিষ্ট্যগুলি খুলতে এবং আইকনটিকে এক্সে পাওয়া অন্য কোনওটিতে পরিবর্তন করতে পারেন।


আমি একটি ত্রুটি পেয়ে যাচ্ছি যে .GetFolderPath () বিদ্যমান নেই। এক্সফিলের জন্য একই.ডিলিট। আমি কী মিস করছি?
— রাল্ফএফ

ত্রুটি এখানে কি ঘটে? Environment.SpecialFolder.Startup.GetFolderPath ();
— জন পিটারস

2

আমি শর্টকাট তৈরি করতে "উইন্ডোজ স্ক্রিপ্ট হোস্ট অবজেক্ট মডেল" রেফারেন্স ব্যবহার করি।

প্রকল্পের উল্লেখগুলিতে "উইন্ডোজ স্ক্রিপ্ট হোস্ট অবজেক্ট মডেল" যুক্ত করা হচ্ছে

এবং নির্দিষ্ট স্থানে শর্টকাট তৈরি করতে:

    void CreateShortcut(string linkPath, string filename)
    {
        // Create shortcut dir if not exists
        if (!Directory.Exists(linkPath))
            Directory.CreateDirectory(linkPath);

        // shortcut file name
        string linkName = Path.ChangeExtension(Path.GetFileName(filename), ".lnk");

        // COM object instance/props
        IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
        IWshRuntimeLibrary.IWshShortcut sc = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(linkName);
        sc.Description = "some desc";
        //shortcut.IconLocation = @"C:\..."; 
        sc.TargetPath = linkPath;
        // save shortcut to target
        sc.Save();
    }

0
private void CreateShortcut(string executablePath, string name)
    {
        CMDexec("echo Set oWS = WScript.CreateObject('WScript.Shell') > CreateShortcut.vbs");
        CMDexec("echo sLinkFile = '" + Environment.GetEnvironmentVariable("homedrive") + "\\users\\" + Environment.GetEnvironmentVariable("username") + "\\desktop\\" + name + ".ink' >> CreateShortcut.vbs");
        CMDexec("echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs");
        CMDexec("echo oLink.TargetPath = '" + executablePath + "' >> CreateShortcut.vbs");
        CMDexec("echo oLink.Save >> CreateShortcut.vbs");
        CMDexec("cscript CreateShortcut.vbs");
        CMDexec("del CreateShortcut.vbs");
    }

0

আমি আইডাব্লুশরুনটাইম লাইব্রারি ব্যবহার করে রুস্তম ইরজায়েভের উত্তরের উপর ভিত্তি করে একটি মোড়ক ক্লাস তৈরি করেছি।

আইডাব্লুশআরটাইমলিবারি -> তথ্যসূত্র -> সিওএম> উইন্ডোজ স্ক্রিপ্ট হোস্ট অবজেক্ট মডেল

using System;
using System.IO;
using IWshRuntimeLibrary;
using File = System.IO.File;

public static class Shortcut
{
    public static void CreateShortcut(string originalFilePathAndName, string destinationSavePath)
    {
        string fileName = Path.GetFileNameWithoutExtension(originalFilePathAndName);
        string originalFilePath = Path.GetDirectoryName(originalFilePathAndName);

        string link = destinationSavePath + Path.DirectorySeparatorChar + fileName + ".lnk";
        var shell = new WshShell();
        var shortcut = shell.CreateShortcut(link) as IWshShortcut;
        if (shortcut != null)
        {
            shortcut.TargetPath = originalFilePathAndName;
            shortcut.WorkingDirectory = originalFilePath;
            shortcut.Save();
        }
    }

    public static void CreateStartupShortcut()
    {
        CreateShortcut(System.Reflection.Assembly.GetEntryAssembly()?.Location, Environment.GetFolderPath(Environment.SpecialFolder.Startup));
    }

    public static void DeleteShortcut(string originalFilePathAndName, string destinationSavePath)
    {
        string fileName = Path.GetFileNameWithoutExtension(originalFilePathAndName);
        string originalFilePath = Path.GetDirectoryName(originalFilePathAndName);

        string link = destinationSavePath + Path.DirectorySeparatorChar + fileName + ".lnk";
        if (File.Exists(link)) File.Delete(link);
    }

    public static void DeleteStartupShortcut()
    {
        DeleteShortcut(System.Reflection.Assembly.GetEntryAssembly()?.Location, Environment.GetFolderPath(Environment.SpecialFolder.Startup));
    }
}

-2

উইন্ডোজ ভিস্তা / 7/8/10 এর জন্য, আপনি এর পরিবর্তে একটি সিমিলিংক তৈরি করতে পারেন mklink।

Process.Start("cmd.exe", $"/c mklink {linkName} {applicationPath}");

বিকল্পভাবে, CreateSymbolicLinkপি / ইনভোকের মাধ্যমে কল করুন।


শর্টকাটের সাথে এর কোনও যোগসূত্র নেই।
— ম্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.