// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace SystemTrayMenu.Utilities { using System; using System.Collections.Generic; using System.IO; using System.Linq; using IWshRuntimeLibrary; internal class GenerateDriveShortcuts { public static void Start() { List driveNamesToRemove = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().ToList(); DriveInfo[] driveInfos = DriveInfo.GetDrives(); foreach (DriveInfo driveInfo in driveInfos) { driveNamesToRemove.Remove(driveInfo.Name[0]); string linkPath = GetLinkPathFromDriveName(driveInfo.Name[..1]); if (!System.IO.File.Exists(linkPath)) { CreateShortcut(linkPath, driveInfo.Name); } } foreach (char driveName in driveNamesToRemove) { string possibleShortcut = GetLinkPathFromDriveName(driveName.ToString()); try { System.IO.File.Delete(possibleShortcut); } catch (Exception ex) { Log.Warn($"Could not delete shortcut at path:'{possibleShortcut}'", ex); } } } private static void CreateShortcut(string linkPath, string targetPath) { WshShell shell = new(); IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(linkPath); shortcut.Description = "Generated by SystemTrayMenu"; shortcut.TargetPath = targetPath; try { shortcut.Save(); } catch (Exception ex) { Log.Warn($"Could not create shortcut at path:'{linkPath}'", ex); } } private static string GetLinkPathFromDriveName(string driveName) { return Path.Combine(Config.Path, $" {driveName} .lnk"); } } }