private void BuildTaskBarItems()
{
Dispatcher.BeginInvoke(new Action(() =>
{
Dictionary<string, TaskBarItem> items = new Dictionary<string, TaskBarItem>();
int Position = 0;
foreach (string linkPath in TaskbarPinnedItems.GetPinnedTaskBarItems())
{
ShellFile link = ShellFile.FromFilePath(linkPath);
if (!link.IsLink)
{
link.Dispose();
continue;
}
string displayName = link.GetDisplayName(DisplayNameType.Default);
string path = link.Properties.System.Link.TargetParsingPath.Value;
if (System.IO.File.Exists(path))
items.Add(path, new TaskBarItem(path, null, displayName, Imaging.ExtractIcon(path, IntPtr.Zero), Position++));
else
items.Add(EXPLORER_PATH, new TaskBarItem(EXPLORER_PATH, null, "File Explorer", Imaging.ExtractIcon(EXPLORER_PATH, IntPtr.Zero), Position++));
link.Dispose();
}
foreach (var win in WindowsTasksService.Windows.Where((w) => w.Enabled && w.ClassName != "Progman"))
{
if (!items.ContainsKey(win.Process.MainModule.FileName))
items.Add(win.Process.MainModule.FileName, new TaskBarItem(win.Process.MainModule.FileName, null, win.Title, win.Icon, Position++));
items[win.Process.MainModule.FileName]._openWindows.Add(win);
}
foreach (var itm in items.Values)
{
TaskBarItem existingWindow = null;
if ((existingWindow = TaskBarItems.FirstOrDefault((esw) => esw.FullPath == itm.FullPath)) != null)
itm.CopyFrom(existingWindow);
}
TaskBarItems.Clear();
foreach (var itm in items.Values.OrderByDescending((itm) => -1 * itm.Position))
TaskBarItems.Add(itm);
}));
}