1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7  * Source: $(DRUNTIMESRC core/sys/windows/_shlwapi.d)
8  */
9 module nulib.system.win32.shlwapi;
10 import nulib.system.win32.shlobj;
11 import nulib.system.win32.basetyps;
12 import nulib.system.win32.objidl;
13 import nulib.system.win32.windef;
14 import nulib.system.win32.winbase;
15 import nulib.system.win32.winreg;
16 import nulib.system.com;
17 pragma(lib, "shlwapi");
18 
19 version (ANSI) {} else version = Unicode;
20 
21 /* Changes compared to MinGW:
22 wnsprintf functions are not included.
23 // Macros unneeded for D
24 #define StrCmpIA lstrcmpiA;
25 #define StrCmpA lstrcmpA;
26 #define StrCpyA lstrcpyA;
27 #define StrCpyNA lstrcpynA;
28 #define MAKEDLLVERULL(major, minor, build, qfe) \
29         (((ULONGLONG)(major) << 48) | \
30          ((ULONGLONG)(minor) << 32) | \
31          ((ULONGLONG)(build) << 16) | \
32          ((ULONGLONG)(  qfe) <<  0))
33 */
34 
35 
36 
37 enum DLLVER_PLATFORM_WINDOWS = 0x00000001;
38 enum DLLVER_PLATFORM_NT      = 0x00000002;
39 
40 enum URL_DONT_ESCAPE_EXTRA_INFO  = 0x02000000;
41 enum URL_DONT_SIMPLIFY           = 0x08000000;
42 enum URL_ESCAPE_PERCENT          = 0x00001000;
43 enum URL_ESCAPE_SEGMENT_ONLY     = 0x00002000;
44 enum URL_ESCAPE_SPACES_ONLY      = 0x04000000;
45 enum URL_ESCAPE_UNSAFE           = 0x20000000;
46 enum URL_INTERNAL_PATH           = 0x00800000;
47 enum URL_PARTFLAG_KEEPSCHEME     = 0x00000001;
48 enum URL_PLUGGABLE_PROTOCOL      = 0x40000000;
49 enum URL_UNESCAPE                = 0x10000000;
50 enum URL_UNESCAPE_HIGH_ANSI_ONLY = 0x00400000;
51 enum URL_UNESCAPE_INPLACE        = 0x00100000;
52 
53 align(1):
54 struct DLLVERSIONINFO
55 {
56     DWORD cbSize = this.sizeof;
57     DWORD dwMajorVersion;
58     DWORD dwMinorVersion;
59     DWORD dwBuildNumber;
60     DWORD dwPlatformID;
61 }
62 
63 struct DLLVERSIONINFO2
64 {
65     DLLVERSIONINFO info1;
66     DWORD dwFlags;
67     ULONGLONG ullVersion;
68 }
69 
70 enum ASSOCSTR {
71     ASSOCSTR_COMMAND,
72     ASSOCSTR_EXECUTABLE,
73     ASSOCSTR_FRIENDLYDOCNAME,
74     ASSOCSTR_FRIENDLYAPPNAME,
75     ASSOCSTR_NOOPEN,
76     ASSOCSTR_SHELLNEWVALUE,
77     ASSOCSTR_DDECOMMAND,
78     ASSOCSTR_DDEIFEXEC,
79     ASSOCSTR_DDEAPPLICATION,
80     ASSOCSTR_DDETOPIC
81 }
82 
83 enum ASSOCKEY
84 {
85     ASSOCKEY_SHELLEXECCLASS = 1,
86     ASSOCKEY_APP,
87     ASSOCKEY_CLASS,
88     ASSOCKEY_BASECLASS
89 }
90 
91 enum ASSOCDATA
92 {
93     ASSOCDATA_MSIDESCRIPTOR = 1,
94     ASSOCDATA_NOACTIVATEHANDLER,
95     ASSOCDATA_QUERYCLASSSTORE
96 }
97 
98 alias ASSOCF = DWORD;
99 
100 enum SHREGDEL_FLAGS
101 {
102     SHREGDEL_DEFAULT = 0x00000000,
103     SHREGDEL_HKCU    = 0x00000001,
104     SHREGDEL_HKLM    = 0x00000010,
105     SHREGDEL_BOTH    = 0x00000011
106 }
107 
108 enum SHREGENUM_FLAGS
109 {
110     SHREGENUM_DEFAULT = 0x00000000,
111     SHREGENUM_HKCU    = 0x00000001,
112     SHREGENUM_HKLM    = 0x00000010,
113     SHREGENUM_BOTH    = 0x00000011
114 }
115 
116 enum URLIS
117 {
118     URLIS_URL,
119     URLIS_OPAQUE,
120     URLIS_NOHISTORY,
121     URLIS_FILEURL,
122     URLIS_APPLIABLE,
123     URLIS_DIRECTORY,
124     URLIS_HASQUERY
125 }
126 
127 alias HUSKEY = HANDLE;
128 alias PHUSKEY = HUSKEY*;
129 
130 extern (Windows)
131 {
132     alias HRESULT function (DLLVERSIONINFO *) DLLGETVERSIONPROC;
133 }
134 
135 
136 BOOL IntlStrEqNA(LPCSTR pStr1, LPCSTR pStr2, int nChar)
137 {
138     return IntlStrEqWorkerA(TRUE, pStr1, pStr2, nChar);
139 }
140 
141 BOOL IntlStrEqNW(LPCWSTR pStr1, LPCWSTR pStr2, int nChar)
142 {
143     return IntlStrEqWorkerW(TRUE, pStr1, pStr2, nChar);
144 }
145 
146 BOOL IntlStrEqNIA(LPCSTR pStr1, LPCSTR pStr2, int nChar)
147 {
148     return IntlStrEqWorkerA(FALSE, pStr1, pStr2, nChar);
149 }
150 
151 BOOL IntlStrEqNIW(LPCWSTR pStr1, LPCWSTR pStr2, int nChar)
152 {
153     return IntlStrEqWorkerW(FALSE, pStr1, pStr2, nChar);
154 }
155 
156 BOOL UrlIsFileUrlA(LPCSTR pszURL)
157 {
158     return UrlIsA(pszURL, URLIS.URLIS_FILEURL);
159 }
160 
161 BOOL UrlIsFileUrlW(LPCWSTR pszURL)
162 {
163     return UrlIsW(pszURL, URLIS.URLIS_FILEURL);
164 }
165 
166 HRESULT UrlUnescapeInPlaceA(LPSTR pszUrl, DWORD dwFlags)
167 {
168     return UrlUnescapeA(pszUrl, null, null, dwFlags | URL_UNESCAPE_INPLACE);
169 }
170 HRESULT UrlUnescapeInPlaceW(LPWSTR pszUrl, DWORD dwFlags)
171 {
172     return UrlUnescapeW(pszUrl, null, null, dwFlags | URL_UNESCAPE_INPLACE);
173 }
174 
175 extern (Windows):
176 BOOL ChrCmpIA(WORD, WORD);
177 BOOL ChrCmpIW(WCHAR, WCHAR);
178 BOOL IntlStrEqWorkerA(BOOL, LPCSTR, LPCSTR, int);
179 BOOL IntlStrEqWorkerW(BOOL, LPCWSTR, LPCWSTR, int);
180 HRESULT SHStrDupA(LPCSTR, LPWSTR*);
181 HRESULT SHStrDupW(LPCWSTR, LPWSTR*);
182 LPSTR StrCatA(LPSTR, LPCSTR);
183 LPWSTR StrCatW(LPWSTR, LPCWSTR);
184 LPSTR StrCatBuffA(LPSTR, LPCSTR, int);
185 LPWSTR StrCatBuffW(LPWSTR, LPCWSTR, int);
186 DWORD StrCatChainW(LPWSTR, DWORD, DWORD, LPCWSTR);
187 LPSTR StrChrA(LPCSTR, WORD);
188 LPWSTR StrChrW(LPCWSTR, WCHAR);
189 LPSTR StrChrIA(LPCSTR, WORD);
190 LPWSTR StrChrIW(LPCWSTR, WCHAR);
191 int StrCmpIW(LPCWSTR, LPCWSTR);
192 int StrCmpW(LPCWSTR, LPCWSTR);
193 LPWSTR StrCpyW(LPWSTR, LPCWSTR);
194 LPWSTR StrCpyNW(LPWSTR, LPCWSTR, int);
195 int StrCmpNA(LPCSTR, LPCSTR, int);
196 int StrCmpNW(LPCWSTR, LPCWSTR, int);
197 int StrCmpNIA(LPCSTR, LPCSTR, int);
198 int StrCmpNIW(LPCWSTR, LPCWSTR, int);
199 int StrCSpnA(LPCSTR, LPCSTR);
200 int StrCSpnW(LPCWSTR, LPCWSTR);
201 int StrCSpnIA(LPCSTR, LPCSTR);
202 int StrCSpnIW(LPCWSTR, LPCWSTR);
203 LPSTR StrDupA(LPCSTR);
204 LPWSTR StrDupW(LPCWSTR);
205 LPSTR StrFormatByteSize64A(LONGLONG, LPSTR, UINT);
206 LPSTR StrFormatByteSizeA(DWORD, LPSTR, UINT);
207 LPWSTR StrFormatByteSizeW(LONGLONG, LPWSTR, UINT);
208 LPSTR StrFormatKBSizeA(LONGLONG, LPSTR, UINT);
209 LPWSTR StrFormatKBSizeW(LONGLONG, LPWSTR, UINT);
210 int StrFromTimeIntervalA(LPSTR, UINT, DWORD, int);
211 int StrFromTimeIntervalW(LPWSTR, UINT, DWORD, int);
212 BOOL StrIsIntlEqualA(BOOL, LPCSTR, LPCSTR, int);
213 BOOL StrIsIntlEqualW(BOOL, LPCWSTR, LPCWSTR, int);
214 LPSTR StrNCatA(LPSTR, LPCSTR, int);
215 LPWSTR StrNCatW(LPWSTR, LPCWSTR, int);
216 LPSTR StrPBrkA(LPCSTR, LPCSTR);
217 LPWSTR StrPBrkW(LPCWSTR, LPCWSTR);
218 LPSTR StrRChrA(LPCSTR, LPCSTR, WORD);
219 LPWSTR StrRChrW(LPCWSTR, LPCWSTR, WCHAR);
220 LPSTR StrRChrIA(LPCSTR, LPCSTR, WORD);
221 LPWSTR StrRChrIW(LPCWSTR, LPCWSTR, WCHAR);
222 LPSTR StrRStrIA(LPCSTR, LPCSTR, LPCSTR);
223 LPWSTR StrRStrIW(LPCWSTR, LPCWSTR, LPCWSTR);
224 int StrSpnA(LPCSTR, LPCSTR);
225 int StrSpnW(LPCWSTR, LPCWSTR);
226 LPSTR StrStrA(LPCSTR, LPCSTR);
227 LPSTR StrStrIA(LPCSTR, LPCSTR);
228 LPWSTR StrStrIW(LPCWSTR, LPCWSTR);
229 LPWSTR StrStrW(LPCWSTR, LPCWSTR);
230 int StrToIntA(LPCSTR);
231 int StrToIntW(LPCWSTR);
232 BOOL StrToIntExA(LPCSTR, DWORD, int*);
233 BOOL StrToIntExW(LPCWSTR, DWORD, int*);
234 BOOL StrTrimA(LPSTR, LPCSTR);
235 BOOL StrTrimW(LPWSTR, LPCWSTR);
236 LPSTR PathAddBackslashA(LPSTR);
237 LPWSTR PathAddBackslashW(LPWSTR);
238 BOOL PathAddExtensionA(LPSTR, LPCSTR);
239 BOOL PathAddExtensionW(LPWSTR, LPCWSTR);
240 BOOL PathAppendA(LPSTR, LPCSTR);
241 BOOL PathAppendW(LPWSTR, LPCWSTR);
242 LPSTR PathBuildRootA(LPSTR, int);
243 LPWSTR PathBuildRootW(LPWSTR, int);
244 BOOL PathCanonicalizeA(LPSTR, LPCSTR);
245 BOOL PathCanonicalizeW(LPWSTR, LPCWSTR);
246 LPSTR PathCombineA(LPSTR, LPCSTR, LPCSTR);
247 LPWSTR PathCombineW(LPWSTR, LPCWSTR, LPCWSTR);
248 int PathCommonPrefixA(LPCSTR, LPCSTR, LPSTR);
249 int PathCommonPrefixW(LPCWSTR, LPCWSTR, LPWSTR);
250 BOOL PathCompactPathA(HDC, LPSTR, UINT);
251 BOOL PathCompactPathW(HDC, LPWSTR, UINT);
252 BOOL PathCompactPathExA(LPSTR, LPCSTR, UINT, DWORD);
253 BOOL PathCompactPathExW(LPWSTR, LPCWSTR, UINT, DWORD);
254 HRESULT PathCreateFromUrlA(LPCSTR, LPSTR, LPDWORD, DWORD);
255 HRESULT PathCreateFromUrlW(LPCWSTR, LPWSTR, LPDWORD, DWORD);
256 BOOL PathFileExistsA(LPCSTR);
257 BOOL PathFileExistsW(LPCWSTR);
258 LPSTR PathFindExtensionA(LPCSTR);
259 LPWSTR PathFindExtensionW(LPCWSTR);
260 LPSTR PathFindFileNameA(LPCSTR);
261 LPWSTR PathFindFileNameW(LPCWSTR);
262 LPSTR PathFindNextComponentA(LPCSTR);
263 LPWSTR PathFindNextComponentW(LPCWSTR);
264 BOOL PathFindOnPathA(LPSTR, LPCSTR*);
265 BOOL PathFindOnPathW(LPWSTR, LPCWSTR*);
266 LPCSTR PathFindSuffixArrayA(LPCSTR, LPCSTR*, int);
267 LPCWSTR PathFindSuffixArrayW(LPCWSTR, LPCWSTR*, int);
268 LPSTR PathGetArgsA(LPCSTR);
269 LPWSTR PathGetArgsW(LPCWSTR);
270 UINT PathGetCharTypeA(UCHAR);
271 UINT PathGetCharTypeW(WCHAR);
272 int PathGetDriveNumberA(LPCSTR);
273 int PathGetDriveNumberW(LPCWSTR);
274 BOOL PathIsContentTypeA(LPCSTR, LPCSTR);
275 BOOL PathIsContentTypeW(LPCWSTR, LPCWSTR);
276 BOOL PathIsDirectoryA(LPCSTR);
277 BOOL PathIsDirectoryEmptyA(LPCSTR);
278 BOOL PathIsDirectoryEmptyW(LPCWSTR);
279 BOOL PathIsDirectoryW(LPCWSTR);
280 BOOL PathIsFileSpecA(LPCSTR);
281 BOOL PathIsFileSpecW(LPCWSTR);
282 BOOL PathIsLFNFileSpecA(LPCSTR);
283 BOOL PathIsLFNFileSpecW(LPCWSTR);
284 BOOL PathIsNetworkPathA(LPCSTR);
285 BOOL PathIsNetworkPathW(LPCWSTR);
286 BOOL PathIsPrefixA(LPCSTR, LPCSTR);
287 BOOL PathIsPrefixW(LPCWSTR, LPCWSTR);
288 BOOL PathIsRelativeA(LPCSTR);
289 BOOL PathIsRelativeW(LPCWSTR);
290 BOOL PathIsRootA(LPCSTR);
291 BOOL PathIsRootW(LPCWSTR);
292 BOOL PathIsSameRootA(LPCSTR, LPCSTR);
293 BOOL PathIsSameRootW(LPCWSTR, LPCWSTR);
294 BOOL PathIsSystemFolderA(LPCSTR, DWORD);
295 BOOL PathIsSystemFolderW(LPCWSTR, DWORD);
296 BOOL PathIsUNCA(LPCSTR);
297 BOOL PathIsUNCServerA(LPCSTR);
298 BOOL PathIsUNCServerShareA(LPCSTR);
299 BOOL PathIsUNCServerShareW(LPCWSTR);
300 BOOL PathIsUNCServerW(LPCWSTR);
301 BOOL PathIsUNCW(LPCWSTR);
302 BOOL PathIsURLA(LPCSTR);
303 BOOL PathIsURLW(LPCWSTR);
304 BOOL PathMakePrettyA(LPSTR);
305 BOOL PathMakePrettyW(LPWSTR);
306 BOOL PathMakeSystemFolderA(LPSTR);
307 BOOL PathMakeSystemFolderW(LPWSTR);
308 BOOL PathMatchSpecA(LPCSTR, LPCSTR);
309 BOOL PathMatchSpecW(LPCWSTR, LPCWSTR);
310 int PathParseIconLocationA(LPSTR);
311 int PathParseIconLocationW(LPWSTR);
312 void PathQuoteSpacesA(LPSTR);
313 void PathQuoteSpacesW(LPWSTR);
314 BOOL PathRelativePathToA(LPSTR, LPCSTR, DWORD, LPCSTR, DWORD);
315 BOOL PathRelativePathToW(LPWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD);
316 void PathRemoveArgsA(LPSTR);
317 void PathRemoveArgsW(LPWSTR);
318 LPSTR PathRemoveBackslashA(LPSTR);
319 LPWSTR PathRemoveBackslashW(LPWSTR);
320 void PathRemoveBlanksA(LPSTR);
321 void PathRemoveBlanksW(LPWSTR);
322 void PathRemoveExtensionA(LPSTR);
323 void PathRemoveExtensionW(LPWSTR);
324 BOOL PathRemoveFileSpecA(LPSTR);
325 BOOL PathRemoveFileSpecW(LPWSTR);
326 BOOL PathRenameExtensionA(LPSTR, LPCSTR);
327 BOOL PathRenameExtensionW(LPWSTR, LPCWSTR);
328 BOOL PathSearchAndQualifyA(LPCSTR, LPSTR, UINT);
329 BOOL PathSearchAndQualifyW(LPCWSTR, LPWSTR, UINT);
330 void PathSetDlgItemPathA(HWND, int, LPCSTR);
331 void PathSetDlgItemPathW(HWND, int, LPCWSTR);
332 LPSTR PathSkipRootA(LPCSTR);
333 LPWSTR PathSkipRootW(LPCWSTR);
334 void PathStripPathA(LPSTR);
335 void PathStripPathW(LPWSTR);
336 BOOL PathStripToRootA(LPSTR);
337 BOOL PathStripToRootW(LPWSTR);
338 void PathUndecorateA(LPSTR);
339 void PathUndecorateW(LPWSTR);
340 BOOL PathUnExpandEnvStringsA(LPCSTR, LPSTR, UINT);
341 BOOL PathUnExpandEnvStringsW(LPCWSTR, LPWSTR, UINT);
342 BOOL PathUnmakeSystemFolderA(LPSTR);
343 BOOL PathUnmakeSystemFolderW(LPWSTR);
344 void PathUnquoteSpacesA(LPSTR);
345 void PathUnquoteSpacesW(LPWSTR);
346 HRESULT SHAutoComplete(HWND, DWORD);
347 BOOL SHCreateThread(LPTHREAD_START_ROUTINE, void*, DWORD, LPTHREAD_START_ROUTINE);
348 DWORD SHCopyKeyA(HKEY, LPCSTR, HKEY, DWORD);
349 DWORD SHCopyKeyW(HKEY, LPCWSTR, HKEY, DWORD);
350 DWORD SHDeleteEmptyKeyA(HKEY, LPCSTR);
351 DWORD SHDeleteEmptyKeyW(HKEY, LPCWSTR);
352 DWORD SHDeleteKeyA(HKEY, LPCSTR);
353 DWORD SHDeleteKeyW(HKEY, LPCWSTR);
354 DWORD SHEnumKeyExA(HKEY, DWORD, LPSTR, LPDWORD);
355 DWORD SHEnumKeyExW(HKEY, DWORD, LPWSTR, LPDWORD);
356 DWORD SHQueryInfoKeyA(HKEY, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
357 DWORD SHQueryInfoKeyW(HKEY, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
358 DWORD SHQueryValueExA(HKEY, LPCSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD);
359 DWORD SHQueryValueExW(HKEY, LPCWSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD);
360 HRESULT SHGetThreadRef(IUnknown*);
361 HRESULT SHSetThreadRef(IUnknown);
362 BOOL SHSkipJunction(IBindCtx, const(CLSID)*);
363 DWORD SHEnumValueA(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD);
364 DWORD SHEnumValueW(HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD);
365 DWORD SHGetValueA(HKEY, LPCSTR, LPCSTR, LPDWORD, LPVOID, LPDWORD);
366 DWORD SHGetValueW(HKEY, LPCWSTR, LPCWSTR, LPDWORD, LPVOID, LPDWORD);
367 DWORD SHSetValueA(HKEY, LPCSTR, LPCSTR, DWORD, LPCVOID, DWORD);
368 DWORD SHSetValueW(HKEY, LPCWSTR, LPCWSTR, DWORD, LPCVOID, DWORD);
369 DWORD SHDeleteValueA(HKEY, LPCSTR, LPCSTR);
370 DWORD SHDeleteValueW(HKEY, LPCWSTR, LPCWSTR);
371 HRESULT AssocCreate(CLSID, const(IID)* , const(LPVOID)*);
372 HRESULT AssocQueryKeyA(ASSOCF, ASSOCKEY, LPCSTR, LPCSTR, HKEY*);
373 HRESULT AssocQueryKeyW(ASSOCF, ASSOCKEY, LPCWSTR, LPCWSTR, HKEY*);
374 HRESULT AssocQueryStringA(ASSOCF, ASSOCSTR, LPCSTR, LPCSTR, LPSTR, DWORD*);
375 HRESULT AssocQueryStringByKeyA(ASSOCF, ASSOCSTR, HKEY, LPCSTR, LPSTR, DWORD*);
376 HRESULT AssocQueryStringByKeyW(ASSOCF, ASSOCSTR, HKEY, LPCWSTR, LPWSTR, DWORD*);
377 HRESULT AssocQueryStringW(ASSOCF, ASSOCSTR, LPCWSTR, LPCWSTR, LPWSTR, DWORD*);
378 HRESULT UrlApplySchemeA(LPCSTR, LPSTR, LPDWORD, DWORD);
379 HRESULT UrlApplySchemeW(LPCWSTR, LPWSTR, LPDWORD, DWORD);
380 HRESULT UrlCanonicalizeA(LPCSTR, LPSTR, LPDWORD, DWORD);
381 HRESULT UrlCanonicalizeW(LPCWSTR, LPWSTR, LPDWORD, DWORD);
382 HRESULT UrlCombineA(LPCSTR, LPCSTR, LPSTR, LPDWORD, DWORD);
383 HRESULT UrlCombineW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, DWORD);
384 int UrlCompareA(LPCSTR, LPCSTR, BOOL);
385 int UrlCompareW(LPCWSTR, LPCWSTR, BOOL);
386 HRESULT UrlCreateFromPathA(LPCSTR, LPSTR, LPDWORD, DWORD);
387 HRESULT UrlCreateFromPathW(LPCWSTR, LPWSTR, LPDWORD, DWORD);
388 HRESULT UrlEscapeA(LPCSTR, LPSTR, LPDWORD, DWORD);
389 HRESULT UrlEscapeW(LPCWSTR, LPWSTR, LPDWORD, DWORD);
390 LPCSTR UrlGetLocationA(LPCSTR);
391 LPCWSTR UrlGetLocationW(LPCWSTR);
392 HRESULT UrlGetPartA(LPCSTR, LPSTR, LPDWORD, DWORD, DWORD);
393 HRESULT UrlGetPartW(LPCWSTR, LPWSTR, LPDWORD, DWORD, DWORD);
394 HRESULT UrlHashA(LPCSTR, LPBYTE, DWORD);
395 HRESULT UrlHashW(LPCWSTR, LPBYTE, DWORD);
396 BOOL UrlIsA(LPCSTR, URLIS);
397 BOOL UrlIsW(LPCWSTR, URLIS);
398 BOOL UrlIsNoHistoryA(LPCSTR);
399 BOOL UrlIsNoHistoryW(LPCWSTR);
400 BOOL UrlIsOpaqueA(LPCSTR);
401 BOOL UrlIsOpaqueW(LPCWSTR);
402 HRESULT UrlUnescapeA(LPSTR, LPSTR, LPDWORD, DWORD);
403 HRESULT UrlUnescapeW(LPWSTR, LPWSTR, LPDWORD, DWORD);
404 DWORD SHRegCloseUSKey(HUSKEY);
405 LONG SHRegCreateUSKeyA(LPCSTR, REGSAM, HUSKEY, PHUSKEY, DWORD);
406 LONG SHRegCreateUSKeyW(LPCWSTR, REGSAM, HUSKEY, PHUSKEY, DWORD);
407 LONG SHRegDeleteEmptyUSKeyA(HUSKEY, LPCSTR, SHREGDEL_FLAGS);
408 LONG SHRegDeleteEmptyUSKeyW(HUSKEY, LPCWSTR, SHREGDEL_FLAGS);
409 LONG SHRegDeleteUSValueA(HUSKEY, LPCSTR, SHREGDEL_FLAGS);
410 LONG SHRegDeleteUSValueW(HUSKEY, LPCWSTR, SHREGDEL_FLAGS);
411 HKEY SHRegDuplicateHKey(HKEY);
412 DWORD SHRegEnumUSKeyA(HUSKEY, DWORD, LPSTR, LPDWORD, SHREGENUM_FLAGS);
413 DWORD SHRegEnumUSKeyW(HUSKEY, DWORD, LPWSTR, LPDWORD, SHREGENUM_FLAGS);
414 DWORD SHRegEnumUSValueA(HUSKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD, SHREGENUM_FLAGS);
415 DWORD SHRegEnumUSValueW(HUSKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPVOID, LPDWORD, SHREGENUM_FLAGS);
416 BOOL SHRegGetBoolUSValueA(LPCSTR, LPCSTR, BOOL, BOOL);
417 BOOL SHRegGetBoolUSValueW(LPCWSTR, LPCWSTR, BOOL, BOOL);
418 DWORD SHRegGetPathA(HKEY, LPCSTR, LPCSTR, LPSTR, DWORD);
419 DWORD SHRegGetPathW(HKEY, LPCWSTR, LPCWSTR, LPWSTR, DWORD);
420 LONG SHRegGetUSValueA(LPCSTR, LPCSTR, LPDWORD, LPVOID, LPDWORD, BOOL, LPVOID, DWORD);
421 LONG SHRegGetUSValueW(LPCWSTR, LPCWSTR, LPDWORD, LPVOID, LPDWORD, BOOL, LPVOID, DWORD);
422 LONG SHRegOpenUSKeyA(LPCSTR, REGSAM, HUSKEY, PHUSKEY, BOOL);
423 LONG SHRegOpenUSKeyW(LPCWSTR, REGSAM, HUSKEY, PHUSKEY, BOOL);
424 DWORD SHRegQueryInfoUSKeyA(HUSKEY, LPDWORD, LPDWORD, LPDWORD, LPDWORD, SHREGENUM_FLAGS);
425 DWORD SHRegQueryInfoUSKeyW(HUSKEY, LPDWORD, LPDWORD, LPDWORD, LPDWORD, SHREGENUM_FLAGS);
426 LONG SHRegQueryUSValueA(HUSKEY, LPCSTR, LPDWORD, LPVOID, LPDWORD, BOOL, LPVOID, DWORD);
427 LONG SHRegQueryUSValueW(HUSKEY, LPCWSTR, LPDWORD, LPVOID, LPDWORD, BOOL, LPVOID, DWORD);
428 DWORD SHRegSetPathA(HKEY, LPCSTR, LPCSTR, LPCSTR, DWORD);
429 DWORD SHRegSetPathW(HKEY, LPCWSTR, LPCWSTR, LPCWSTR, DWORD);
430 LONG SHRegSetUSValueA(LPCSTR, LPCSTR, DWORD, LPVOID, DWORD, DWORD);
431 LONG SHRegSetUSValueW(LPCWSTR, LPCWSTR, DWORD, LPVOID, DWORD, DWORD);
432 LONG SHRegWriteUSValueA(HUSKEY, LPCSTR, DWORD, LPVOID, DWORD, DWORD);
433 LONG SHRegWriteUSValueW(HUSKEY, LPCWSTR, DWORD, LPVOID, DWORD, DWORD);
434 HRESULT HashData(LPBYTE, DWORD, LPBYTE, DWORD);
435 HPALETTE SHCreateShellPalette(HDC);
436 COLORREF ColorHLSToRGB(WORD, WORD, WORD);
437 COLORREF ColorAdjustLuma(COLORREF, int, BOOL);
438 void ColorRGBToHLS(COLORREF, WORD*, WORD*, WORD*);
439 /** Should not be necessary for D?
440 extern (C):
441 int  wnsprintfA(LPSTR, int, LPCSTR, ...);
442 int  wnsprintfW(LPWSTR, int, LPCWSTR, ...);
443 extern (Windows):
444 int wvnsprintfA(LPSTR, int, LPCSTR, va_list);
445 int wvnsprintfW(LPWSTR, int, LPCWSTR, va_list);
446 */
447 
448 HINSTANCE MLLoadLibraryA(LPCSTR, HANDLE, DWORD, LPCSTR, BOOL);
449 HINSTANCE MLLoadLibraryW(LPCWSTR, HANDLE, DWORD, LPCWSTR, BOOL);
450 
451 HRESULT DllInstall(BOOL, LPCWSTR);
452 
453 HRESULT StrRetToBufA(LPSTRRET, LPCITEMIDLIST, LPSTR, UINT);
454 HRESULT StrRetToBufW(LPSTRRET, LPCITEMIDLIST, LPWSTR, UINT);
455 HRESULT StrRetToStrA(LPSTRRET, LPCITEMIDLIST, LPSTR*);
456 HRESULT StrRetToStrW(LPSTRRET, LPCITEMIDLIST, LPWSTR*);
457 HRESULT SHCreateStreamOnFileA(LPCSTR, DWORD, IStream*);
458 HRESULT SHCreateStreamOnFileW(LPCWSTR, DWORD, IStream*);
459 IStream SHOpenRegStream2A(HKEY, LPCSTR, LPCSTR, DWORD);
460 IStream SHOpenRegStream2W(HKEY, LPCWSTR, LPCWSTR, DWORD);
461 IStream SHOpenRegStreamA(HKEY, LPCSTR, LPCSTR, DWORD);
462 IStream SHOpenRegStreamW(HKEY, LPCWSTR, LPCWSTR, DWORD);
463 
464 version (Unicode) {
465 alias ChrCmpI = ChrCmpIW;
466 alias IntlStrEqN = IntlStrEqNW;
467 alias IntlStrEqNI = IntlStrEqNIW;
468 alias IntlStrEqWorker = IntlStrEqWorkerW;
469 alias SHStrDup = SHStrDupW;
470 alias StrCat = StrCatW;
471 alias StrCatBuff = StrCatBuffW;
472 alias StrChr = StrChrW;
473 alias StrChrI = StrChrIW;
474 alias StrCmp = StrCmpW;
475 alias StrCmpI = StrCmpIW;
476 alias StrCmpNI = StrCmpNIW;
477 alias StrCmpN = StrCmpNW;
478 alias StrCpyN = StrCpyNW;
479 alias StrCpy = StrCpyW;
480 alias StrCSpnI = StrCSpnIW;
481 alias StrCSpn = StrCSpnW;
482 alias StrDup = StrDupW;
483 alias StrFormatByteSize = StrFormatByteSizeW;
484 alias StrFormatKBSize = StrFormatKBSizeW;
485 alias StrFromTimeInterval = StrFromTimeIntervalW;
486 alias StrIsIntlEqual = StrIsIntlEqualW;
487 alias StrNCat = StrNCatW;
488 alias StrPBrk = StrPBrkW;
489 alias StrRChr = StrRChrW;
490 alias StrRChrI = StrRChrIW;
491 alias StrRetToBuf = StrRetToBufW;
492 alias StrRetToStr = StrRetToStrW;
493 alias StrRStrI = StrRStrIW;
494 alias StrSpn = StrSpnW;
495 alias StrStrI = StrStrIW;
496 alias StrStr = StrStrW;
497 alias StrToInt = StrToIntW;
498 alias StrToIntEx = StrToIntExW;
499 alias StrTrim = StrTrimW;
500 alias PathAddBackslash = PathAddBackslashW;
501 alias PathAddExtension = PathAddExtensionW;
502 alias PathAppend = PathAppendW;
503 alias PathBuildRoot = PathBuildRootW;
504 alias PathCanonicalize = PathCanonicalizeW;
505 alias PathCombine = PathCombineW;
506 alias PathCommonPrefix = PathCommonPrefixW;
507 alias PathCompactPath = PathCompactPathW;
508 alias PathCompactPathEx = PathCompactPathExW;
509 alias PathCreateFromUrl = PathCreateFromUrlW;
510 alias PathFileExists = PathFileExistsW;
511 alias PathFindExtension = PathFindExtensionW;
512 alias PathFindFileName = PathFindFileNameW;
513 alias PathFindNextComponent = PathFindNextComponentW;
514 alias PathFindOnPath = PathFindOnPathW;
515 alias PathFindSuffixArray = PathFindSuffixArrayW;
516 alias PathGetArgs = PathGetArgsW;
517 alias PathGetCharType = PathGetCharTypeW;
518 alias PathGetDriveNumber = PathGetDriveNumberW;
519 alias PathIsContentType = PathIsContentTypeW;
520 alias PathIsDirectoryEmpty = PathIsDirectoryEmptyW;
521 alias PathIsDirectory = PathIsDirectoryW;
522 alias PathIsFileSpec = PathIsFileSpecW;
523 alias PathIsLFNFileSpec = PathIsLFNFileSpecW;
524 alias PathIsNetworkPath = PathIsNetworkPathW;
525 alias PathIsPrefix = PathIsPrefixW;
526 alias PathIsRelative = PathIsRelativeW;
527 alias PathIsRoot = PathIsRootW;
528 alias PathIsSameRoot = PathIsSameRootW;
529 alias PathIsSystemFolder = PathIsSystemFolderW;
530 alias PathIsUNCServerShare = PathIsUNCServerShareW;
531 alias PathIsUNCServer = PathIsUNCServerW;
532 alias PathIsUNC = PathIsUNCW;
533 alias PathIsURL = PathIsURLW;
534 alias PathMakePretty = PathMakePrettyW;
535 alias PathMakeSystemFolder = PathMakeSystemFolderW;
536 alias PathMatchSpec = PathMatchSpecW;
537 alias PathParseIconLocation = PathParseIconLocationW;
538 alias PathQuoteSpaces = PathQuoteSpacesW;
539 alias PathRelativePathTo = PathRelativePathToW;
540 alias PathRemoveArgs = PathRemoveArgsW;
541 alias PathRemoveBackslash = PathRemoveBackslashW;
542 alias PathRemoveBlanks = PathRemoveBlanksW;
543 alias PathRemoveExtension = PathRemoveExtensionW;
544 alias PathRemoveFileSpec = PathRemoveFileSpecW;
545 alias PathRenameExtension = PathRenameExtensionW;
546 alias PathSearchAndQualify = PathSearchAndQualifyW;
547 alias PathSetDlgItemPath = PathSetDlgItemPathW;
548 alias PathSkipRoot = PathSkipRootW;
549 alias PathStripPath = PathStripPathW;
550 alias PathStripToRoot = PathStripToRootW;
551 alias PathUndecorate = PathUndecorateW;
552 alias PathUnExpandEnvStrings = PathUnExpandEnvStringsW;
553 alias PathUnmakeSystemFolder = PathUnmakeSystemFolderW;
554 alias PathUnquoteSpaces = PathUnquoteSpacesW;
555 alias SHCreateStreamOnFile = SHCreateStreamOnFileW;
556 alias SHOpenRegStream = SHOpenRegStreamW;
557 alias SHOpenRegStream2 = SHOpenRegStream2W;
558 alias SHCopyKey = SHCopyKeyW;
559 alias SHDeleteEmptyKey = SHDeleteEmptyKeyW;
560 alias SHDeleteKey = SHDeleteKeyW;
561 alias SHEnumKeyEx = SHEnumKeyExW;
562 alias SHQueryInfoKey = SHQueryInfoKeyW;
563 alias SHQueryValueEx = SHQueryValueExW;
564 alias SHEnumValue = SHEnumValueW;
565 alias SHGetValue = SHGetValueW;
566 alias SHSetValue = SHSetValueW;
567 alias SHDeleteValue = SHDeleteValueW;
568 alias AssocQueryKey = AssocQueryKeyW;
569 alias AssocQueryStringByKey = AssocQueryStringByKeyW;
570 alias AssocQueryString = AssocQueryStringW;
571 alias UrlApplyScheme = UrlApplySchemeW;
572 alias UrlCanonicalize = UrlCanonicalizeW;
573 alias UrlCombine = UrlCombineW;
574 alias UrlCompare = UrlCompareW;
575 alias UrlCreateFromPath = UrlCreateFromPathW;
576 alias UrlEscape = UrlEscapeW;
577 alias UrlGetLocation = UrlGetLocationW;
578 alias UrlGetPart = UrlGetPartW;
579 alias UrlHash = UrlHashW;
580 alias UrlIs = UrlIsW;
581 alias UrlIsFileUrl = UrlIsFileUrlW;
582 alias UrlIsNoHistory = UrlIsNoHistoryW;
583 alias UrlIsOpaque = UrlIsOpaqueW;
584 alias UrlUnescape = UrlUnescapeW;
585 alias UrlUnescapeInPlace = UrlUnescapeInPlaceW;
586 alias SHRegCreateUSKey = SHRegCreateUSKeyW;
587 alias SHRegDeleteEmptyUSKey = SHRegDeleteEmptyUSKeyW;
588 alias SHRegDeleteUSValue = SHRegDeleteUSValueW;
589 alias SHRegEnumUSKey = SHRegEnumUSKeyW;
590 alias SHRegEnumUSValue = SHRegEnumUSValueW;
591 alias SHRegGetBoolUSValue = SHRegGetBoolUSValueW;
592 alias SHRegGetPath = SHRegGetPathW;
593 alias SHRegGetUSValue = SHRegGetUSValueW;
594 alias SHRegOpenUSKey = SHRegOpenUSKeyW;
595 alias SHRegQueryInfoUSKey = SHRegQueryInfoUSKeyW;
596 alias SHRegQueryUSValue = SHRegQueryUSValueW;
597 alias SHRegSetPath = SHRegSetPathW;
598 alias SHRegSetUSValue = SHRegSetUSValueW;
599 alias SHRegWriteUSValue = SHRegWriteUSValueW;
600 //alias wnsprintf = wnsprintfW;
601 //alias wvnsprintf = wvnsprintfW;
602 } else {
603 alias ChrCmpI = ChrCmpIA;
604 alias IntlStrEqN = IntlStrEqNA;
605 alias IntlStrEqNI = IntlStrEqNIA;
606 alias IntlStrEqWorker = IntlStrEqWorkerA;
607 alias SHStrDup = SHStrDupA;
608 alias StrCatBuff = StrCatBuffA;
609 alias StrChr = StrChrA;
610 alias StrChrI = StrChrIA;
611 alias StrCmpNI = StrCmpNIA;
612 alias StrCmpN = StrCmpNA;
613 alias StrCSpnI = StrCSpnIA;
614 alias StrCSpn = StrCSpnA;
615 alias StrDup = StrDupA;
616 alias StrFormatByteSize = StrFormatByteSizeA;
617 alias StrFormatKBSize = StrFormatKBSizeA;
618 alias StrFromTimeInterval = StrFromTimeIntervalA;
619 alias StrIsIntlEqual = StrIsIntlEqualA;
620 alias StrNCat = StrNCatA;
621 alias StrPBrk = StrPBrkA;
622 alias StrRChr = StrRChrA;
623 alias StrRChrI = StrRChrIA;
624 alias StrRetToBuf = StrRetToBufA;
625 alias StrRetToStr = StrRetToStrA;
626 alias StrRStrI = StrRStrIA;
627 alias StrSpn = StrSpnA;
628 alias StrStrI = StrStrIA;
629 alias StrStr = StrStrA;
630 alias StrToInt = StrToIntA;
631 alias StrToIntEx = StrToIntExA;
632 alias StrTrim = StrTrimA;
633 alias PathAddBackslash = PathAddBackslashA;
634 alias PathAddExtension = PathAddExtensionA;
635 alias PathAppend = PathAppendA;
636 alias PathBuildRoot = PathBuildRootA;
637 alias PathCanonicalize = PathCanonicalizeA;
638 alias PathCombine = PathCombineA;
639 alias PathCommonPrefix = PathCommonPrefixA;
640 alias PathCompactPath = PathCompactPathA;
641 alias PathCompactPathEx = PathCompactPathExA;
642 alias PathCreateFromUrl = PathCreateFromUrlA;
643 alias PathFileExists = PathFileExistsA;
644 alias PathFindExtension = PathFindExtensionA;
645 alias PathFindFileName = PathFindFileNameA;
646 alias PathFindNextComponent = PathFindNextComponentA;
647 alias PathFindOnPath = PathFindOnPathA;
648 alias PathFindSuffixArray = PathFindSuffixArrayA;
649 alias PathGetArgs = PathGetArgsA;
650 alias PathGetCharType = PathGetCharTypeA;
651 alias PathGetDriveNumber = PathGetDriveNumberA;
652 alias PathIsContentType = PathIsContentTypeA;
653 alias PathIsDirectoryEmpty = PathIsDirectoryEmptyA;
654 alias PathIsDirectory = PathIsDirectoryA;
655 alias PathIsFileSpec = PathIsFileSpecA;
656 alias PathIsLFNFileSpec = PathIsLFNFileSpecA;
657 alias PathIsNetworkPath = PathIsNetworkPathA;
658 alias PathIsPrefix = PathIsPrefixA;
659 alias PathIsRelative = PathIsRelativeA;
660 alias PathIsRoot = PathIsRootA;
661 alias PathIsSameRoot = PathIsSameRootA;
662 alias PathIsSystemFolder = PathIsSystemFolderA;
663 alias PathIsUNCServerShare = PathIsUNCServerShareA;
664 alias PathIsUNCServer = PathIsUNCServerA;
665 alias PathIsUNC = PathIsUNCA;
666 alias PathIsURL = PathIsURLA;
667 alias PathMakePretty = PathMakePrettyA;
668 alias PathMakeSystemFolder = PathMakeSystemFolderA;
669 alias PathMatchSpec = PathMatchSpecA;
670 alias PathParseIconLocation = PathParseIconLocationA;
671 alias PathQuoteSpaces = PathQuoteSpacesA;
672 alias PathRelativePathTo = PathRelativePathToA;
673 alias PathRemoveArgs = PathRemoveArgsA;
674 alias PathRemoveBackslash = PathRemoveBackslashA;
675 alias PathRemoveBlanks = PathRemoveBlanksA;
676 alias PathRemoveExtension = PathRemoveExtensionA;
677 alias PathRemoveFileSpec = PathRemoveFileSpecA;
678 alias PathRenameExtension = PathRenameExtensionA;
679 alias PathSearchAndQualify = PathSearchAndQualifyA;
680 alias PathSetDlgItemPath = PathSetDlgItemPathA;
681 alias PathSkipRoot = PathSkipRootA;
682 alias PathStripPath = PathStripPathA;
683 alias PathStripToRoot = PathStripToRootA;
684 alias PathUndecorate = PathUndecorateA;
685 alias PathUnExpandEnvStrings = PathUnExpandEnvStringsA;
686 alias PathUnmakeSystemFolder = PathUnmakeSystemFolderA;
687 alias PathUnquoteSpaces = PathUnquoteSpacesA;
688 alias SHCreateStreamOnFile = SHCreateStreamOnFileA;
689 alias SHOpenRegStream = SHOpenRegStreamA;
690 alias SHOpenRegStream2 = SHOpenRegStream2A;
691 alias SHCopyKey = SHCopyKeyA;
692 alias SHDeleteEmptyKey = SHDeleteEmptyKeyA;
693 alias SHDeleteKey = SHDeleteKeyA;
694 alias SHEnumKeyEx = SHEnumKeyExA;
695 alias SHQueryInfoKey = SHQueryInfoKeyA;
696 alias SHQueryValueEx = SHQueryValueExA;
697 alias SHEnumValue = SHEnumValueA;
698 alias SHGetValue = SHGetValueA;
699 alias SHSetValue = SHSetValueA;
700 alias SHDeleteValue = SHDeleteValueA;
701 alias AssocQueryKey = AssocQueryKeyA;
702 alias AssocQueryStringByKey = AssocQueryStringByKeyA;
703 alias AssocQueryString = AssocQueryStringA;
704 alias UrlApplyScheme = UrlApplySchemeA;
705 alias UrlCanonicalize = UrlCanonicalizeA;
706 alias UrlCombine = UrlCombineA;
707 alias UrlCompare = UrlCompareA;
708 alias UrlCreateFromPath = UrlCreateFromPathA;
709 alias UrlEscape = UrlEscapeA;
710 alias UrlGetLocation = UrlGetLocationA;
711 alias UrlGetPart = UrlGetPartA;
712 alias UrlHash = UrlHashA;
713 alias UrlIs = UrlIsA;
714 alias UrlIsNoHistory = UrlIsNoHistoryA;
715 alias UrlIsOpaque = UrlIsOpaqueA;
716 alias UrlUnescape = UrlUnescapeA;
717 alias UrlUnescapeInPlace = UrlUnescapeInPlaceA;
718 alias SHRegCreateUSKey = SHRegCreateUSKeyA;
719 alias SHRegDeleteEmptyUSKey = SHRegDeleteEmptyUSKeyA;
720 alias SHRegDeleteUSValue = SHRegDeleteUSValueA;
721 alias SHRegEnumUSKey = SHRegEnumUSKeyA;
722 alias SHRegEnumUSValue = SHRegEnumUSValueA;
723 alias SHRegGetBoolUSValue = SHRegGetBoolUSValueA;
724 alias SHRegGetPath = SHRegGetPathA;
725 alias SHRegGetUSValue = SHRegGetUSValueA;
726 alias SHRegOpenUSKey = SHRegOpenUSKeyA;
727 alias SHRegQueryInfoUSKey = SHRegQueryInfoUSKeyA;
728 alias SHRegQueryUSValue = SHRegQueryUSValueA;
729 alias SHRegSetPath = SHRegSetPathA;
730 alias SHRegSetUSValue = SHRegSetUSValueA;
731 alias SHRegWriteUSValue = SHRegWriteUSValueA;
732 //alias wnsprintf = wnsprintfA;
733 //alias wvnsprintf = wvnsprintfA;
734 }
735 
736 alias StrToLong = StrToInt;