ShellLinkNative.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /**************************************************************************
  2. *
  3. * Filename: ShellLinkNative.cs
  4. * Author: Mattias Sjögren (mattias@mvps.org)
  5. * http://www.msjogren.net/dotnet/
  6. *
  7. * Description: Defines the native types used to manipulate shell shortcuts.
  8. *
  9. * Public types: enum SLR_FLAGS
  10. * enum SLGP_FLAGS
  11. * struct WIN32_FIND_DATA[A|W]
  12. * interface IPersistFile
  13. * interface IShellLink[A|W]
  14. * class ShellLink
  15. *
  16. *
  17. * Copyright ©2001-2002, Mattias Sjögren
  18. *
  19. **************************************************************************/
  20. using System;
  21. using System.Text;
  22. using System.Runtime.InteropServices;
  23. namespace MediaBrowser.Installer.Code
  24. {
  25. // IShellLink.Resolve fFlags
  26. [Flags()]
  27. public enum SLR_FLAGS
  28. {
  29. SLR_NO_UI = 0x1,
  30. SLR_ANY_MATCH = 0x2,
  31. SLR_UPDATE = 0x4,
  32. SLR_NOUPDATE = 0x8,
  33. SLR_NOSEARCH = 0x10,
  34. SLR_NOTRACK = 0x20,
  35. SLR_NOLINKINFO = 0x40,
  36. SLR_INVOKE_MSI = 0x80
  37. }
  38. // IShellLink.GetPath fFlags
  39. [Flags()]
  40. public enum SLGP_FLAGS
  41. {
  42. SLGP_SHORTPATH = 0x1,
  43. SLGP_UNCPRIORITY = 0x2,
  44. SLGP_RAWPATH = 0x4
  45. }
  46. [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  47. public struct WIN32_FIND_DATAA
  48. {
  49. public int dwFileAttributes;
  50. public FILETIME ftCreationTime;
  51. public FILETIME ftLastAccessTime;
  52. public FILETIME ftLastWriteTime;
  53. public int nFileSizeHigh;
  54. public int nFileSizeLow;
  55. public int dwReserved0;
  56. public int dwReserved1;
  57. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
  58. public string cFileName;
  59. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
  60. public string cAlternateFileName;
  61. private const int MAX_PATH = 260;
  62. }
  63. [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  64. public struct WIN32_FIND_DATAW
  65. {
  66. public int dwFileAttributes;
  67. public FILETIME ftCreationTime;
  68. public FILETIME ftLastAccessTime;
  69. public FILETIME ftLastWriteTime;
  70. public int nFileSizeHigh;
  71. public int nFileSizeLow;
  72. public int dwReserved0;
  73. public int dwReserved1;
  74. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
  75. public string cFileName;
  76. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
  77. public string cAlternateFileName;
  78. private const int MAX_PATH = 260;
  79. }
  80. [
  81. ComImport(),
  82. InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
  83. Guid("0000010B-0000-0000-C000-000000000046")
  84. ]
  85. public interface IPersistFile
  86. {
  87. #region Methods inherited from IPersist
  88. void GetClassID(
  89. out Guid pClassID);
  90. #endregion
  91. [PreserveSig()]
  92. int IsDirty();
  93. void Load(
  94. [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
  95. int dwMode);
  96. void Save(
  97. [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
  98. [MarshalAs(UnmanagedType.Bool)] bool fRemember);
  99. void SaveCompleted(
  100. [MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
  101. void GetCurFile(
  102. out IntPtr ppszFileName);
  103. }
  104. [
  105. ComImport(),
  106. InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
  107. Guid("000214EE-0000-0000-C000-000000000046")
  108. ]
  109. public interface IShellLinkA
  110. {
  111. void GetPath(
  112. [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile,
  113. int cchMaxPath,
  114. out WIN32_FIND_DATAA pfd,
  115. SLGP_FLAGS fFlags);
  116. void GetIDList(
  117. out IntPtr ppidl);
  118. void SetIDList(
  119. IntPtr pidl);
  120. void GetDescription(
  121. [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName,
  122. int cchMaxName);
  123. void SetDescription(
  124. [MarshalAs(UnmanagedType.LPStr)] string pszName);
  125. void GetWorkingDirectory(
  126. [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir,
  127. int cchMaxPath);
  128. void SetWorkingDirectory(
  129. [MarshalAs(UnmanagedType.LPStr)] string pszDir);
  130. void GetArguments(
  131. [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs,
  132. int cchMaxPath);
  133. void SetArguments(
  134. [MarshalAs(UnmanagedType.LPStr)] string pszArgs);
  135. void GetHotkey(
  136. out short pwHotkey);
  137. void SetHotkey(
  138. short wHotkey);
  139. void GetShowCmd(
  140. out int piShowCmd);
  141. void SetShowCmd(
  142. int iShowCmd);
  143. void GetIconLocation(
  144. [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath,
  145. int cchIconPath,
  146. out int piIcon);
  147. void SetIconLocation(
  148. [MarshalAs(UnmanagedType.LPStr)] string pszIconPath,
  149. int iIcon);
  150. void SetRelativePath(
  151. [MarshalAs(UnmanagedType.LPStr)] string pszPathRel,
  152. int dwReserved);
  153. void Resolve(
  154. IntPtr hwnd,
  155. SLR_FLAGS fFlags);
  156. void SetPath(
  157. [MarshalAs(UnmanagedType.LPStr)] string pszFile);
  158. }
  159. [
  160. ComImport(),
  161. InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
  162. Guid("000214F9-0000-0000-C000-000000000046")
  163. ]
  164. public interface IShellLinkW
  165. {
  166. void GetPath(
  167. [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
  168. int cchMaxPath,
  169. out WIN32_FIND_DATAW pfd,
  170. SLGP_FLAGS fFlags);
  171. void GetIDList(
  172. out IntPtr ppidl);
  173. void SetIDList(
  174. IntPtr pidl);
  175. void GetDescription(
  176. [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName,
  177. int cchMaxName);
  178. void SetDescription(
  179. [MarshalAs(UnmanagedType.LPWStr)] string pszName);
  180. void GetWorkingDirectory(
  181. [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir,
  182. int cchMaxPath);
  183. void SetWorkingDirectory(
  184. [MarshalAs(UnmanagedType.LPWStr)] string pszDir);
  185. void GetArguments(
  186. [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs,
  187. int cchMaxPath);
  188. void SetArguments(
  189. [MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
  190. void GetHotkey(
  191. out short pwHotkey);
  192. void SetHotkey(
  193. short wHotkey);
  194. void GetShowCmd(
  195. out int piShowCmd);
  196. void SetShowCmd(
  197. int iShowCmd);
  198. void GetIconLocation(
  199. [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
  200. int cchIconPath,
  201. out int piIcon);
  202. void SetIconLocation(
  203. [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath,
  204. int iIcon);
  205. void SetRelativePath(
  206. [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel,
  207. int dwReserved);
  208. void Resolve(
  209. IntPtr hwnd,
  210. SLR_FLAGS fFlags);
  211. void SetPath(
  212. [MarshalAs(UnmanagedType.LPWStr)] string pszFile);
  213. }
  214. [
  215. ComImport(),
  216. Guid("00021401-0000-0000-C000-000000000046")
  217. ]
  218. public class ShellLink // : IPersistFile, IShellLinkA, IShellLinkW
  219. {
  220. }
  221. }