#nullable disable
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace BizHawk.Common
{
public static class ShellLinkImports
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WIN32_FIND_DATAW
{
public uint dwFileAttributes;
public long ftCreationTime;
public long ftLastAccessTime;
public long ftLastWriteTime;
public uint nFileSizeHigh;
public uint nFileSizeLow;
public uint dwReserved0;
public uint dwReserved1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName;
}
[Flags]
public enum SLGP_FLAGS {}
[Flags]
public enum SLR_FLAGS {}
/// The IShellLink interface allows Shell links to be created, modified, and resolved
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
public interface IShellLinkW
{
/// Retrieves the path and file name of a Shell link object
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
/// Retrieves the list of item identifiers for a Shell link object
void GetIDList(out IntPtr ppidl);
/// Sets the pointer to an item identifier list (PIDL) for a Shell link object.
void SetIDList(IntPtr pidl);
/// Retrieves the description string for a Shell link object
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
/// Sets the description for a Shell link object. The description can be any application-defined string
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
/// Retrieves the name of the working directory for a Shell link object
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
/// Sets the name of the working directory for a Shell link object
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
/// Retrieves the command-line arguments associated with a Shell link object
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
/// Sets the command-line arguments for a Shell link object
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
/// Retrieves the hot key for a Shell link object
void GetHotkey(out short pwHotkey);
/// Sets a hot key for a Shell link object
void SetHotkey(short wHotkey);
/// Retrieves the show command for a Shell link object
void GetShowCmd(out int piShowCmd);
/// Sets the show command for a Shell link object. The show command sets the initial show state of the window.
void SetShowCmd(int iShowCmd);
/// Retrieves the location (path and index) of the icon for a Shell link object
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);
/// Sets the location (path and index) of the icon for a Shell link object
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
/// Sets the relative path to the Shell link object
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
/// Attempts to find the target of a Shell link, even if it has been moved or renamed
void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
/// Sets the path and file name of a Shell link object
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
}
[ComImport, Guid("0000010c-0000-0000-c000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersist
{
[PreserveSig]
void GetClassID(out Guid pClassID);
}
[ComImport, Guid("0000010b-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistFile : IPersist
{
new void GetClassID(out Guid pClassID);
[PreserveSig]
int IsDirty();
[PreserveSig]
void Load([In, MarshalAs(UnmanagedType.LPWStr)]string pszFileName, uint dwMode);
[PreserveSig]
void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [In, MarshalAs(UnmanagedType.Bool)] bool fRemember);
[PreserveSig]
void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
[PreserveSig]
void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName);
}
/// CLSID_ShellLink from ShlGuid.h
[ComImport, Guid("00021401-0000-0000-C000-000000000046")]
public class ShellLink /* : IPersistFile, IShellLinkW */ {}
}
}