2014-12-13 62 views
1

嘿,大家我正在开始菜单样式程序,并想知道我是如何得到固定程序和所有程序列表。我开始了一些研究,并将发布我发现的内容,这样你们都可以帮助填补空白。c#开始菜单样式列表框

为了得到程序图标,我发现这个...

public static Icon IconFromFilePath(string filePath) 
{ 
    var result = (Icon)null; 

    try 
    { 
     result = Icon.ExtractAssociatedIcon(filePath); 
    } 
    catch (System.Exception) 
    { 
     // swallow and return nothing. You could supply a default Icon here as well 
    } 

    return result; 
} 

为了得到所有的程序和附加的程序,我觉得这些路径...

%USERPROFILE%\应用程序数据\漫游\微软\的Windows \开始菜单\程序

C:\ ProgramData \微软\的Windows \开始菜单\

这些是什么地方和如何做的startm请使用这些?我该如何使用它们?希望我不是要简要介绍一下,而是想表明我真的在努力解决这个问题,并且一直在寻找。谢谢!

+1

你在这里问什么?开始菜单以特定方式显示这些文件夹的内容(位于“所有程序”和“固定”列表中)。没有什么特别的事情发生。你能澄清你的问题吗? – BradleyDotNET 2014-12-13 01:12:11

+0

当然,我会尝试,总之我想知道我自己可以重新创建“固定”和“所有程序”列表。 – Carbongrip 2014-12-13 05:19:02

+0

好吧,这听起来像你已经有你需要的信息。你错过了什么? – BradleyDotNET 2014-12-13 05:47:24

回答

2

首先,你可以用得到的用户固定的程序列表:

%APPDATA%\微软\的Internet Explorer \快速启动\用户 已固定\的StartMenu

贷记到https://superuser.com/a/171129

该文件夹和您已经找到的文件夹都包含开始菜单的所有快捷方式。您可以使用Directory.EnumerateFilesDirectory.GetFiles获取文件。一旦你的文件列表,你需要创建一个视图模型对象为他们每个人:

public class StartMenuItem 
{ 
    public Image Icon {get; set;} 
    public String LinkPath {get; set;} 
} 

创建它们的收集和您的列表视图ItemSource绑定到它。最后,启动应用程序,你可以使用Process.Start

ProcessStartInfo info = new ProcessStartInfo ("example.lnk"); 
info.CreateNoWindow = true; 
info.RedirectStandardError = true; 
info.RedirectStandardOutput = true; 
info.RedirectStandardInput = true; 
Process whatever = Process.Start(info); 

更多信息请参见Run application via shortcut using Process.Start C#

+1

注意,我没有发布'DataTemplate',因为我的答案已经很长了。如果您有关于如何绑定到模板中的图像的问题,或者如何设置命令来运行'Process.Start',我会问另一个关于该部分的问题。 – BradleyDotNET 2014-12-15 18:20:06

+0

谢谢!这正是我所需要的,如果我需要process.start的更多帮助,我会做出一个线索,但认为我理解它。 – Carbongrip 2014-12-15 22:41:19