|
|
|
|
/**************************************************************************
|
|
|
|
|
*
|
|
|
|
|
* Filename: ShellLinkNative.cs
|
|
|
|
|
* Author: Mattias Sj<EFBFBD>gren (mattias@mvps.org)
|
|
|
|
|
* http://www.msjogren.net/dotnet/
|
|
|
|
|
*
|
|
|
|
|
* Description: Defines the native types used to manipulate shell shortcuts.
|
|
|
|
|
*
|
|
|
|
|
* Public types: enum SLR_FLAGS
|
|
|
|
|
* enum SLGP_FLAGS
|
|
|
|
|
* struct WIN32_FIND_DATA[A|W]
|
|
|
|
|
* interface IPersistFile
|
|
|
|
|
* interface IShellLink[A|W]
|
|
|
|
|
* class ShellLink
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* Copyright <EFBFBD>2001-2002, Mattias Sj<EFBFBD>gren
|
|
|
|
|
*
|
|
|
|
|
**************************************************************************/
|
|
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
|
|
|
|
|
|
|
|
|
|
namespace MediaBrowser.Installer.Code
|
|
|
|
|
{
|
|
|
|
|
// IShellLink.Resolve fFlags
|
|
|
|
|
[Flags()]
|
|
|
|
|
public enum SLR_FLAGS
|
|
|
|
|
{
|
|
|
|
|
SLR_NO_UI = 0x1,
|
|
|
|
|
SLR_ANY_MATCH = 0x2,
|
|
|
|
|
SLR_UPDATE = 0x4,
|
|
|
|
|
SLR_NOUPDATE = 0x8,
|
|
|
|
|
SLR_NOSEARCH = 0x10,
|
|
|
|
|
SLR_NOTRACK = 0x20,
|
|
|
|
|
SLR_NOLINKINFO = 0x40,
|
|
|
|
|
SLR_INVOKE_MSI = 0x80
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IShellLink.GetPath fFlags
|
|
|
|
|
[Flags()]
|
|
|
|
|
public enum SLGP_FLAGS
|
|
|
|
|
{
|
|
|
|
|
SLGP_SHORTPATH = 0x1,
|
|
|
|
|
SLGP_UNCPRIORITY = 0x2,
|
|
|
|
|
SLGP_RAWPATH = 0x4
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
|
|
|
|
|
public struct WIN32_FIND_DATAA
|
|
|
|
|
{
|
|
|
|
|
public int dwFileAttributes;
|
|
|
|
|
public FILETIME ftCreationTime;
|
|
|
|
|
public FILETIME ftLastAccessTime;
|
|
|
|
|
public FILETIME ftLastWriteTime;
|
|
|
|
|
public int nFileSizeHigh;
|
|
|
|
|
public int nFileSizeLow;
|
|
|
|
|
public int dwReserved0;
|
|
|
|
|
public int dwReserved1;
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
|
|
|
|
|
public string cFileName;
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
|
|
|
|
|
public string cAlternateFileName;
|
|
|
|
|
private const int MAX_PATH = 260;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
|
|
|
|
|
public struct WIN32_FIND_DATAW
|
|
|
|
|
{
|
|
|
|
|
public int dwFileAttributes;
|
|
|
|
|
public FILETIME ftCreationTime;
|
|
|
|
|
public FILETIME ftLastAccessTime;
|
|
|
|
|
public FILETIME ftLastWriteTime;
|
|
|
|
|
public int nFileSizeHigh;
|
|
|
|
|
public int nFileSizeLow;
|
|
|
|
|
public int dwReserved0;
|
|
|
|
|
public int dwReserved1;
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
|
|
|
|
|
public string cFileName;
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
|
|
|
|
|
public string cAlternateFileName;
|
|
|
|
|
private const int MAX_PATH = 260;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
ComImport(),
|
|
|
|
|
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
|
|
|
|
|
Guid("0000010B-0000-0000-C000-000000000046")
|
|
|
|
|
]
|
|
|
|
|
public interface IPersistFile
|
|
|
|
|
{
|
|
|
|
|
#region Methods inherited from IPersist
|
|
|
|
|
|
|
|
|
|
void GetClassID(
|
|
|
|
|
out Guid pClassID);
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
[PreserveSig()]
|
|
|
|
|
int IsDirty();
|
|
|
|
|
|
|
|
|
|
void Load(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
|
|
|
|
|
int dwMode);
|
|
|
|
|
|
|
|
|
|
void Save(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
|
|
|
|
|
[MarshalAs(UnmanagedType.Bool)] bool fRemember);
|
|
|
|
|
|
|
|
|
|
void SaveCompleted(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
|
|
|
|
|
|
|
|
|
|
void GetCurFile(
|
|
|
|
|
out IntPtr ppszFileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
ComImport(),
|
|
|
|
|
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
|
|
|
|
|
Guid("000214EE-0000-0000-C000-000000000046")
|
|
|
|
|
]
|
|
|
|
|
public interface IShellLinkA
|
|
|
|
|
{
|
|
|
|
|
void GetPath(
|
|
|
|
|
[Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile,
|
|
|
|
|
int cchMaxPath,
|
|
|
|
|
out WIN32_FIND_DATAA pfd,
|
|
|
|
|
SLGP_FLAGS fFlags);
|
|
|
|
|
|
|
|
|
|
void GetIDList(
|
|
|
|
|
out IntPtr ppidl);
|
|
|
|
|
|
|
|
|
|
void SetIDList(
|
|
|
|
|
IntPtr pidl);
|
|
|
|
|
|
|
|
|
|
void GetDescription(
|
|
|
|
|
[Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName,
|
|
|
|
|
int cchMaxName);
|
|
|
|
|
|
|
|
|
|
void SetDescription(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] string pszName);
|
|
|
|
|
|
|
|
|
|
void GetWorkingDirectory(
|
|
|
|
|
[Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir,
|
|
|
|
|
int cchMaxPath);
|
|
|
|
|
|
|
|
|
|
void SetWorkingDirectory(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] string pszDir);
|
|
|
|
|
|
|
|
|
|
void GetArguments(
|
|
|
|
|
[Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs,
|
|
|
|
|
int cchMaxPath);
|
|
|
|
|
|
|
|
|
|
void SetArguments(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] 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.LPStr)] StringBuilder pszIconPath,
|
|
|
|
|
int cchIconPath,
|
|
|
|
|
out int piIcon);
|
|
|
|
|
|
|
|
|
|
void SetIconLocation(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] string pszIconPath,
|
|
|
|
|
int iIcon);
|
|
|
|
|
|
|
|
|
|
void SetRelativePath(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] string pszPathRel,
|
|
|
|
|
int dwReserved);
|
|
|
|
|
|
|
|
|
|
void Resolve(
|
|
|
|
|
IntPtr hwnd,
|
|
|
|
|
SLR_FLAGS fFlags);
|
|
|
|
|
|
|
|
|
|
void SetPath(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPStr)] string pszFile);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
ComImport(),
|
|
|
|
|
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
|
|
|
|
|
Guid("000214F9-0000-0000-C000-000000000046")
|
|
|
|
|
]
|
|
|
|
|
public interface IShellLinkW
|
|
|
|
|
{
|
|
|
|
|
void GetPath(
|
|
|
|
|
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
|
|
|
|
|
int cchMaxPath,
|
|
|
|
|
out WIN32_FIND_DATAW pfd,
|
|
|
|
|
SLGP_FLAGS 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,
|
|
|
|
|
SLR_FLAGS fFlags);
|
|
|
|
|
|
|
|
|
|
void SetPath(
|
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string pszFile);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
ComImport(),
|
|
|
|
|
Guid("00021401-0000-0000-C000-000000000046")
|
|
|
|
|
]
|
|
|
|
|
public class ShellLink // : IPersistFile, IShellLinkA, IShellLinkW
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|