18using System.Runtime.InteropServices;
26 internal static class KnownFolders
30 #region private static string[] _knownFolderGuids = new string[]
31 private static string[] _knownFolderGuids =
new string[]
33 "{008CA0B1-55B4-4C56-B8A8-4DE4B299D3BE}",
34 "{724EF170-A42D-4FEF-9F26-B60E846FBA4F}",
35 "{A3918781-E5F2-4890-B3D9-A7E54332328C}",
36 "{AB5FB87B-7CE2-4F83-915D-550846C9537B}",
37 "{9E52AB10-F80D-49DF-ACB8-4330F5687855}",
38 "{D0384E7D-BAC3-4797-8F14-CBA229B392B5}",
39 "{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}",
40 "{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}",
41 "{A4115719-D62E-491D-AA7C-E74B8BE3B067}",
42 "{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}",
43 "{B94237E7-57AC-4347-9151-B08C6C32D1F7}",
44 "{56784854-C6CB-462B-8169-88E350ACB882}",
45 "{2B0F765D-C0E9-4171-908E-08A611B84FF6}",
46 "{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}",
47 "{5CE4A5E9-E4EB-479D-B89F-130C02886155}",
48 "{FDD39AD0-238F-46AF-ADB4-6C85480369C7}",
49 "{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}",
50 "{374DE290-123F-4565-9164-39C4925E467B}",
51 "{1777F761-68AD-4D8A-87BD-30B759FA33DD}",
52 "{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}",
53 "{054FAE61-4DD8-4787-80B6-090220C4B700}",
54 "{D9DC8A3B-B784-432E-A781-5A1130A75963}",
55 "{BCB5256F-79F6-4CEE-B725-DC34E402FD46}",
56 "{352481E8-33BE-4251-BA85-6007CAEDCF9D}",
57 "{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}",
58 "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}",
59 "{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}",
60 "{A520A1A4-1780-4FF6-BD18-167343C5AF16}",
61 "{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}",
62 "{4BD8D571-6D19-48D3-BE97-422220080E43}",
63 "{2112AB0A-C86A-4FFE-A368-0DE96E47012E}",
64 "{C5ABBF53-E17F-4121-8900-86626FC2C973}",
65 "{2C36C0AA-5812-4B87-BFD0-4CD0DFB19B39}",
66 "{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}",
67 "{A990AE9F-A03B-4E80-94BC-9912D7504104}",
68 "{33E28130-4E1E-4676-835A-98395C3BC3BB}",
69 "{DE92C1C7-837F-4F69-A3BB-86E631204A23}",
70 "{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}",
71 "{5E6C858F-0E22-4760-9AFE-EA3317B67173}",
72 "{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}",
73 "{905E63B6-C1BF-494E-B29C-65B732D3D21A}",
74 "{6D809377-6AF0-444B-8957-A3773F02200E}",
75 "{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}",
76 "{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}",
77 "{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}",
78 "{DE974D24-D9C6-4D3E-BF91-F4455120B917}",
79 "{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}",
80 "{DFDF76A2-C82A-4D63-906A-5644AC457385}",
81 "{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}",
82 "{ED4824AF-DCE4-45A8-81E2-FC7965083634}",
83 "{3D644C9B-1FB8-4F30-9B45-F670235F79C0}",
84 "{DEBF2536-E1A8-4C59-B6A2-414586476AEA}",
85 "{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}",
86 "{3214FAB5-9757-4298-BB61-92A9DEAA44FF}",
87 "{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}",
88 "{E555AB60-153B-4D17-9F04-A5FE99FC15EC}",
89 "{0482AF6C-08F1-4C34-8C90-E17EC98B1E17}",
90 "{2400183A-6185-49FB-A2D8-4A392A602BA3}",
91 "{52A4F021-7B75-48A9-9F6B-4B87A210BC8F}",
92 "{AE50C081-EBD2-438A-8655-8A092E34987A}",
93 "{1A6FDBA2-F42D-4358-A798-B74D745926C5}",
94 "{8AD10C31-2ADB-4296-A8F7-E4701232C972}",
95 "{C870044B-F49E-4126-A9C3-B52A1FF411E8}",
96 "{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}",
97 "{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}",
98 "{00BCFC5A-ED94-4E48-96A1-3F6217F21990}",
99 "{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}",
100 "{C4900540-2379-4C75-844B-64E6FAF8716B}",
101 "{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}",
102 "{859EAD94-2E85-48AD-A71A-0969CB56A6CD}",
103 "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}",
104 "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}",
105 "{B7BEDE81-DF94-4682-A7D8-57A52620B86F}",
106 "{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}",
107 "{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}",
108 "{8983036C-27C0-404B-8F08-102D10DCFD74}",
109 "{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}",
110 "{A75D362E-50FC-4FB7-AC2C-A8BEAA314493}",
111 "{A52BBA46-E9E1-435F-B3D9-28DAA648C0F6}",
112 "{767E6811-49CB-4273-87C2-20F355E1085B}",
113 "{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}",
114 "{339719B5-8C47-4894-94C2-D8F77ADD44A6}",
115 "{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}",
116 "{B97D20BB-F46A-4C97-BA10-5E3608430854}",
117 "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}",
118 "{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}",
119 "{A63293E8-664E-48DB-A079-DF759E0509F7}",
120 "{9E3995AB-1F9C-4F13-B827-48B24B6C7174}",
121 "{0762D272-C50A-4BB0-A382-697DCD729B80}",
122 "{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}",
123 "{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}",
124 "{18989B1D-99B5-455B-841C-AB7C74E4DDFC}",
125 "{491E922F-5643-4AF4-A7EB-4E7A138D8174}",
126 "{F38BF404-1D43-42F2-9305-67DE0B28FC23}"
139 internal static string GetPath(KnownFolder knownFolder)
141 return GetPath(knownFolder,
false);
153 internal static string GetPath(KnownFolder knownFolder,
bool defaultUser)
155 return GetPath(knownFolder, KnownFolderFlags.DontVerify, defaultUser);
164 internal static string GetDefaultPath(KnownFolder knownFolder)
166 return GetDefaultPath(knownFolder,
false);
177 internal static string GetDefaultPath(KnownFolder knownFolder,
bool defaultUser)
179 return GetPath(knownFolder, KnownFolderFlags.DefaultPath | KnownFolderFlags.DontVerify, defaultUser);
187 internal static void Initialize(KnownFolder knownFolder)
189 Initialize(knownFolder,
false);
199 internal static void Initialize(KnownFolder knownFolder,
bool defaultUser)
201 GetPath(knownFolder, KnownFolderFlags.Create | KnownFolderFlags.Init, defaultUser);
206 private static string GetPath(KnownFolder knownFolder, KnownFolderFlags flags,
bool defaultUser)
208 int result = SHGetKnownFolderPath(
new Guid(_knownFolderGuids[(
int)knownFolder]), (uint)flags,
209 new IntPtr(defaultUser ? -1 : 0), out IntPtr outPath);
212 string path = Marshal.PtrToStringUni(outPath);
213 Marshal.FreeCoTaskMem(outPath);
218 throw new ExternalException(
219 "Unable to retrieve the known folder path. It may not be available on this system.", result);
236 [DllImport(
"Shell32.dll")]
237 private static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)]Guid rfid, uint dwFlags,
238 IntPtr hToken, out IntPtr ppszPath);
243 private enum KnownFolderFlags : uint
245 SimpleIDList = 0x00000100,
246 NotParentRelative = 0x00000200,
247 DefaultPath = 0x00000400,
249 NoAlias = 0x00001000,
250 DontUnexpand = 0x00002000,
251 DontVerify = 0x00004000,
253 NoAppcontainerRedirection = 0x00010000,
254 AliasOnly = 0x80000000
262 internal enum KnownFolder
280 ApplicationShortcuts,
400 ImplicitAppShortcuts,
436 LocalizedResourcesDir,
545 ProgramFilesCommonX64,
553 ProgramFilesCommonX86,
827 UserProgramFilesCommon,