void Explorer_NavigationPending(object sender, NavigationPendingEventArgs e) { if (fsw_AC != null) fsw_AC.Dispose(); e.Cancel = IsCancel; if (IsAfterRename) breadcrumbBarControl1.ExitEditMode(); try { this.Title = "Better Explorer - " + e.PendingLocation.GetDisplayName(DisplayNameType.Default); Dispatcher.BeginInvoke(DispatcherPriority.Render, (ThreadStart)(() => { ConstructMoveToCopyToMenu(); if (e.PendingLocation.IsFileSystemObject || e.PendingLocation.IsNetDrive || e.PendingLocation.ParsingName.StartsWith(@"\\")) { try { fsw_AC = new FileSystemWatcher(e.PendingLocation.ParsingName); fsw_AC.EnableRaisingEvents = true; fsw_AC.Created += new FileSystemEventHandler(fsw_AC_Created); fsw_AC.Deleted += new FileSystemEventHandler(fsw_AC_Deleted); } catch { } } if (e.PendingLocation.IsFileSystemObject) { btnSizeChart.IsEnabled = true; } else { btnSizeChart.IsEnabled = false; } this.breadcrumbBarControl1.LoadDirectory(e.PendingLocation); this.breadcrumbBarControl1.LastPath = e.PendingLocation.ParsingName; IntPtr pIDL = IntPtr.Zero; try { uint iAttribute; SHParseDisplayName(e.PendingLocation.ParsingName, IntPtr.Zero, out pIDL, (uint)0, out iAttribute); WindowsAPI.SHFILEINFO sfi = new WindowsAPI.SHFILEINFO(); IntPtr Res = IntPtr.Zero; if (pIDL != IntPtr.Zero) { if (!e.PendingLocation.IsFileSystemObject) { Res = WindowsAPI.SHGetFileInfo(pIDL, 0, ref sfi, (uint)Marshal.SizeOf(sfi), WindowsAPI.SHGFI.IconLocation | WindowsAPI.SHGFI.SmallIcon | WindowsAPI.SHGFI.PIDL); } } if (e.PendingLocation.IsFileSystemObject) { WindowsAPI.SHGetFileInfo(e.PendingLocation.ParsingName, 0, ref sfi, (uint)Marshal.SizeOf(sfi), (uint)WindowsAPI.SHGFI.IconLocation | (uint)WindowsAPI.SHGFI.SmallIcon); } JumpTask JTask = new JumpTask(); JTask.ApplicationPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; JTask.Arguments = "\"" + e.PendingLocation.ParsingName + "\""; JTask.Title = e.PendingLocation.GetDisplayName(DisplayNameType.Default); JTask.IconResourcePath = sfi.szDisplayName; JTask.IconResourceIndex = sfi.iIcon; JumpList.AddToRecentCategory(JTask); AppJL.Apply(); } finally { if (pIDL != IntPtr.Zero) Marshal.FreeCoTaskMem(pIDL); } try { //CloseableTabItem it = new CloseableTabItem(); //CreateTabbarRKMenu(it); e.PendingLocation.Thumbnail.CurrentSize = new System.Windows.Size(16, 16); e.PendingLocation.Thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly; (tabControl1.SelectedItem as CloseableTabItem).Header = e.PendingLocation.GetDisplayName(DisplayNameType.Default); (tabControl1.SelectedItem as CloseableTabItem).TabIcon = e.PendingLocation.Thumbnail.BitmapSource; (tabControl1.SelectedItem as CloseableTabItem).Path = e.PendingLocation; if (!isGoingBackOrForward) { (tabControl1.SelectedItem as CloseableTabItem).log.CurrentLocation = e.PendingLocation; } isGoingBackOrForward = false; leftNavBut.IsEnabled = (tabControl1.SelectedItem as CloseableTabItem).log.CanNavigateBackwards; rightNavBut.IsEnabled = (tabControl1.SelectedItem as CloseableTabItem).log.CanNavigateForwards; //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).DragEnter += new DragEventHandler(newt_DragEnter); //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).DragLeave += new DragEventHandler(newt_DragLeave); //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).DragOver += new DragEventHandler(newt_DragOver); //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).Drop += new DragEventHandler(newt_Drop); //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).AllowDrop = true; //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).Index = CurrentTabIndex; //(tabControl1.Items[CurrentTabIndex] as CloseableTabItem).CloseTab += new RoutedEventHandler(cti_CloseTab); //tabControl1.Items[CurrentTabIndex] = it; //tabControl1.SelectedIndex = CurrentTabIndex; } catch (Exception) { } bool isinLibraries = false; if (e.PendingLocation.Parent != null) { if (e.PendingLocation.Parent.ParsingName == KnownFolders.Libraries.ParsingName) { isinLibraries = true; } else { isinLibraries = false; } } btnCreateFolder.IsEnabled = e.PendingLocation.IsFileSystemObject || (e.PendingLocation.ParsingName == KnownFolders.Libraries.ParsingName) || (isinLibraries); if (e.PendingLocation.ParsingName == KnownFolders.Libraries.ParsingName) { btnCreateFolder.Header = FindResource("btnNewLibraryCP"); //"New Library"; stNewFolder.Title = FindResource("btnNewLibraryCP").ToString();//"New Library"; stNewFolder.Text = "Creates a new library in the current folder."; stNewFolder.Image = new BitmapImage(new Uri(@"/BetterExplorer;component/Images/newlib32.png", UriKind.Relative)); btnCreateFolder.LargeIcon = @"..\Images\newlib32.png"; btnCreateFolder.Icon = @"..\Images\newlib16.png"; } else { btnCreateFolder.Header = FindResource("btnNewFolderCP");//"New Folder"; stNewFolder.Title = FindResource("btnNewFolderCP").ToString(); //"New Folder"; stNewFolder.Text = "Creates a new folder in the current folder"; stNewFolder.Image = new BitmapImage(new Uri(@"/BetterExplorer;component/Images/folder_new32.png", UriKind.Relative)); btnCreateFolder.LargeIcon = @"..\Images\folder_new32.png"; btnCreateFolder.Icon = @"..\Images\folder_new16.png"; } if (e.PendingLocation.IsFolder && !e.PendingLocation.IsDrive && !e.PendingLocation.IsSearchFolder) { //ctgFolderTools.Visibility = Visibility.Visible; } if (e.PendingLocation.ParsingName.Contains(KnownFolders.Libraries.ParsingName) && e.PendingLocation.ParsingName != KnownFolders.Libraries.ParsingName) { ctgLibraries.Visibility = System.Windows.Visibility.Visible; ctgFolderTools.Visibility = System.Windows.Visibility.Collapsed; ctgImage.Visibility = System.Windows.Visibility.Collapsed; ctgArchive.Visibility = System.Windows.Visibility.Collapsed; ctgExe.Visibility = System.Windows.Visibility.Collapsed; inLibrary = true; try { ShellLibrary lib = ShellLibrary.Load(e.PendingLocation.GetDisplayName(DisplayNameType.Default), false); IsFromSelectionOrNavigation = true; chkPinNav.IsChecked = lib.IsPinnedToNavigationPane; IsFromSelectionOrNavigation = false; foreach (ShellObject item in lib) { MenuItem miItem = new MenuItem(); miItem.Header = item.GetDisplayName(DisplayNameType.Default); miItem.Tag = item; item.Thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly; item.Thumbnail.CurrentSize = new System.Windows.Size(16, 16); miItem.Icon = item.Thumbnail.BitmapSource; miItem.GroupName = "GRDS1"; miItem.IsCheckable = true; miItem.IsChecked = (item.ParsingName == lib.DefaultSaveFolder); miItem.Click += new RoutedEventHandler(miItem_Click); btnDefSave.Items.Add(miItem); } btnDefSave.IsEnabled = !(lib.Count == 0); lib.Close(); } catch { } } else { if (!e.PendingLocation.ParsingName.ToLowerInvariant().EndsWith("library-ms")) { btnDefSave.Items.Clear(); ctgLibraries.Visibility = System.Windows.Visibility.Collapsed; inLibrary = false; } //MessageBox.Show("Not in Library"); } if (e.PendingLocation.IsDrive) { ctgDrive.Visibility = System.Windows.Visibility.Visible; inDrive = true; //MessageBox.Show("In Drive"); } else { ctgDrive.Visibility = System.Windows.Visibility.Collapsed; inDrive = false; //MessageBox.Show("Not In Drive"); } if (isinLibraries) { ctgFolderTools.Visibility = Visibility.Collapsed; } } )); GC.WaitForPendingFinalizers(); GC.Collect(); } catch (Exception exe) { ShellObject ne = e.PendingLocation; bool isinLibraries = false; bool itisLibraries = false; if (ne.Parent.ParsingName == KnownFolders.Libraries.ParsingName) { isinLibraries = true; } else { isinLibraries = false; } if (ne.ParsingName == KnownFolders.Libraries.ParsingName) { itisLibraries = true; } else { itisLibraries = false; } //if (MessageBox.Show("An error occurred while loading a folder. Please report this issue at http://bexplorer.codeplex.com/. \r\n\r\nHere is some information about the folder being loaded:\r\n\r\nName: " + ne.GetDisplayName(DisplayNameType.Default) + "\r\nLocation: " + ne.ParsingName + // "\r\n\r\nFolder, Drive, or Library: " + GetYesNoFromBoolean(ne.IsFolder) + "\r\nDrive: " + GetYesNoFromBoolean(ne.IsDrive) + "\r\nNetwork Drive: " + GetYesNoFromBoolean(ne.IsNetDrive) + "\r\nRemovable: " + GetYesNoFromBoolean(ne.IsRemovable) + // "\r\nSearch Folder: " + GetYesNoFromBoolean(ne.IsSearchFolder) + "\r\nShared: " + GetYesNoFromBoolean(ne.IsShared) + "\r\nShortcut: " + GetYesNoFromBoolean(ne.IsLink) + "\r\nLibrary: " + GetYesNoFromBoolean(isinLibraries) + "\r\nLibraries Folder: " + GetYesNoFromBoolean(itisLibraries) + // "\r\n\r\n Would you like to see additional information? Click No to try continuing the program.", "Error Occurred on Completing Navigation", MessageBoxButton.YesNo, MessageBoxImage.Error) == MessageBoxResult.Yes) //{ // MessageBox.Show("An error occurred while loading a folder. Please report this issue at http://bexplorer.codeplex.com/. \r\n\r\nHere is additional information about the error: \r\n\r\n" + exe.Message + "\r\n\r\n" + exe.ToString(), "Additional Error Data", MessageBoxButton.OK, MessageBoxImage.Error); //} } Explorer.ExplorerSetFocus(); //if (Itmpop.Visibility == System.Windows.Visibility.Visible) //{ // Itmpop.Visibility = System.Windows.Visibility.Hidden; //} }
public HResult ClearFolderIcon(string wszPath) { HResult hr; WindowsAPI.LPSHFOLDERCUSTOMSETTINGS fcs = new WindowsAPI.LPSHFOLDERCUSTOMSETTINGS(); fcs.dwSize = (uint)Marshal.SizeOf(fcs); fcs.dwMask = WindowsAPI.FCSM_ICONFILE; hr = WindowsAPI.SHGetSetFolderCustomSettings(ref fcs, wszPath, WindowsAPI.FCS_FORCEWRITE); if (hr == HResult.Ok) { // Update the icon cache WindowsAPI.SHFILEINFO sfi = new WindowsAPI.SHFILEINFO(); WindowsAPI.SHGetFileInfo(wszPath.Replace(@"\\", @"\"), 0, ref sfi, (uint)Marshal.SizeOf(sfi), WindowsAPI.SHGFI_ICONLOCATION); int iIconIndex = WindowsAPI.Shell_GetCachedImageIndex(sfi.szDisplayName.Replace(@"\\", @"\"), sfi.iIcon, 0); WindowsAPI.SHUpdateImage(sfi.szDisplayName.Replace(@"\\", @"\"), sfi.iIcon, 0, iIconIndex); WindowsAPI.SHChangeNotify(WindowsAPI.HChangeNotifyEventID.SHCNE_UPDATEIMAGE, WindowsAPI.HChangeNotifyFlags.SHCNF_DWORD | WindowsAPI.HChangeNotifyFlags.SHCNF_FLUSHNOWAIT, IntPtr.Zero, (IntPtr)sfi.iIcon); } return hr; }