ShellLinkNative.cs 6.5 KB

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