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