【问题标题】:How to remove StartMenu shortcut using C#如何使用 C# 删除 StartMenu 快捷方式
【发布时间】:2009-03-16 14:48:34
【问题描述】:

如何使用 C# 从 Windows 的开始菜单中删除快捷方式文件夹,我知道如何使用以下代码:

    private void RemoveShortCutFolder(string folder)
    {
        folder = folder.Replace("\"  ", "");
        folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), folder);
        try
        {
            if (System.IO.Directory.Exists(folder))
            {
                System.IO.Directory.Delete(folder, true);
            }
            else
            {
            }
        }
        catch (Exception)
        {
        }
    }

但问题是我需要删除所有用户文件夹中的一个快捷方式文件夹,而不是当前登录的用户。 Environment.SpecialFolder.StartMenu 为我提供当前用户而不是所有用户文件夹。

任何想法,

谢谢,

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    如果你不介意一点Win32,你可以使用SHGetSpecialFolderPath

    [DllImport("shell32.dll")]
    static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, CSIDL nFolder, bool fCreate);
    
    enum CSIDL
    {
      COMMON_STARTMENU = 0x0016,
      COMMON_PROGRAMS = 0x0017
    }
    
    static void Main(string[] args)
    {
      StringBuilder allUsersStartMenu = new StringBuilder(255);
      SHGetSpecialFolderPath(IntPtr.Zero, allUsersStartMenu, CSIDL.COMMON_PROGRAMS, false);
      Console.WriteLine("All Users' Start Menu is in {0}", allUsersStartMenu.ToString());
    }
    

    【讨论】:

      【解决方案2】:

      使用 Environment.SpecialFolder.CommonStartMenu 代替 StartMenu。

      【讨论】:

        【解决方案3】:

        谢谢大家,我找到了答案:

            private void RemoveShortCutFolder(string folder)
            {
                folder = folder.Replace("\"  ", "");
                folder = Path.Combine(Path.Combine(Path.Combine(Environment.GetEnvironmentVariable("ALLUSERSPROFILE"), "Start Menu"), "Programs"), folder);
                try
                {
                    if (System.IO.Directory.Exists(folder))
                    {
                        System.IO.Directory.Delete(folder, true);
                    }
                    else
                    {
                    }
                }
                catch (Exception)
                {
                }
            }
        

        【讨论】:

        • 很高兴在非英语系统上崩溃。你可以在 Vista 上侥幸逃脱,但在 XP 上绝对不行。不幸的是,我也不知道如何正确地做到这一点:-/
        • 我几乎在考虑否决这个。它在许多情况下都无法正常工作(本地化的 Windows 版本只是其中之一)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多