You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.6 KiB
64 lines
2.6 KiB
using System; |
|
using System.Diagnostics.CodeAnalysis; |
|
using System.Runtime.InteropServices; |
|
using System.Runtime.InteropServices.ComTypes; |
|
using System.Runtime.Versioning; |
|
using System.Text; |
|
|
|
namespace StabilityMatrix.Avalonia.Helpers; |
|
|
|
[SupportedOSPlatform("windows")] |
|
[SuppressMessage("ReSharper", "IdentifierTypo")] |
|
[SuppressMessage("ReSharper", "InconsistentNaming")] |
|
public static class WindowsShortcuts |
|
{ |
|
public static void CreateShortcut( |
|
string shortcutPath, |
|
string targetPath, |
|
string iconPath, |
|
string description) |
|
{ |
|
// ReSharper disable once SuspiciousTypeConversion.Global |
|
var link = (IShellLink) new ShellLink(); |
|
|
|
// setup shortcut information |
|
link.SetDescription(description); |
|
link.SetPath(targetPath); |
|
link.SetIconLocation(iconPath, 0); |
|
|
|
// ReSharper disable once SuspiciousTypeConversion.Global |
|
var file = (IPersistFile) link; |
|
file.Save(shortcutPath, false); |
|
} |
|
|
|
[ComImport] |
|
[Guid("00021401-0000-0000-C000-000000000046")] |
|
private class ShellLink |
|
{ |
|
} |
|
|
|
[ComImport] |
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
|
[Guid("000214F9-0000-0000-C000-000000000046")] |
|
private interface IShellLink |
|
{ |
|
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags); |
|
void GetIDList(out IntPtr ppidl); |
|
void SetIDList(IntPtr pidl); |
|
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); |
|
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); |
|
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); |
|
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); |
|
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); |
|
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); |
|
void GetHotkey(out short pwHotkey); |
|
void SetHotkey(short wHotkey); |
|
void GetShowCmd(out int piShowCmd); |
|
void SetShowCmd(int iShowCmd); |
|
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); |
|
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); |
|
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); |
|
void Resolve(IntPtr hwnd, int fFlags); |
|
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); |
|
} |
|
}
|
|
|