UnmanagedMethods.cs 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Diagnostics.CodeAnalysis;
  5. using System.Runtime.CompilerServices;
  6. using System.Runtime.InteropServices;
  7. using System.Text;
  8. // ReSharper disable InconsistentNaming
  9. #pragma warning disable 169, 649
  10. namespace Perspex.Win32.Interop
  11. {
  12. [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Using Win32 naming for consistency.")]
  13. [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Using Win32 naming for consistency.")]
  14. [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore", Justification = "Using Win32 naming for consistency.")]
  15. [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements must be documented", Justification = "Look in Win32 docs.")]
  16. [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:Enumeration items must be documented", Justification = "Look in Win32 docs.")]
  17. internal static class UnmanagedMethods
  18. {
  19. public const int CW_USEDEFAULT = unchecked((int)0x80000000);
  20. public delegate void TimerProc(IntPtr hWnd, uint uMsg, IntPtr nIDEvent, uint dwTime);
  21. public delegate IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
  22. public enum Cursor
  23. {
  24. IDC_ARROW = 32512,
  25. IDC_IBEAM = 32513,
  26. IDC_WAIT = 32514,
  27. IDC_CROSS = 32515,
  28. IDC_UPARROW = 32516,
  29. IDC_SIZE = 32640,
  30. IDC_ICON = 32641,
  31. IDC_SIZENWSE = 32642,
  32. IDC_SIZENESW = 32643,
  33. IDC_SIZEWE = 32644,
  34. IDC_SIZENS = 32645,
  35. IDC_SIZEALL = 32646,
  36. IDC_NO = 32648,
  37. IDC_HAND = 32649,
  38. IDC_APPSTARTING = 32650,
  39. IDC_HELP = 32651
  40. }
  41. public enum MouseActivate : int
  42. {
  43. MA_ACTIVATE = 1,
  44. MA_ACTIVATEANDEAT = 2,
  45. MA_NOACTIVATE = 3,
  46. MA_NOACTIVATEANDEAT = 4
  47. }
  48. [Flags]
  49. public enum SetWindowPosFlags : uint
  50. {
  51. SWP_ASYNCWINDOWPOS = 0x4000,
  52. SWP_DEFERERASE = 0x2000,
  53. SWP_DRAWFRAME = 0x0020,
  54. SWP_FRAMECHANGED = 0x0020,
  55. SWP_HIDEWINDOW = 0x0080,
  56. SWP_NOACTIVATE = 0x0010,
  57. SWP_NOCOPYBITS = 0x0100,
  58. SWP_NOMOVE = 0x0002,
  59. SWP_NOOWNERZORDER = 0x0200,
  60. SWP_NOREDRAW = 0x0008,
  61. SWP_NOREPOSITION = 0x0200,
  62. SWP_NOSENDCHANGING = 0x0400,
  63. SWP_NOSIZE = 0x0001,
  64. SWP_NOZORDER = 0x0004,
  65. SWP_SHOWWINDOW = 0x0040,
  66. SWP_RESIZE = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER
  67. }
  68. public enum ShowWindowCommand
  69. {
  70. Hide = 0,
  71. Normal = 1,
  72. ShowMinimized = 2,
  73. Maximize = 3,
  74. ShowMaximized = 3,
  75. ShowNoActivate = 4,
  76. Show = 5,
  77. Minimize = 6,
  78. ShowMinNoActive = 7,
  79. ShowNA = 8,
  80. Restore = 9,
  81. ShowDefault = 10,
  82. ForceMinimize = 11
  83. }
  84. public enum SystemMetric
  85. {
  86. SM_CXSCREEN = 0, // 0x00
  87. SM_CYSCREEN = 1, // 0x01
  88. SM_CXVSCROLL = 2, // 0x02
  89. SM_CYHSCROLL = 3, // 0x03
  90. SM_CYCAPTION = 4, // 0x04
  91. SM_CXBORDER = 5, // 0x05
  92. SM_CYBORDER = 6, // 0x06
  93. SM_CXDLGFRAME = 7, // 0x07
  94. SM_CXFIXEDFRAME = 7, // 0x07
  95. SM_CYDLGFRAME = 8, // 0x08
  96. SM_CYFIXEDFRAME = 8, // 0x08
  97. SM_CYVTHUMB = 9, // 0x09
  98. SM_CXHTHUMB = 10, // 0x0A
  99. SM_CXICON = 11, // 0x0B
  100. SM_CYICON = 12, // 0x0C
  101. SM_CXCURSOR = 13, // 0x0D
  102. SM_CYCURSOR = 14, // 0x0E
  103. SM_CYMENU = 15, // 0x0F
  104. SM_CXFULLSCREEN = 16, // 0x10
  105. SM_CYFULLSCREEN = 17, // 0x11
  106. SM_CYKANJIWINDOW = 18, // 0x12
  107. SM_MOUSEPRESENT = 19, // 0x13
  108. SM_CYVSCROLL = 20, // 0x14
  109. SM_CXHSCROLL = 21, // 0x15
  110. SM_DEBUG = 22, // 0x16
  111. SM_SWAPBUTTON = 23, // 0x17
  112. SM_CXMIN = 28, // 0x1C
  113. SM_CYMIN = 29, // 0x1D
  114. SM_CXSIZE = 30, // 0x1E
  115. SM_CYSIZE = 31, // 0x1F
  116. SM_CXSIZEFRAME = 32, // 0x20
  117. SM_CXFRAME = 32, // 0x20
  118. SM_CYSIZEFRAME = 33, // 0x21
  119. SM_CYFRAME = 33, // 0x21
  120. SM_CXMINTRACK = 34, // 0x22
  121. SM_CYMINTRACK = 35, // 0x23
  122. SM_CXDOUBLECLK = 36, // 0x24
  123. SM_CYDOUBLECLK = 37, // 0x25
  124. SM_CXICONSPACING = 38, // 0x26
  125. SM_CYICONSPACING = 39, // 0x27
  126. SM_MENUDROPALIGNMENT = 40, // 0x28
  127. SM_PENWINDOWS = 41, // 0x29
  128. SM_DBCSENABLED = 42, // 0x2A
  129. SM_CMOUSEBUTTONS = 43, // 0x2B
  130. SM_SECURE = 44, // 0x2C
  131. SM_CXEDGE = 45, // 0x2D
  132. SM_CYEDGE = 46, // 0x2E
  133. SM_CXMINSPACING = 47, // 0x2F
  134. SM_CYMINSPACING = 48, // 0x30
  135. SM_CXSMICON = 49, // 0x31
  136. SM_CYSMICON = 50, // 0x32
  137. SM_CYSMCAPTION = 51, // 0x33
  138. SM_CXSMSIZE = 52, // 0x34
  139. SM_CYSMSIZE = 53, // 0x35
  140. SM_CXMENUSIZE = 54, // 0x36
  141. SM_CYMENUSIZE = 55, // 0x37
  142. SM_ARRANGE = 56, // 0x38
  143. SM_CXMINIMIZED = 57, // 0x39
  144. SM_CYMINIMIZED = 58, // 0x3A
  145. SM_CXMAXTRACK = 59, // 0x3B
  146. SM_CYMAXTRACK = 60, // 0x3C
  147. SM_CXMAXIMIZED = 61, // 0x3D
  148. SM_CYMAXIMIZED = 62, // 0x3E
  149. SM_NETWORK = 63, // 0x3F
  150. SM_CLEANBOOT = 67, // 0x43
  151. SM_CXDRAG = 68, // 0x44
  152. SM_CYDRAG = 69, // 0x45
  153. SM_SHOWSOUNDS = 70, // 0x46
  154. SM_CXMENUCHECK = 71, // 0x47
  155. SM_CYMENUCHECK = 72, // 0x48
  156. SM_SLOWMACHINE = 73, // 0x49
  157. SM_MIDEASTENABLED = 74, // 0x4A
  158. SM_MOUSEWHEELPRESENT = 75, // 0x4B
  159. SM_XVIRTUALSCREEN = 76, // 0x4C
  160. SM_YVIRTUALSCREEN = 77, // 0x4D
  161. SM_CXVIRTUALSCREEN = 78, // 0x4E
  162. SM_CYVIRTUALSCREEN = 79, // 0x4F
  163. SM_CMONITORS = 80, // 0x50
  164. SM_SAMEDISPLAYFORMAT = 81, // 0x51
  165. SM_IMMENABLED = 82, // 0x52
  166. SM_CXFOCUSBORDER = 83, // 0x53
  167. SM_CYFOCUSBORDER = 84, // 0x54
  168. SM_TABLETPC = 86, // 0x56
  169. SM_MEDIACENTER = 87, // 0x57
  170. SM_STARTER = 88, // 0x58
  171. SM_SERVERR2 = 89, // 0x59
  172. SM_MOUSEHORIZONTALWHEELPRESENT = 91, // 0x5B
  173. SM_CXPADDEDBORDER = 92, // 0x5C
  174. SM_DIGITIZER = 94, // 0x5E
  175. SM_MAXIMUMTOUCHES = 95, // 0x5F
  176. SM_REMOTESESSION = 0x1000, // 0x1000
  177. SM_SHUTTINGDOWN = 0x2000, // 0x2000
  178. SM_REMOTECONTROL = 0x2001, // 0x2001
  179. SM_CONVERTABLESLATEMODE = 0x2003,
  180. SM_SYSTEMDOCKED = 0x2004,
  181. }
  182. [Flags]
  183. public enum ModifierKeys
  184. {
  185. MK_CONTROL = 0x0008,
  186. MK_LBUTTON = 0x0001,
  187. MK_MBUTTON = 0x0010,
  188. MK_RBUTTON = 0x0002,
  189. MK_SHIFT = 0x0004,
  190. MK_XBUTTON1 = 0x0020,
  191. MK_XBUTTON2 = 0x0040
  192. }
  193. public enum WindowActivate
  194. {
  195. WA_INACTIVE,
  196. WA_ACTIVE,
  197. WA_CLICKACTIVE,
  198. }
  199. public enum HitTestValues
  200. {
  201. HTERROR = -2,
  202. HTTRANSPARENT = -1,
  203. HTNOWHERE = 0,
  204. HTCLIENT = 1,
  205. HTCAPTION = 2,
  206. HTSYSMENU = 3,
  207. HTGROWBOX = 4,
  208. HTMENU = 5,
  209. HTHSCROLL = 6,
  210. HTVSCROLL = 7,
  211. HTMINBUTTON = 8,
  212. HTMAXBUTTON = 9,
  213. HTLEFT = 10,
  214. HTRIGHT = 11,
  215. HTTOP = 12,
  216. HTTOPLEFT = 13,
  217. HTTOPRIGHT = 14,
  218. HTBOTTOM = 15,
  219. HTBOTTOMLEFT = 16,
  220. HTBOTTOMRIGHT = 17,
  221. HTBORDER = 18,
  222. HTOBJECT = 19,
  223. HTCLOSE = 20,
  224. HTHELP = 21
  225. }
  226. [Flags]
  227. public enum WindowStyles : uint
  228. {
  229. WS_BORDER = 0x800000,
  230. WS_CAPTION = 0xc00000,
  231. WS_CHILD = 0x40000000,
  232. WS_CLIPCHILDREN = 0x2000000,
  233. WS_CLIPSIBLINGS = 0x4000000,
  234. WS_DISABLED = 0x8000000,
  235. WS_DLGFRAME = 0x400000,
  236. WS_GROUP = 0x20000,
  237. WS_HSCROLL = 0x100000,
  238. WS_MAXIMIZE = 0x1000000,
  239. WS_MAXIMIZEBOX = 0x10000,
  240. WS_MINIMIZE = 0x20000000,
  241. WS_MINIMIZEBOX = 0x20000,
  242. WS_OVERLAPPED = 0x0,
  243. WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_SIZEFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
  244. WS_POPUP = 0x80000000u,
  245. WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
  246. WS_SIZEFRAME = 0x40000,
  247. WS_SYSMENU = 0x80000,
  248. WS_TABSTOP = 0x10000,
  249. WS_VISIBLE = 0x10000000,
  250. WS_VSCROLL = 0x200000,
  251. WS_EX_DLGMODALFRAME = 0x00000001,
  252. WS_EX_NOPARENTNOTIFY = 0x00000004,
  253. WS_EX_TOPMOST = 0x00000008,
  254. WS_EX_ACCEPTFILES = 0x00000010,
  255. WS_EX_TRANSPARENT = 0x00000020,
  256. WS_EX_MDICHILD = 0x00000040,
  257. WS_EX_TOOLWINDOW = 0x00000080,
  258. WS_EX_WINDOWEDGE = 0x00000100,
  259. WS_EX_CLIENTEDGE = 0x00000200,
  260. WS_EX_CONTEXTHELP = 0x00000400,
  261. WS_EX_RIGHT = 0x00001000,
  262. WS_EX_LEFT = 0x00000000,
  263. WS_EX_RTLREADING = 0x00002000,
  264. WS_EX_LTRREADING = 0x00000000,
  265. WS_EX_LEFTSCROLLBAR = 0x00004000,
  266. WS_EX_RIGHTSCROLLBAR = 0x00000000,
  267. WS_EX_CONTROLPARENT = 0x00010000,
  268. WS_EX_STATICEDGE = 0x00020000,
  269. WS_EX_APPWINDOW = 0x00040000,
  270. WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
  271. WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
  272. WS_EX_LAYERED = 0x00080000,
  273. WS_EX_NOINHERITLAYOUT = 0x00100000,
  274. WS_EX_LAYOUTRTL = 0x00400000,
  275. WS_EX_COMPOSITED = 0x02000000,
  276. WS_EX_NOACTIVATE = 0x08000000
  277. }
  278. public enum WindowsMessage : uint
  279. {
  280. WM_NULL = 0x0000,
  281. WM_CREATE = 0x0001,
  282. WM_DESTROY = 0x0002,
  283. WM_MOVE = 0x0003,
  284. WM_SIZE = 0x0005,
  285. WM_ACTIVATE = 0x0006,
  286. WM_SETFOCUS = 0x0007,
  287. WM_KILLFOCUS = 0x0008,
  288. WM_ENABLE = 0x000A,
  289. WM_SETREDRAW = 0x000B,
  290. WM_SETTEXT = 0x000C,
  291. WM_GETTEXT = 0x000D,
  292. WM_GETTEXTLENGTH = 0x000E,
  293. WM_PAINT = 0x000F,
  294. WM_CLOSE = 0x0010,
  295. WM_QUERYENDSESSION = 0x0011,
  296. WM_QUERYOPEN = 0x0013,
  297. WM_ENDSESSION = 0x0016,
  298. WM_QUIT = 0x0012,
  299. WM_ERASEBKGND = 0x0014,
  300. WM_SYSCOLORCHANGE = 0x0015,
  301. WM_SHOWWINDOW = 0x0018,
  302. WM_WININICHANGE = 0x001A,
  303. WM_SETTINGCHANGE = WM_WININICHANGE,
  304. WM_DEVMODECHANGE = 0x001B,
  305. WM_ACTIVATEAPP = 0x001C,
  306. WM_FONTCHANGE = 0x001D,
  307. WM_TIMECHANGE = 0x001E,
  308. WM_CANCELMODE = 0x001F,
  309. WM_SETCURSOR = 0x0020,
  310. WM_MOUSEACTIVATE = 0x0021,
  311. WM_CHILDACTIVATE = 0x0022,
  312. WM_QUEUESYNC = 0x0023,
  313. WM_GETMINMAXINFO = 0x0024,
  314. WM_PAINTICON = 0x0026,
  315. WM_ICONERASEBKGND = 0x0027,
  316. WM_NEXTDLGCTL = 0x0028,
  317. WM_SPOOLERSTATUS = 0x002A,
  318. WM_DRAWITEM = 0x002B,
  319. WM_MEASUREITEM = 0x002C,
  320. WM_DELETEITEM = 0x002D,
  321. WM_VKEYTOITEM = 0x002E,
  322. WM_CHARTOITEM = 0x002F,
  323. WM_SETFONT = 0x0030,
  324. WM_GETFONT = 0x0031,
  325. WM_SETHOTKEY = 0x0032,
  326. WM_GETHOTKEY = 0x0033,
  327. WM_QUERYDRAGICON = 0x0037,
  328. WM_COMPAREITEM = 0x0039,
  329. WM_GETOBJECT = 0x003D,
  330. WM_COMPACTING = 0x0041,
  331. WM_WINDOWPOSCHANGING = 0x0046,
  332. WM_WINDOWPOSCHANGED = 0x0047,
  333. WM_COPYDATA = 0x004A,
  334. WM_CANCELJOURNAL = 0x004B,
  335. WM_NOTIFY = 0x004E,
  336. WM_INPUTLANGCHANGEREQUEST = 0x0050,
  337. WM_INPUTLANGCHANGE = 0x0051,
  338. WM_TCARD = 0x0052,
  339. WM_HELP = 0x0053,
  340. WM_USERCHANGED = 0x0054,
  341. WM_NOTIFYFORMAT = 0x0055,
  342. WM_CONTEXTMENU = 0x007B,
  343. WM_STYLECHANGING = 0x007C,
  344. WM_STYLECHANGED = 0x007D,
  345. WM_DISPLAYCHANGE = 0x007E,
  346. WM_GETICON = 0x007F,
  347. WM_SETICON = 0x0080,
  348. WM_NCCREATE = 0x0081,
  349. WM_NCDESTROY = 0x0082,
  350. WM_NCCALCSIZE = 0x0083,
  351. WM_NCHITTEST = 0x0084,
  352. WM_NCPAINT = 0x0085,
  353. WM_NCACTIVATE = 0x0086,
  354. WM_GETDLGCODE = 0x0087,
  355. WM_SYNCPAINT = 0x0088,
  356. WM_NCMOUSEMOVE = 0x00A0,
  357. WM_NCLBUTTONDOWN = 0x00A1,
  358. WM_NCLBUTTONUP = 0x00A2,
  359. WM_NCLBUTTONDBLCLK = 0x00A3,
  360. WM_NCRBUTTONDOWN = 0x00A4,
  361. WM_NCRBUTTONUP = 0x00A5,
  362. WM_NCRBUTTONDBLCLK = 0x00A6,
  363. WM_NCMBUTTONDOWN = 0x00A7,
  364. WM_NCMBUTTONUP = 0x00A8,
  365. WM_NCMBUTTONDBLCLK = 0x00A9,
  366. WM_NCXBUTTONDOWN = 0x00AB,
  367. WM_NCXBUTTONUP = 0x00AC,
  368. WM_NCXBUTTONDBLCLK = 0x00AD,
  369. WM_INPUT_DEVICE_CHANGE = 0x00FE,
  370. WM_INPUT = 0x00FF,
  371. WM_KEYFIRST = 0x0100,
  372. WM_KEYDOWN = 0x0100,
  373. WM_KEYUP = 0x0101,
  374. WM_CHAR = 0x0102,
  375. WM_DEADCHAR = 0x0103,
  376. WM_SYSKEYDOWN = 0x0104,
  377. WM_SYSKEYUP = 0x0105,
  378. WM_SYSCHAR = 0x0106,
  379. WM_SYSDEADCHAR = 0x0107,
  380. WM_UNICHAR = 0x0109,
  381. WM_KEYLAST = 0x0109,
  382. WM_IME_STARTCOMPOSITION = 0x010D,
  383. WM_IME_ENDCOMPOSITION = 0x010E,
  384. WM_IME_COMPOSITION = 0x010F,
  385. WM_IME_KEYLAST = 0x010F,
  386. WM_INITDIALOG = 0x0110,
  387. WM_COMMAND = 0x0111,
  388. WM_SYSCOMMAND = 0x0112,
  389. WM_TIMER = 0x0113,
  390. WM_HSCROLL = 0x0114,
  391. WM_VSCROLL = 0x0115,
  392. WM_INITMENU = 0x0116,
  393. WM_INITMENUPOPUP = 0x0117,
  394. WM_MENUSELECT = 0x011F,
  395. WM_MENUCHAR = 0x0120,
  396. WM_ENTERIDLE = 0x0121,
  397. WM_MENURBUTTONUP = 0x0122,
  398. WM_MENUDRAG = 0x0123,
  399. WM_MENUGETOBJECT = 0x0124,
  400. WM_UNINITMENUPOPUP = 0x0125,
  401. WM_MENUCOMMAND = 0x0126,
  402. WM_CHANGEUISTATE = 0x0127,
  403. WM_UPDATEUISTATE = 0x0128,
  404. WM_QUERYUISTATE = 0x0129,
  405. WM_CTLCOLORMSGBOX = 0x0132,
  406. WM_CTLCOLOREDIT = 0x0133,
  407. WM_CTLCOLORLISTBOX = 0x0134,
  408. WM_CTLCOLORBTN = 0x0135,
  409. WM_CTLCOLORDLG = 0x0136,
  410. WM_CTLCOLORSCROLLBAR = 0x0137,
  411. WM_CTLCOLORSTATIC = 0x0138,
  412. WM_MOUSEFIRST = 0x0200,
  413. WM_MOUSEMOVE = 0x0200,
  414. WM_LBUTTONDOWN = 0x0201,
  415. WM_LBUTTONUP = 0x0202,
  416. WM_LBUTTONDBLCLK = 0x0203,
  417. WM_RBUTTONDOWN = 0x0204,
  418. WM_RBUTTONUP = 0x0205,
  419. WM_RBUTTONDBLCLK = 0x0206,
  420. WM_MBUTTONDOWN = 0x0207,
  421. WM_MBUTTONUP = 0x0208,
  422. WM_MBUTTONDBLCLK = 0x0209,
  423. WM_MOUSEWHEEL = 0x020A,
  424. WM_XBUTTONDOWN = 0x020B,
  425. WM_XBUTTONUP = 0x020C,
  426. WM_XBUTTONDBLCLK = 0x020D,
  427. WM_MOUSEHWHEEL = 0x020E,
  428. WM_MOUSELAST = 0x020E,
  429. WM_PARENTNOTIFY = 0x0210,
  430. WM_ENTERMENULOOP = 0x0211,
  431. WM_EXITMENULOOP = 0x0212,
  432. WM_NEXTMENU = 0x0213,
  433. WM_SIZING = 0x0214,
  434. WM_CAPTURECHANGED = 0x0215,
  435. WM_MOVING = 0x0216,
  436. WM_POWERBROADCAST = 0x0218,
  437. WM_DEVICECHANGE = 0x0219,
  438. WM_MDICREATE = 0x0220,
  439. WM_MDIDESTROY = 0x0221,
  440. WM_MDIACTIVATE = 0x0222,
  441. WM_MDIRESTORE = 0x0223,
  442. WM_MDINEXT = 0x0224,
  443. WM_MDIMAXIMIZE = 0x0225,
  444. WM_MDITILE = 0x0226,
  445. WM_MDICASCADE = 0x0227,
  446. WM_MDIICONARRANGE = 0x0228,
  447. WM_MDIGETACTIVE = 0x0229,
  448. WM_MDISETMENU = 0x0230,
  449. WM_ENTERSIZEMOVE = 0x0231,
  450. WM_EXITSIZEMOVE = 0x0232,
  451. WM_DROPFILES = 0x0233,
  452. WM_MDIREFRESHMENU = 0x0234,
  453. WM_IME_SETCONTEXT = 0x0281,
  454. WM_IME_NOTIFY = 0x0282,
  455. WM_IME_CONTROL = 0x0283,
  456. WM_IME_COMPOSITIONFULL = 0x0284,
  457. WM_IME_SELECT = 0x0285,
  458. WM_IME_CHAR = 0x0286,
  459. WM_IME_REQUEST = 0x0288,
  460. WM_IME_KEYDOWN = 0x0290,
  461. WM_IME_KEYUP = 0x0291,
  462. WM_MOUSEHOVER = 0x02A1,
  463. WM_MOUSELEAVE = 0x02A3,
  464. WM_NCMOUSEHOVER = 0x02A0,
  465. WM_NCMOUSELEAVE = 0x02A2,
  466. WM_WTSSESSION_CHANGE = 0x02B1,
  467. WM_TABLET_FIRST = 0x02c0,
  468. WM_TABLET_LAST = 0x02df,
  469. WM_DPICHANGED = 0x02E0,
  470. WM_CUT = 0x0300,
  471. WM_COPY = 0x0301,
  472. WM_PASTE = 0x0302,
  473. WM_CLEAR = 0x0303,
  474. WM_UNDO = 0x0304,
  475. WM_RENDERFORMAT = 0x0305,
  476. WM_RENDERALLFORMATS = 0x0306,
  477. WM_DESTROYCLIPBOARD = 0x0307,
  478. WM_DRAWCLIPBOARD = 0x0308,
  479. WM_PAINTCLIPBOARD = 0x0309,
  480. WM_VSCROLLCLIPBOARD = 0x030A,
  481. WM_SIZECLIPBOARD = 0x030B,
  482. WM_ASKCBFORMATNAME = 0x030C,
  483. WM_CHANGECBCHAIN = 0x030D,
  484. WM_HSCROLLCLIPBOARD = 0x030E,
  485. WM_QUERYNEWPALETTE = 0x030F,
  486. WM_PALETTEISCHANGING = 0x0310,
  487. WM_PALETTECHANGED = 0x0311,
  488. WM_HOTKEY = 0x0312,
  489. WM_PRINT = 0x0317,
  490. WM_PRINTCLIENT = 0x0318,
  491. WM_APPCOMMAND = 0x0319,
  492. WM_THEMECHANGED = 0x031A,
  493. WM_CLIPBOARDUPDATE = 0x031D,
  494. WM_DWMCOMPOSITIONCHANGED = 0x031E,
  495. WM_DWMNCRENDERINGCHANGED = 0x031F,
  496. WM_DWMCOLORIZATIONCOLORCHANGED = 0x0320,
  497. WM_DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
  498. WM_GETTITLEBARINFOEX = 0x033F,
  499. WM_HANDHELDFIRST = 0x0358,
  500. WM_HANDHELDLAST = 0x035F,
  501. WM_AFXFIRST = 0x0360,
  502. WM_AFXLAST = 0x037F,
  503. WM_PENWINFIRST = 0x0380,
  504. WM_PENWINLAST = 0x038F,
  505. WM_APP = 0x8000,
  506. WM_USER = 0x0400,
  507. WM_DISPATCH_WORK_ITEM = WM_USER,
  508. }
  509. [DllImport("user32.dll", SetLastError = true)]
  510. public static extern bool AdjustWindowRectEx(ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle);
  511. [DllImport("user32.dll")]
  512. public static extern IntPtr BeginPaint(IntPtr hwnd, out PAINTSTRUCT lpPaint);
  513. [DllImport("user32.dll")]
  514. public static extern bool ClientToScreen(IntPtr hWnd, ref POINT lpPoint);
  515. [DllImport("user32.dll", SetLastError = true)]
  516. public static extern IntPtr CreateWindowEx(
  517. int dwExStyle,
  518. uint lpClassName,
  519. string lpWindowName,
  520. uint dwStyle,
  521. int x,
  522. int y,
  523. int nWidth,
  524. int nHeight,
  525. IntPtr hWndParent,
  526. IntPtr hMenu,
  527. IntPtr hInstance,
  528. IntPtr lpParam);
  529. [DllImport("user32.dll", EntryPoint = "DefWindowProcW")]
  530. public static extern IntPtr DefWindowProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
  531. [DllImport("user32.dll", EntryPoint = "DispatchMessageW")]
  532. public static extern IntPtr DispatchMessage(ref MSG lpmsg);
  533. [DllImport("user32.dll", SetLastError = true)]
  534. public static extern bool DestroyWindow(IntPtr hwnd);
  535. [DllImport("user32.dll")]
  536. public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
  537. [DllImport("user32.dll")]
  538. public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
  539. [DllImport("user32.dll")]
  540. public static extern uint GetCaretBlinkTime();
  541. [DllImport("user32.dll")]
  542. public static extern bool GetClientRect(IntPtr hwnd, out RECT lpRect);
  543. [DllImport("user32.dll")]
  544. public static extern bool GetCursorPos(out POINT lpPoint);
  545. [DllImport("user32.dll")]
  546. public static extern uint GetDoubleClickTime();
  547. [DllImport("user32.dll")]
  548. public static extern bool GetKeyboardState(byte[] lpKeyState);
  549. [DllImport("user32.dll", EntryPoint = "GetMessageW")]
  550. public static extern sbyte GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
  551. [DllImport("user32.dll")]
  552. public static extern int GetMessageTime();
  553. [DllImport("kernel32.dll")]
  554. public static extern IntPtr GetModuleHandle(string lpModuleName);
  555. [DllImport("user32.dll")]
  556. public static extern int GetSystemMetrics(SystemMetric smIndex);
  557. [DllImport("user32.dll", SetLastError = true)]
  558. public static extern uint GetWindowLong(IntPtr hWnd, int nIndex);
  559. [DllImport("user32.dll", SetLastError = true)]
  560. public static extern uint SetWindowLong(IntPtr hWnd, int nIndex, uint value);
  561. [DllImport("user32.dll", SetLastError = true)]
  562. public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
  563. [DllImport("user32.dll")]
  564. public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
  565. [DllImport("user32.dll")]
  566. public static extern bool GetUpdateRect(IntPtr hwnd, out RECT lpRect, bool bErase);
  567. [DllImport("user32.dll")]
  568. public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, bool bErase);
  569. [DllImport("user32.dll")]
  570. public static extern bool IsWindowEnabled(IntPtr hWnd);
  571. [DllImport("user32.dll")]
  572. public static extern bool IsWindowUnicode(IntPtr hWnd);
  573. [DllImport("user32.dll")]
  574. public static extern bool KillTimer(IntPtr hWnd, IntPtr uIDEvent);
  575. [DllImport("user32.dll")]
  576. public static extern IntPtr LoadCursor(IntPtr hInstance, IntPtr lpCursorName);
  577. [DllImport("user32.dll")]
  578. public static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);
  579. [DllImport("user32.dll")]
  580. public static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
  581. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RegisterClassExW")]
  582. public static extern ushort RegisterClassEx(ref WNDCLASSEX lpwcx);
  583. [DllImport("user32.dll")]
  584. public static extern bool ReleaseCapture();
  585. [DllImport("user32.dll")]
  586. public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);
  587. [DllImport("user32.dll", SetLastError = true)]
  588. public static extern IntPtr SetActiveWindow(IntPtr hWnd);
  589. [DllImport("user32.dll")]
  590. public static extern IntPtr SetCapture(IntPtr hWnd);
  591. [DllImport("user32.dll")]
  592. public static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, TimerProc lpTimerFunc);
  593. [DllImport("user32.dll")]
  594. public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags);
  595. [DllImport("user32.dll")]
  596. public static extern bool SetParent(IntPtr hWnd, IntPtr hWndNewParent);
  597. [DllImport("user32.dll")]
  598. public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommand nCmdShow);
  599. [DllImport("user32.dll")]
  600. public static extern int ToUnicode(
  601. uint virtualKeyCode,
  602. uint scanCode,
  603. byte[] keyboardState,
  604. [Out, MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
  605. StringBuilder receivingBuffer,
  606. int bufferSize,
  607. uint flags);
  608. [DllImport("user32.dll", SetLastError = true)]
  609. public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT lpEventTrack);
  610. [DllImport("user32.dll")]
  611. public static extern bool TranslateMessage(ref MSG lpMsg);
  612. [DllImport("user32.dll")]
  613. public static extern bool UnregisterClass(string lpClassName, IntPtr hInstance);
  614. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  615. public static extern bool SetWindowText(IntPtr hwnd, string lpString);
  616. public enum ClassLongIndex : int
  617. {
  618. GCL_HCURSOR = -12,
  619. GCL_HICON = -14
  620. }
  621. [DllImport("user32.dll", EntryPoint = "SetClassLongPtr")]
  622. private static extern IntPtr SetClassLong64(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong);
  623. [DllImport("user32.dll", EntryPoint = "SetClassLong")]
  624. private static extern IntPtr SetClassLong32(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong);
  625. public static IntPtr SetClassLong(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong)
  626. {
  627. if (IntPtr.Size == 4)
  628. {
  629. return SetClassLong32(hWnd, nIndex, dwNewLong);
  630. }
  631. return SetClassLong64(hWnd, nIndex, dwNewLong);
  632. }
  633. [ComImport, ClassInterface(ClassInterfaceType.None), TypeLibType(TypeLibTypeFlags.FCanCreate), Guid("DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7")]
  634. internal class FileOpenDialogRCW { }
  635. [DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
  636. internal static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv);
  637. [DllImport("user32.dll", SetLastError = true)]
  638. public static extern bool OpenClipboard(IntPtr hWndOwner);
  639. [DllImport("user32.dll", SetLastError = true)]
  640. public static extern bool CloseClipboard();
  641. [DllImport("user32.dll")]
  642. public static extern bool EmptyClipboard();
  643. [DllImport("user32.dll")]
  644. public static extern IntPtr GetClipboardData(ClipboardFormat uFormat);
  645. [DllImport("user32.dll")]
  646. public static extern IntPtr SetClipboardData(ClipboardFormat uFormat, IntPtr hMem);
  647. [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  648. public static extern IntPtr GlobalLock(IntPtr handle);
  649. [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  650. public static extern bool GlobalUnlock(IntPtr handle);
  651. [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  652. public static extern IntPtr GlobalAlloc(int uFlags, int dwBytes);
  653. [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  654. public static extern IntPtr GlobalFree(IntPtr hMem);
  655. [DllImport("comdlg32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetSaveFileNameW")]
  656. public static extern bool GetSaveFileName(IntPtr lpofn);
  657. [DllImport("comdlg32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetOpenFileNameW")]
  658. public static extern bool GetOpenFileName(IntPtr lpofn);
  659. [DllImport("comdlg32.dll")]
  660. public static extern int CommDlgExtendedError();
  661. [DllImport("shcore.dll")]
  662. public static extern void SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value);
  663. [DllImport("shcore.dll")]
  664. public static extern long GetDpiForMonitor(IntPtr hmonitor, MONITOR_DPI_TYPE dpiType, out uint dpiX, out uint dpiY);
  665. [DllImport("shcore.dll")]
  666. public static extern void GetScaleFactorForMonitor(IntPtr hMon, out uint pScale);
  667. [DllImport("user32.dll")]
  668. public static extern IntPtr MonitorFromPoint(POINT pt, MONITOR dwFlags);
  669. [DllImport("user32.dll")]
  670. public static extern IntPtr MonitorFromWindow(IntPtr hwnd, MONITOR dwFlags);
  671. public enum MONITOR
  672. {
  673. MONITOR_DEFAULTTONULL = 0x00000000,
  674. MONITOR_DEFAULTTOPRIMARY = 0x00000001,
  675. MONITOR_DEFAULTTONEAREST = 0x00000002,
  676. }
  677. public enum PROCESS_DPI_AWARENESS
  678. {
  679. PROCESS_DPI_UNAWARE = 0,
  680. PROCESS_SYSTEM_DPI_AWARE = 1,
  681. PROCESS_PER_MONITOR_DPI_AWARE = 2
  682. }
  683. public enum MONITOR_DPI_TYPE
  684. {
  685. MDT_EFFECTIVE_DPI = 0,
  686. MDT_ANGULAR_DPI = 1,
  687. MDT_RAW_DPI = 2,
  688. MDT_DEFAULT = MDT_EFFECTIVE_DPI
  689. }
  690. public enum ClipboardFormat
  691. {
  692. CF_TEXT = 1,
  693. CF_UNICODETEXT = 13
  694. }
  695. public struct MSG
  696. {
  697. public IntPtr hwnd;
  698. public uint message;
  699. public IntPtr wParam;
  700. public IntPtr lParam;
  701. public uint time;
  702. public POINT pt;
  703. }
  704. [StructLayout(LayoutKind.Sequential)]
  705. public struct PAINTSTRUCT
  706. {
  707. public IntPtr hdc;
  708. public bool fErase;
  709. public RECT rcPaint;
  710. public bool fRestore;
  711. public bool fIncUpdate;
  712. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
  713. public byte[] rgbReserved;
  714. }
  715. public struct POINT
  716. {
  717. public int X;
  718. public int Y;
  719. }
  720. public struct RECT
  721. {
  722. public int left;
  723. public int top;
  724. public int right;
  725. public int bottom;
  726. }
  727. public struct TRACKMOUSEEVENT
  728. {
  729. public int cbSize;
  730. public uint dwFlags;
  731. public IntPtr hwndTrack;
  732. public int dwHoverTime;
  733. }
  734. [StructLayout(LayoutKind.Sequential)]
  735. public struct WINDOWPLACEMENT
  736. {
  737. /// <summary>
  738. /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT).
  739. /// <para>
  740. /// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly.
  741. /// </para>
  742. /// </summary>
  743. public int Length;
  744. /// <summary>
  745. /// Specifies flags that control the position of the minimized window and the method by which the window is restored.
  746. /// </summary>
  747. public int Flags;
  748. /// <summary>
  749. /// The current show state of the window.
  750. /// </summary>
  751. public ShowWindowCommand ShowCmd;
  752. /// <summary>
  753. /// The coordinates of the window's upper-left corner when the window is minimized.
  754. /// </summary>
  755. public POINT MinPosition;
  756. /// <summary>
  757. /// The coordinates of the window's upper-left corner when the window is maximized.
  758. /// </summary>
  759. public POINT MaxPosition;
  760. /// <summary>
  761. /// The window's coordinates when the window is in the restored position.
  762. /// </summary>
  763. public RECT NormalPosition;
  764. /// <summary>
  765. /// Gets the default (empty) value.
  766. /// </summary>
  767. public static WINDOWPLACEMENT Default
  768. {
  769. get
  770. {
  771. WINDOWPLACEMENT result = new WINDOWPLACEMENT();
  772. result.Length = Marshal.SizeOf(result);
  773. return result;
  774. }
  775. }
  776. }
  777. [StructLayout(LayoutKind.Sequential)]
  778. public struct WNDCLASSEX
  779. {
  780. public int cbSize;
  781. public int style;
  782. public WndProc lpfnWndProc;
  783. public int cbClsExtra;
  784. public int cbWndExtra;
  785. public IntPtr hInstance;
  786. public IntPtr hIcon;
  787. public IntPtr hCursor;
  788. public IntPtr hbrBackground;
  789. public string lpszMenuName;
  790. public string lpszClassName;
  791. public IntPtr hIconSm;
  792. }
  793. [Flags]
  794. public enum OpenFileNameFlags
  795. {
  796. OFN_ALLOWMULTISELECT = 0x00000200,
  797. OFN_EXPLORER = 0x00080000,
  798. OFN_HIDEREADONLY = 0x00000004,
  799. OFN_NOREADONLYRETURN = 0x00008000,
  800. OFN_OVERWRITEPROMPT = 0x00000002
  801. }
  802. public enum HRESULT : long
  803. {
  804. S_FALSE = 0x0001,
  805. S_OK = 0x0000,
  806. E_INVALIDARG = 0x80070057,
  807. E_OUTOFMEMORY = 0x8007000E
  808. }
  809. public const uint SIGDN_FILESYSPATH = 0x80058000;
  810. [Flags]
  811. internal enum FOS : uint
  812. {
  813. FOS_OVERWRITEPROMPT = 0x00000002,
  814. FOS_STRICTFILETYPES = 0x00000004,
  815. FOS_NOCHANGEDIR = 0x00000008,
  816. FOS_PICKFOLDERS = 0x00000020,
  817. FOS_FORCEFILESYSTEM = 0x00000040, // Ensure that items returned are filesystem items.
  818. FOS_ALLNONSTORAGEITEMS = 0x00000080, // Allow choosing items that have no storage.
  819. FOS_NOVALIDATE = 0x00000100,
  820. FOS_ALLOWMULTISELECT = 0x00000200,
  821. FOS_PATHMUSTEXIST = 0x00000800,
  822. FOS_FILEMUSTEXIST = 0x00001000,
  823. FOS_CREATEPROMPT = 0x00002000,
  824. FOS_SHAREAWARE = 0x00004000,
  825. FOS_NOREADONLYRETURN = 0x00008000,
  826. FOS_NOTESTFILECREATE = 0x00010000,
  827. FOS_HIDEMRUPLACES = 0x00020000,
  828. FOS_HIDEPINNEDPLACES = 0x00040000,
  829. FOS_NODEREFERENCELINKS = 0x00100000,
  830. FOS_DONTADDTORECENT = 0x02000000,
  831. FOS_FORCESHOWHIDDEN = 0x10000000,
  832. FOS_DEFAULTNOMINIMODE = 0x20000000
  833. }
  834. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  835. public struct OpenFileName
  836. {
  837. public int lStructSize;
  838. public IntPtr hwndOwner;
  839. public IntPtr hInstance;
  840. public IntPtr lpstrFilter;
  841. public IntPtr lpstrCustomFilter;
  842. public int nMaxCustFilter;
  843. public int nFilterIndex;
  844. public IntPtr lpstrFile;
  845. public int nMaxFile;
  846. public IntPtr lpstrFileTitle;
  847. public int nMaxFileTitle;
  848. public IntPtr lpstrInitialDir;
  849. public IntPtr lpstrTitle;
  850. public OpenFileNameFlags Flags;
  851. private readonly ushort Unused;
  852. private readonly ushort Unused2;
  853. public IntPtr lpstrDefExt;
  854. public IntPtr lCustData;
  855. public IntPtr lpfnHook;
  856. public IntPtr lpTemplateName;
  857. public IntPtr reservedPtr;
  858. public int reservedInt;
  859. public int flagsEx;
  860. }
  861. }
  862. [ComImport(), Guid("42F85136-DB7E-439C-85F1-E4075D135FC8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  863. internal interface IFileDialog
  864. {
  865. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  866. [PreserveSig()]
  867. uint Show([In, Optional] IntPtr hwndOwner); //IModalWindow
  868. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  869. uint SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr rgFilterSpec);
  870. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  871. uint SetFileTypeIndex([In] uint iFileType);
  872. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  873. uint GetFileTypeIndex(out uint piFileType);
  874. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  875. uint Advise([In, MarshalAs(UnmanagedType.Interface)] IntPtr pfde, out uint pdwCookie);
  876. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  877. uint Unadvise([In] uint dwCookie);
  878. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  879. uint SetOptions([In] uint fos);
  880. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  881. uint GetOptions(out uint fos);
  882. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  883. void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
  884. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  885. uint SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
  886. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  887. uint GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
  888. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  889. uint GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
  890. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  891. uint SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName);
  892. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  893. uint GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName);
  894. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  895. uint SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle);
  896. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  897. uint SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText);
  898. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  899. uint SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel);
  900. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  901. uint GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
  902. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  903. uint AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, uint fdap);
  904. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  905. uint SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension);
  906. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  907. uint Close([MarshalAs(UnmanagedType.Error)] uint hr);
  908. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  909. uint SetClientGuid([In] ref Guid guid);
  910. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  911. uint ClearClientData();
  912. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  913. uint SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter);
  914. }
  915. [ComImport, Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  916. internal interface IShellItem
  917. {
  918. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  919. uint BindToHandler([In] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.Interface)] out IntPtr ppvOut);
  920. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  921. uint GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
  922. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  923. uint GetDisplayName([In] uint sigdnName, out IntPtr ppszName);
  924. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  925. uint GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs);
  926. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
  927. uint Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder);
  928. }
  929. }