public ApplicationInfo PathToApp(string file, bool allowNonApps) { ApplicationInfo ai = new ApplicationInfo(); string fileExt = Path.GetExtension(file); if (allowNonApps || ExecutableExtensions.Contains(fileExt, StringComparer.OrdinalIgnoreCase)) { try { ai.Name = Path.GetFileNameWithoutExtension(file); ai.Path = file; string target = string.Empty; if (fileExt.Equals(".lnk", StringComparison.OrdinalIgnoreCase)) { Interop.Shell.Link link = new Interop.Shell.Link(file); target = link.Target; } else { target = file; } ai.Target = target; // remove items that we can't execute. if (!allowNonApps) { if (!String.IsNullOrEmpty(target) && !ExecutableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase)) { Debug.WriteLine("Not an app: " + file + ": " + target); return(null); } // remove things that aren't apps (help, uninstallers, etc) foreach (string word in excludedNames) { if (ai.Name.ToLower().Contains(word)) { Debug.WriteLine("Excluded item: " + file + ": " + target); return(null); } } } return(ai); } catch (Exception ex) { Debug.WriteLine("Error creating ApplicationInfo object in appgrabber. " + ex.Message); return(null); } } return(null); }
private List <ApplicationInfo> generateAppListRecursing(DirectoryInfo directory) { //_logger.Debug("Scanning directory {0}", directory.FullName); List <ApplicationInfo> rval = new List <ApplicationInfo>(); foreach (DirectoryInfo subfolder in directory.GetDirectories()) { rval.AddRange(generateAppListRecursing(subfolder)); } foreach (FileInfo file in directory.GetFiles()) { //_logger.Debug("Interrogating file {0}", file.FullName); ApplicationInfo ai = new ApplicationInfo(); String ext = Path.GetExtension(file.FullName); if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) { try { ai.Name = Path.GetFileNameWithoutExtension(file.FullName); ai.Path = file.FullName; string target = string.Empty; if (file.Extension.Equals(".lnk", StringComparison.OrdinalIgnoreCase)) { //_logger.Debug("Attempting to interrogate shortcut to application: {0}", file.FullName); Interop.Shell.Link link = new Interop.Shell.Link(file.FullName); target = link.Target; } else { target = file.FullName; } if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase)) { System.Diagnostics.Debug.WriteLine(file.Name + ": " + target); continue; } //_logger.Debug("Attempting to get associated icon for {0}", file.FullName); //ai.Icon = ai.GetAssociatedIcon(); rval.Add(ai); } catch (Exception) { //Output the reason to the debugger //_logger.Debug("Error creating ApplicationInfo object in appgrabber. Details: {0}\n{1}", ex.Message, ex.StackTrace); } } } return(rval); }
/// <summary> /// Gets an ImageSource object representing the associated icon of a file. /// </summary> public ImageSource GetAssociatedIcon() { String ext = System.IO.Path.GetExtension(this.Path); if (ext.Equals(".lnk", StringComparison.OrdinalIgnoreCase)) { Interop.Shell.Link link = new Interop.Shell.Link(this.Path); IntPtr hIcon = Interop.Shell.GetHIcon(link.IconFile, link.IconIndex); if (hIcon != IntPtr.Zero) { return(WpfWin32ImageConverter.GetImageFromHIcon(hIcon)); } } return(WpfWin32ImageConverter.GetImageFromAssociatedIcon(this.Path)); }
/*private List<ApplicationInfo> generateAppListRecursing(DirectoryInfo directory) { List<ApplicationInfo> rval = new List<ApplicationInfo>(); foreach (DirectoryInfo subfolder in directory.GetDirectories()) { rval.AddRange(generateAppListRecursing(subfolder)); } foreach (FileInfo file in directory.GetFiles()) { ApplicationInfo ai = new ApplicationInfo(); String ext = Path.GetExtension(file.FullName); if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) { try { ai.Name = Path.GetFileNameWithoutExtension(file.FullName); ai.Path = file.FullName; string target = string.Empty; if (file.Extension.Equals(".lnk", StringComparison.OrdinalIgnoreCase)) { Interop.Shell.Link link = new Interop.Shell.Link(file.FullName); target = link.Target; } else { target = file.FullName; } // remove items that we can't execute. also remove uninstallers if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase) || ai.Name == "Uninstall" || ai.Name.StartsWith("Uninstall ")) { System.Diagnostics.Debug.WriteLine("Not an app: " + file.Name + ": " + target); continue; } ai.Icon = ai.GetAssociatedIcon(); rval.Add(ai); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Error creating ApplicationInfo object in appgrabber. " + ex.Message); } } } return rval; }*/ private List<ApplicationInfo> generateAppList(string directory) { List<ApplicationInfo> rval = new List<ApplicationInfo>(); foreach (string file in Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories)) { ApplicationInfo ai = new ApplicationInfo(); String ext = Path.GetExtension(file); if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) { try { ai.Name = Path.GetFileNameWithoutExtension(file); ai.Path = file; string target = string.Empty; string fileExt = Path.GetExtension(file); if (fileExt.Equals(".lnk", StringComparison.OrdinalIgnoreCase)) { Interop.Shell.Link link = new Interop.Shell.Link(file); target = link.Target; } else { target = file; } // remove items that we can't execute. also remove uninstallers if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase) || ai.Name == "Uninstall" || ai.Name.StartsWith("Uninstall ")) { System.Diagnostics.Debug.WriteLine("Not an app: " + file + ": " + target); continue; } ai.Icon = ai.GetAssociatedIcon(); rval.Add(ai); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Error creating ApplicationInfo object in appgrabber. " + ex.Message); } } } return rval; }