SystemTrayMenu/Utilities/GenerateDriveShortcuts.cs

68 lines
2.1 KiB
C#

// <copyright file="GenerateDriveShortcuts.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
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<char> 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");
}
}
}