home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / shlwapi.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  32KB  |  662 lines

  1.  
  2. /*****************************************************************************\
  3. *                                                                             *
  4. * shlwapi.h - Interface for the Windows light-weight utility APIs             *
  5. *                                                                             *
  6. * Version 1.0                                                                 *
  7. *                                                                             *
  8. * Copyright 1991-1998, Microsoft Corp.      All rights reserved.          *
  9. *                                                                             *
  10. \*****************************************************************************/
  11.  
  12.  
  13. #ifndef _INC_SHLWAPI
  14. #define _INC_SHLWAPI
  15.  
  16. #ifndef NOSHLWAPI
  17.  
  18.  
  19. //
  20. // Define API decoration for direct importing of DLL references.
  21. //
  22. #ifndef WINSHLWAPI
  23. #if !defined(_SHLWAPI_)
  24. #define LWSTDAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  25. #define LWSTDAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  26. #else
  27. #define LWSTDAPI          STDAPI
  28. #define LWSTDAPI_(type)   STDAPI_(type)
  29. #endif
  30. #endif // WINSHLWAPI
  31.  
  32. #ifdef _WIN32
  33. #include <pshpack1.h>
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. //
  41. // Users of this header may define any number of these constants to avoid
  42. // the definitions of each functional group.
  43. //
  44. //    NO_SHLWAPI_STRFCNS    String functions
  45. //    NO_SHLWAPI_PATH       Path functions
  46. //    NO_SHLWAPI_REG        Registry functions
  47. //    NO_SHLWAPI_STREAM     Stream functions
  48. //    NO_SHLWAPI_GDI        GDI helper functions
  49.  
  50.  
  51. #ifndef NO_SHLWAPI_STRFCNS
  52. //
  53. //=============== String Routines ===================================
  54. //
  55.  
  56. LWSTDAPI_(LPSTR)    StrChrA(LPCSTR lpStart, WORD wMatch);
  57. LWSTDAPI_(LPWSTR)   StrChrW(LPCWSTR lpStart, WORD wMatch);
  58. LWSTDAPI_(LPSTR)    StrChrIA(LPCSTR lpStart, WORD wMatch);
  59. LWSTDAPI_(LPWSTR)   StrChrIW(LPCWSTR lpStart, WORD wMatch);
  60. LWSTDAPI_(int)      StrCmpNA(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);
  61. LWSTDAPI_(int)      StrCmpNW(LPCWSTR lpStr1, LPCWSTR lpStr2, int nChar);
  62. LWSTDAPI_(int)      StrCmpNIA(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);
  63. LWSTDAPI_(int)      StrCmpNIW(LPCWSTR lpStr1, LPCWSTR lpStr2, int nChar);
  64. LWSTDAPI_(int)      StrCSpnA(LPCSTR lpStr, LPCSTR lpSet);
  65. LWSTDAPI_(int)      StrCSpnW(LPCWSTR lpStr, LPCWSTR lpSet);
  66. LWSTDAPI_(int)      StrCSpnIA(LPCSTR lpStr, LPCSTR lpSet);
  67. LWSTDAPI_(int)      StrCSpnIW(LPCWSTR lpStr, LPCWSTR lpSet);
  68. LWSTDAPI_(LPSTR)    StrDupA(LPCSTR lpSrch);
  69. LWSTDAPI_(LPWSTR)   StrDupW(LPCWSTR lpSrch);
  70. LWSTDAPI_(LPSTR)    StrFormatByteSizeA(DWORD dw, LPSTR szBuf, UINT uiBufSize);
  71. LWSTDAPI_(LPWSTR)   StrFormatByteSizeW(LONGLONG qdw, LPWSTR szBuf, UINT uiBufSize);
  72. LWSTDAPI_(int)      StrFromTimeIntervalA(LPSTR pszOut, UINT cchMax, DWORD dwTimeMS, int digits);
  73. LWSTDAPI_(int)      StrFromTimeIntervalW(LPWSTR pszOut, UINT cchMax, DWORD dwTimeMS, int digits);
  74. LWSTDAPI_(BOOL)     StrIsIntlEqualA(BOOL fCaseSens, LPCSTR lpString1, LPCSTR lpString2, int nChar);
  75. LWSTDAPI_(BOOL)     StrIsIntlEqualW(BOOL fCaseSens, LPCWSTR lpString1, LPCWSTR lpString2, int nChar);
  76. LWSTDAPI_(LPSTR)    StrNCatA(LPSTR psz1, LPCSTR psz2, int cchMax);
  77. LWSTDAPI_(LPWSTR)   StrNCatW(LPWSTR psz1, LPCWSTR psz2, int cchMax);
  78. LWSTDAPI_(LPSTR)    StrPBrkA(LPCSTR psz, LPCSTR pszSet);
  79. LWSTDAPI_(LPWSTR)   StrPBrkW(LPCWSTR psz, LPCWSTR pszSet);
  80. LWSTDAPI_(LPSTR)    StrRChrA(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);
  81. LWSTDAPI_(LPWSTR)   StrRChrW(LPCWSTR lpStart, LPCWSTR lpEnd, WORD wMatch);
  82. LWSTDAPI_(LPSTR)    StrRChrIA(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);
  83. LWSTDAPI_(LPWSTR)   StrRChrIW(LPCWSTR lpStart, LPCWSTR lpEnd, WORD wMatch);
  84. LWSTDAPI_(LPSTR)    StrRStrIA(LPCSTR lpSource, LPCSTR lpLast, LPCSTR lpSrch);
  85. LWSTDAPI_(LPWSTR)   StrRStrIW(LPCWSTR lpSource, LPCWSTR lpLast, LPCWSTR lpSrch);
  86. LWSTDAPI_(int)      StrSpnA(LPCSTR psz, LPCSTR pszSet);
  87. LWSTDAPI_(int)      StrSpnW(LPCWSTR psz, LPCWSTR pszSet);
  88. LWSTDAPI_(LPSTR)    StrStrA(LPCSTR lpFirst, LPCSTR lpSrch);
  89. LWSTDAPI_(LPWSTR)   StrStrW(LPCWSTR lpFirst, LPCWSTR lpSrch);
  90. LWSTDAPI_(LPSTR)    StrStrIA(LPCSTR lpFirst, LPCSTR lpSrch);
  91. LWSTDAPI_(LPWSTR)   StrStrIW(LPCWSTR lpFirst, LPCWSTR lpSrch);
  92. LWSTDAPI_(int)      StrToIntA(LPCSTR lpSrc);
  93. LWSTDAPI_(int)      StrToIntW(LPCWSTR lpSrc);
  94. LWSTDAPI_(BOOL)     StrToIntExA(LPCSTR pszString, DWORD dwFlags, int FAR * piRet);
  95. LWSTDAPI_(BOOL)     StrToIntExW(LPCWSTR pszString, DWORD dwFlags, int FAR * piRet);
  96. LWSTDAPI_(BOOL)     StrTrimA(LPSTR psz, LPCSTR pszTrimChars);
  97. LWSTDAPI_(BOOL)     StrTrimW(LPWSTR psz, LPCWSTR pszTrimChars);
  98.  
  99. LWSTDAPI_(LPWSTR)   StrCatW(LPWSTR psz1, LPCWSTR psz2);
  100. LWSTDAPI_(int)      StrCmpW(LPCWSTR psz1, LPCWSTR psz2);
  101. LWSTDAPI_(int)      StrCmpIW(LPCWSTR psz1, LPCWSTR psz2);
  102. LWSTDAPI_(LPWSTR)   StrCpyW(LPWSTR psz1, LPCWSTR psz2);
  103. LWSTDAPI_(LPWSTR)   StrCpyNW(LPWSTR psz1, LPCWSTR psz2, int cchMax);
  104.  
  105. LWSTDAPI_(BOOL)     ChrCmpIA(WORD w1, WORD w2);
  106. LWSTDAPI_(BOOL)     ChrCmpIW(WORD w1, WORD w2);
  107.  
  108. #define StrIntlEqNA( s1, s2, nChar) StrIsIntlEqualA( TRUE, s1, s2, nChar)
  109. #define StrIntlEqNW( s1, s2, nChar) StrIsIntlEqualW( TRUE, s1, s2, nChar)
  110. #define StrIntlEqNIA(s1, s2, nChar) StrIsIntlEqualA(FALSE, s1, s2, nChar)
  111. #define StrIntlEqNIW(s1, s2, nChar) StrIsIntlEqualW(FALSE, s1, s2, nChar)
  112.  
  113.  
  114. #ifdef UNICODE
  115. #define StrChr                  StrChrW
  116. #define StrRChr                 StrRChrW
  117. #define StrChrI                 StrChrIW
  118. #define StrRChrI                StrRChrIW
  119. #define StrCmpN                 StrCmpNW
  120. #define StrCmpNI                StrCmpNIW
  121. #define StrStr                  StrStrW
  122. #define StrStrI                 StrStrIW
  123. #define StrDup                  StrDupW
  124. #define StrRStrI                StrRStrIW
  125. #define StrCSpn                 StrCSpnW
  126. #define StrCSpnI                StrCSpnIW
  127. #define StrSpn                  StrSpnW
  128. #define StrToInt                StrToIntW
  129. #define StrPBrk                 StrPBrkW
  130. #define StrToIntEx              StrToIntExW
  131. #define StrFromTimeInterval     StrFromTimeIntervalW
  132. #define StrIntlEqN              StrIntlEqNW
  133. #define StrIntlEqNI             StrIntlEqNIW
  134. #define StrFormatByteSize       StrFormatByteSizeW
  135. #define StrNCat                 StrNCatW
  136. #define StrTrim                 StrTrimW
  137. #define ChrCmpI                 ChrCmpIW
  138.  
  139.  
  140. #else
  141. #define StrChr                  StrChrA
  142. #define StrRChr                 StrRChrA
  143. #define StrChrI                 StrChrIA
  144. #define StrRChrI                StrRChrIA
  145. #define StrCmpN                 StrCmpNA
  146. #define StrCmpNI                StrCmpNIA
  147. #define StrStr                  StrStrA
  148. #define StrStrI                 StrStrIA
  149. #define StrDup                  StrDupA
  150. #define StrRStrI                StrRStrIA
  151. #define StrCSpn                 StrCSpnA
  152. #define StrCSpnI                StrCSpnIA
  153. #define StrSpn                  StrSpnA
  154. #define StrToInt                StrToIntA
  155. #define StrPBrk                 StrPBrkA
  156. #define StrToIntEx              StrToIntExA
  157. #define StrFromTimeInterval     StrFromTimeIntervalA
  158. #define StrIntlEqN              StrIntlEqNA
  159. #define StrIntlEqNI             StrIntlEqNIA
  160. #define StrFormatByteSize       StrFormatByteSizeA
  161. #define StrNCat                 StrNCatA
  162. #define StrTrim                 StrTrimA
  163. #define ChrCmpI                 ChrCmpIA
  164. #endif
  165.  
  166.  
  167. // Flags for StrToIntEx
  168. #define STIF_DEFAULT        0x00000000L
  169. #define STIF_SUPPORT_HEX    0x00000001L
  170.  
  171.  
  172. #define StrCatA                 lstrcatA
  173. #define StrCmpA                 lstrcmpA
  174. #define StrCmpIA                lstrcmpiA
  175. #define StrCpyA                 lstrcpyA
  176. #define StrCpyNA                lstrcpynA
  177.  
  178.  
  179. #define StrToLong               StrToInt
  180. #define StrNCmp                 StrCmpN
  181. #define StrNCmpI                StrCmpNI
  182. #define StrNCpy                 StrCpyN
  183. #define StrCatN                 StrNCat
  184.  
  185. #ifdef UNICODE
  186. #define StrCat                  StrCatW
  187. #define StrCmp                  StrCmpW
  188. #define StrCmpI                 StrCmpIW
  189. #define StrCpy                  StrCpyW
  190. #define StrCpyN                 StrCpyNW
  191. #else
  192. #define StrCat                  lstrcatA
  193. #define StrCmp                  lstrcmpA
  194. #define StrCmpI                 lstrcmpiA
  195. #define StrCpy                  lstrcpyA
  196. #define StrCpyN                 lstrcpynA
  197. #endif
  198.  
  199.  
  200.  
  201. #endif //  NO_SHLWAPI_STRFCNS
  202.  
  203.  
  204. #ifndef NO_SHLWAPI_PATH
  205.  
  206. //
  207. //=============== Path Routines ===================================
  208. //
  209.  
  210. LWSTDAPI_(LPSTR)    PathAddBackslashA(LPSTR pszPath);
  211. LWSTDAPI_(LPWSTR)   PathAddBackslashW(LPWSTR pszPath);
  212. LWSTDAPI_(BOOL)     PathAddExtensionA(LPSTR pszPath, LPCSTR pszExt);
  213. LWSTDAPI_(BOOL)     PathAddExtensionW(LPWSTR pszPath, LPCWSTR pszExt);
  214. LWSTDAPI_(BOOL)     PathAppendA(LPSTR pszPath, LPCSTR pMore);
  215. LWSTDAPI_(BOOL)     PathAppendW(LPWSTR pszPath, LPCWSTR pMore);
  216. LWSTDAPI_(LPSTR)    PathBuildRootA(LPSTR szRoot, int iDrive);
  217. LWSTDAPI_(LPWSTR)   PathBuildRootW(LPWSTR szRoot, int iDrive);
  218. LWSTDAPI_(BOOL)     PathCanonicalizeA(LPSTR pszBuf, LPCSTR pszPath);
  219. LWSTDAPI_(BOOL)     PathCanonicalizeW(LPWSTR pszBuf, LPCWSTR pszPath);
  220. LWSTDAPI_(LPSTR)    PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
  221. LWSTDAPI_(LPWSTR)   PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
  222. LWSTDAPI_(BOOL)     PathCompactPathA(HDC hDC, LPSTR pszPath, UINT dx);
  223. LWSTDAPI_(BOOL)     PathCompactPathW(HDC hDC, LPWSTR pszPath, UINT dx);
  224. LWSTDAPI_(BOOL)     PathCompactPathExA(LPSTR pszOut, LPCSTR pszSrc, UINT cchMax, DWORD dwFlags);
  225. LWSTDAPI_(BOOL)     PathCompactPathExW(LPWSTR pszOut, LPCWSTR pszSrc, UINT cchMax, DWORD dwFlags);
  226. LWSTDAPI_(int)      PathCommonPrefixA(LPCSTR pszFile1, LPCSTR pszFile2, LPSTR achPath);
  227. LWSTDAPI_(int)      PathCommonPrefixW(LPCWSTR pszFile1, LPCWSTR pszFile2, LPWSTR achPath);
  228. LWSTDAPI_(BOOL)     PathFileExistsA(LPCSTR pszPath);
  229. LWSTDAPI_(BOOL)     PathFileExistsW(LPCWSTR pszPath);
  230. LWSTDAPI_(LPSTR)    PathFindExtensionA(LPCSTR pszPath);
  231. LWSTDAPI_(LPWSTR)   PathFindExtensionW(LPCWSTR pszPath);
  232. LWSTDAPI_(LPSTR)    PathFindFileNameA(LPCSTR pszPath);
  233. LWSTDAPI_(LPWSTR)   PathFindFileNameW(LPCWSTR pszPath);
  234. LWSTDAPI_(LPSTR)    PathFindNextComponentA(LPCSTR pszPath);
  235. LWSTDAPI_(LPWSTR)   PathFindNextComponentW(LPCWSTR pszPath);
  236. LWSTDAPI_(BOOL)     PathFindOnPathA(LPSTR pszPath, LPCSTR * ppszOtherDirs);
  237. LWSTDAPI_(BOOL)     PathFindOnPathW(LPWSTR pszPath, LPCWSTR * ppszOtherDirs);
  238. LWSTDAPI_(LPSTR)    PathGetArgsA(LPCSTR pszPath);
  239. LWSTDAPI_(LPWSTR)   PathGetArgsW(LPCWSTR pszPath);
  240.  
  241. LWSTDAPI_(UINT)     PathGetCharTypeA(UCHAR ch);
  242. LWSTDAPI_(UINT)     PathGetCharTypeW(WCHAR ch);
  243.  
  244. // Return flags for PathGetCharType
  245. #define GCT_INVALID             0x0000
  246. #define GCT_LFNCHAR             0x0001
  247. #define GCT_SHORTCHAR           0x0002
  248. #define GCT_WILD                0x0004
  249. #define GCT_SEPARATOR           0x0008
  250.  
  251. LWSTDAPI_(int)      PathGetDriveNumberA(LPCSTR pszPath);
  252. LWSTDAPI_(int)      PathGetDriveNumberW(LPCWSTR pszPath);
  253. LWSTDAPI_(BOOL)     PathIsDirectoryA(LPCSTR pszPath);
  254. LWSTDAPI_(BOOL)     PathIsDirectoryW(LPCWSTR pszPath);
  255. LWSTDAPI_(BOOL)     PathIsFileSpecA(LPCSTR pszPath);
  256. LWSTDAPI_(BOOL)     PathIsFileSpecW(LPCWSTR pszPath);
  257. LWSTDAPI_(BOOL)     PathIsPrefixA(LPCSTR pszPrefix, LPCSTR pszPath);
  258. LWSTDAPI_(BOOL)     PathIsPrefixW(LPCWSTR pszPrefix, LPCWSTR pszPath);
  259. LWSTDAPI_(BOOL)     PathIsRelativeA(LPCSTR pszPath);
  260. LWSTDAPI_(BOOL)     PathIsRelativeW(LPCWSTR pszPath);
  261. LWSTDAPI_(BOOL)     PathIsRootA(LPCSTR pszPath);
  262. LWSTDAPI_(BOOL)     PathIsRootW(LPCWSTR pszPath);
  263. LWSTDAPI_(BOOL)     PathIsSameRootA(LPCSTR pszPath1, LPCSTR pszPath2);
  264. LWSTDAPI_(BOOL)     PathIsSameRootW(LPCWSTR pszPath1, LPCWSTR pszPath2);
  265. LWSTDAPI_(BOOL)     PathIsUNCA(LPCSTR pszPath);
  266. LWSTDAPI_(BOOL)     PathIsUNCW(LPCWSTR pszPath);
  267. LWSTDAPI_(BOOL)     PathIsUNCServerA(LPCSTR pszPath);
  268. LWSTDAPI_(BOOL)     PathIsUNCServerW(LPCWSTR pszPath);
  269. LWSTDAPI_(BOOL)     PathIsUNCServerShareA(LPCSTR pszPath);
  270. LWSTDAPI_(BOOL)     PathIsUNCServerShareW(LPCWSTR pszPath);
  271. LWSTDAPI_(BOOL)     PathIsContentTypeA(LPCSTR pszPath, LPCSTR pszContentType);
  272. LWSTDAPI_(BOOL)     PathIsContentTypeW(LPCWSTR pszPath, LPCWSTR pszContentType);
  273. LWSTDAPI_(BOOL)     PathIsURLA(LPCSTR pszPath);
  274. LWSTDAPI_(BOOL)     PathIsURLW(LPCWSTR pszPath);
  275. LWSTDAPI_(BOOL)     PathMakePrettyA(LPSTR pszPath);
  276. LWSTDAPI_(BOOL)     PathMakePrettyW(LPWSTR pszPath);
  277. LWSTDAPI_(BOOL)     PathMatchSpecA(LPCSTR pszFile, LPCSTR pszSpec);
  278. LWSTDAPI_(BOOL)     PathMatchSpecW(LPCWSTR pszFile, LPCWSTR pszSpec);
  279. LWSTDAPI_(int)      PathParseIconLocationA(LPSTR pszIconFile);
  280. LWSTDAPI_(int)      PathParseIconLocationW(LPWSTR pszIconFile);
  281. LWSTDAPI_(void)     PathQuoteSpacesA(LPSTR lpsz);
  282. LWSTDAPI_(void)     PathQuoteSpacesW(LPWSTR lpsz);
  283. LWSTDAPI_(BOOL)     PathRelativePathToA(LPSTR pszPath, LPCSTR pszFrom, DWORD dwAttrFrom, LPCSTR pszTo, DWORD dwAttrTo);
  284. LWSTDAPI_(BOOL)     PathRelativePathToW(LPWSTR pszPath, LPCWSTR pszFrom, DWORD dwAttrFrom, LPCWSTR pszTo, DWORD dwAttrTo);
  285. LWSTDAPI_(void)     PathRemoveArgsA(LPSTR pszPath);
  286. LWSTDAPI_(void)     PathRemoveArgsW(LPWSTR pszPath);
  287. LWSTDAPI_(LPSTR)    PathRemoveBackslashA(LPSTR pszPath);
  288. LWSTDAPI_(LPWSTR)   PathRemoveBackslashW(LPWSTR pszPath);
  289. LWSTDAPI_(void)     PathRemoveBlanksA(LPSTR pszPath);
  290. LWSTDAPI_(void)     PathRemoveBlanksW(LPWSTR pszPath);
  291. LWSTDAPI_(void)     PathRemoveExtensionA(LPSTR pszPath);
  292. LWSTDAPI_(void)     PathRemoveExtensionW(LPWSTR pszPath);
  293. LWSTDAPI_(BOOL)     PathRemoveFileSpecA(LPSTR pszPath);
  294. LWSTDAPI_(BOOL)     PathRemoveFileSpecW(LPWSTR pszPath);
  295. LWSTDAPI_(BOOL)     PathRenameExtensionA(LPSTR pszPath, LPCSTR pszExt);
  296. LWSTDAPI_(BOOL)     PathRenameExtensionW(LPWSTR pszPath, LPCWSTR pszExt);
  297. LWSTDAPI_(BOOL)     PathSearchAndQualifyA(LPCSTR pszPath, LPSTR pszBuf, UINT cchBuf);
  298. LWSTDAPI_(BOOL)     PathSearchAndQualifyW(LPCWSTR pszPath, LPWSTR pszBuf, UINT cchBuf);
  299. LWSTDAPI_(void)     PathSetDlgItemPathA(HWND hDlg, int id, LPCSTR pszPath);
  300. LWSTDAPI_(void)     PathSetDlgItemPathW(HWND hDlg, int id, LPCWSTR pszPath);
  301. LWSTDAPI_(LPSTR)    PathSkipRootA(LPCSTR pszPath);
  302. LWSTDAPI_(LPWSTR)   PathSkipRootW(LPCWSTR pszPath);
  303. LWSTDAPI_(void)     PathStripPathA(LPSTR pszPath);
  304. LWSTDAPI_(void)     PathStripPathW(LPWSTR pszPath);
  305. LWSTDAPI_(BOOL)     PathStripToRootA(LPSTR pszPath);
  306. LWSTDAPI_(BOOL)     PathStripToRootW(LPWSTR pszPath);
  307. LWSTDAPI_(void)     PathUnquoteSpacesA(LPSTR lpsz);
  308. LWSTDAPI_(void)     PathUnquoteSpacesW(LPWSTR lpsz);
  309. LWSTDAPI_(BOOL)     PathMakeSystemFolderA(LPCSTR pszPath);
  310. LWSTDAPI_(BOOL)     PathMakeSystemFolderW(LPCWSTR pszPath);
  311. LWSTDAPI_(BOOL)     PathUnmakeSystemFolderA(LPCSTR pszPath);
  312. LWSTDAPI_(BOOL)     PathUnmakeSystemFolderW(LPCWSTR pszPath);
  313. LWSTDAPI_(BOOL)     PathIsSystemFolderA(LPCSTR pszPath, DWORD dwAttrb);
  314. LWSTDAPI_(BOOL)     PathIsSystemFolderW(LPCWSTR pszPath, DWORD dwAttrb);
  315.  
  316.  
  317. #ifdef UNICODE
  318. #define PathAddBackslash        PathAddBackslashW
  319. #define PathAddExtension        PathAddExtensionW
  320. #define PathAppend              PathAppendW
  321. #define PathBuildRoot           PathBuildRootW
  322. #define PathCanonicalize        PathCanonicalizeW
  323. #define PathCombine             PathCombineW
  324. #define PathCompactPath         PathCompactPathW
  325. #define PathCompactPathEx       PathCompactPathExW
  326. #define PathCommonPrefix        PathCommonPrefixW
  327. #define PathFileExists          PathFileExistsW
  328. #define PathFindExtension       PathFindExtensionW
  329. #define PathFindFileName        PathFindFileNameW
  330. #define PathFindNextComponent   PathFindNextComponentW
  331. #define PathFindOnPath          PathFindOnPathW
  332. #define PathGetArgs             PathGetArgsW
  333. #define PathGetCharType         PathGetCharTypeW
  334. #define PathGetDriveNumber      PathGetDriveNumberW
  335. #define PathIsDirectory         PathIsDirectoryW
  336. #define PathIsFileSpec          PathIsFileSpecW
  337. #define PathIsPrefix            PathIsPrefixW
  338. #define PathIsRelative          PathIsRelativeW
  339. #define PathIsRoot              PathIsRootW
  340. #define PathIsSameRoot          PathIsSameRootW
  341. #define PathIsUNC               PathIsUNCW
  342. #define PathIsUNCServer         PathIsUNCServerW
  343. #define PathIsUNCServerShare    PathIsUNCServerShareW
  344. #define PathIsContentType       PathIsContentTypeW
  345. #define PathIsHTMLFile          PathIsHTMLFileW
  346. #define PathIsURL               PathIsURLW
  347. #define PathMakePretty          PathMakePrettyW
  348. #define PathMatchSpec           PathMatchSpecW
  349. #define PathParseIconLocation   PathParseIconLocationW
  350. #define PathQuoteSpaces         PathQuoteSpacesW
  351. #define PathRelativePathTo      PathRelativePathToW
  352. #define PathRemoveArgs          PathRemoveArgsW
  353. #define PathRemoveBackslash     PathRemoveBackslashW
  354. #define PathRemoveBlanks        PathRemoveBlanksW
  355. #define PathRemoveExtension     PathRemoveExtensionW
  356. #define PathRemoveFileSpec      PathRemoveFileSpecW
  357. #define PathRenameExtension     PathRenameExtensionW
  358. #define PathSearchAndQualify    PathSearchAndQualifyW
  359. #define PathSetDlgItemPath      PathSetDlgItemPathW
  360. #define PathSkipRoot            PathSkipRootW
  361. #define PathStripPath           PathStripPathW
  362. #define PathStripToRoot         PathStripToRootW
  363. #define PathUnquoteSpaces       PathUnquoteSpacesW
  364. #define PathMakeSystemFolder    PathMakeSystemFolderW
  365. #define PathUnmakeSystemFolder  PathUnmakeSystemFolderW
  366. #define PathIsSystemFolder      PathIsSystemFolderW
  367. #else
  368. #define PathAddBackslash        PathAddBackslashA
  369. #define PathAddExtension        PathAddExtensionA
  370. #define PathAppend              PathAppendA
  371. #define PathBuildRoot           PathBuildRootA
  372. #define PathCanonicalize        PathCanonicalizeA
  373. #define PathCombine             PathCombineA
  374. #define PathCompactPath         PathCompactPathA
  375. #define PathCompactPathEx       PathCompactPathExA
  376. #define PathCommonPrefix        PathCommonPrefixA
  377. #define PathFileExists          PathFileExistsA
  378. #define PathFindExtension       PathFindExtensionA
  379. #define PathFindFileName        PathFindFileNameA
  380. #define PathFindNextComponent   PathFindNextComponentA
  381. #define PathFindOnPath          PathFindOnPathA
  382. #define PathGetArgs             PathGetArgsA
  383. #define PathGetCharType         PathGetCharTypeA
  384. #define PathGetDriveNumber      PathGetDriveNumberA
  385. #define PathIsDirectory         PathIsDirectoryA
  386. #define PathIsFileSpec          PathIsFileSpecA
  387. #define PathIsPrefix            PathIsPrefixA
  388. #define PathIsRelative          PathIsRelativeA
  389. #define PathIsRoot              PathIsRootA
  390. #define PathIsSameRoot          PathIsSameRootA
  391. #define PathIsUNC               PathIsUNCA
  392. #define PathIsUNCServer         PathIsUNCServerA
  393. #define PathIsUNCServerShare    PathIsUNCServerShareA
  394. #define PathIsContentType       PathIsContentTypeA
  395. #define PathIsHTMLFile          PathIsHTMLFileA
  396. #define PathIsURL               PathIsURLA
  397. #define PathMakePretty          PathMakePrettyA
  398. #define PathMatchSpec           PathMatchSpecA
  399. #define PathParseIconLocation   PathParseIconLocationA
  400. #define PathQuoteSpaces         PathQuoteSpacesA
  401. #define PathRelativePathTo      PathRelativePathToA
  402. #define PathRemoveArgs          PathRemoveArgsA
  403. #define PathRemoveBackslash     PathRemoveBackslashA
  404. #define PathRemoveBlanks        PathRemoveBlanksA
  405. #define PathRemoveExtension     PathRemoveExtensionA
  406. #define PathRemoveFileSpec      PathRemoveFileSpecA
  407. #define PathRenameExtension     PathRenameExtensionA
  408. #define PathSearchAndQualify    PathSearchAndQualifyA
  409. #define PathSetDlgItemPath      PathSetDlgItemPathA
  410. #define PathSkipRoot            PathSkipRootA
  411. #define PathStripPath           PathStripPathA
  412. #define PathStripToRoot         PathStripToRootA
  413. #define PathUnquoteSpaces       PathUnquoteSpacesA
  414. #define PathMakeSystemFolder    PathMakeSystemFolderA
  415. #define PathUnmakeSystemFolder  PathUnmakeSystemFolderA
  416. #define PathIsSystemFolder      PathIsSystemFolderA
  417. #endif
  418.  
  419.  
  420.  
  421. #endif //  NO_SHLWAPI_PATH
  422.  
  423.  
  424. #ifndef NO_SHLWAPI_REG
  425. //
  426. //=============== Registry Routines ===================================
  427. //
  428.  
  429. // SHDeleteEmptyKey mimics RegDeleteKey as it behaves on NT.
  430. // SHDeleteKey mimics RegDeleteKey as it behaves on Win95.
  431.  
  432. LWSTDAPI_(DWORD)    SHDeleteEmptyKeyA(HKEY hkey, LPCSTR pszSubKey);
  433. LWSTDAPI_(DWORD)    SHDeleteEmptyKeyW(HKEY hkey, LPCWSTR pszSubKey);
  434. LWSTDAPI_(DWORD)    SHDeleteKeyA(HKEY hkey, LPCSTR pszSubKey);
  435. LWSTDAPI_(DWORD)    SHDeleteKeyW(HKEY hkey, LPCWSTR pszSubKey);
  436.  
  437.  
  438. // These functions open the key, get/set/delete the value, then close
  439. // the key.
  440.  
  441. LWSTDAPI_(DWORD)    SHDeleteValueA(HKEY hkey, LPCSTR pszSubKey, LPCSTR pszValue);
  442. LWSTDAPI_(DWORD)    SHDeleteValueW(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue);
  443. LWSTDAPI_(DWORD)    SHGetValueA(HKEY hkey, LPCSTR pszSubKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  444. LWSTDAPI_(DWORD)    SHGetValueW(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  445. LWSTDAPI_(DWORD)    SHSetValueA(HKEY hkey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwType, LPCVOID pvData, DWORD cbData);
  446. LWSTDAPI_(DWORD)    SHSetValueW(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwType, LPCVOID pvData, DWORD cbData);
  447.  
  448. // These functions work just like RegQueryValueEx, except if the
  449. // data type is REG_EXPAND_SZ, then these will go ahead and expand
  450. // out the string.  *pdwType will always be massaged to REG_SZ
  451. // if this happens.  REG_SZ values are also guaranteed to be null
  452. // terminated.
  453.  
  454. LWSTDAPI_(DWORD)    SHQueryValueExA(HKEY hkey, LPCSTR pszValue, LPDWORD pdwReserved, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  455. LWSTDAPI_(DWORD)    SHQueryValueExW(HKEY hkey, LPCWSTR pszValue, LPDWORD pdwReserved, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  456.  
  457. // Enumeration functions support.
  458.  
  459. LWSTDAPI_(LONG)     SHEnumKeyExA(HKEY hkey, DWORD dwIndex, LPSTR pszName, LPDWORD pcchName);
  460. LWSTDAPI_(LONG)     SHEnumKeyExW(HKEY hkey, DWORD dwIndex, LPWSTR pszName, LPDWORD pcchName);
  461. LWSTDAPI_(LONG)     SHEnumValueA(HKEY hkey, DWORD dwIndex, LPSTR pszValueName, LPDWORD pcchValueName, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  462. LWSTDAPI_(LONG)     SHEnumValueW(HKEY hkey, DWORD dwIndex, LPWSTR pszValueName, LPDWORD pcchValueName, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
  463. LWSTDAPI_(LONG)     SHQueryInfoKeyA(HKEY hkey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen);
  464. LWSTDAPI_(LONG)     SHQueryInfoKeyW(HKEY hkey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen);
  465.  
  466. #ifdef UNICODE
  467. #define SHDeleteEmptyKey      SHDeleteEmptyKeyW
  468. #define SHDeleteKey           SHDeleteKeyW
  469. #define SHDeleteValue         SHDeleteValueW
  470. #define SHGetValue            SHGetValueW
  471. #define SHSetValue            SHSetValueW
  472. #define SHQueryValueEx        SHQueryValueExW
  473. #define SHEnumKeyEx           SHEnumKeyExW
  474. #define SHEnumValue           SHEnumValueW
  475. #define SHQueryInfoKey        SHQueryInfoKeyW
  476. #else
  477. #define SHDeleteEmptyKey      SHDeleteEmptyKeyA
  478. #define SHDeleteKey           SHDeleteKeyA
  479. #define SHDeleteValue         SHDeleteValueA
  480. #define SHGetValue            SHGetValueA
  481. #define SHSetValue            SHSetValueA
  482. #define SHQueryValueEx        SHQueryValueExA
  483. #define SHEnumKeyEx           SHEnumKeyExA
  484. #define SHEnumValue           SHEnumValueA
  485. #define SHQueryInfoKey        SHQueryInfoKeyA
  486. #endif
  487.  
  488.  
  489. //////////////////////////////////////////////
  490. // User Specific Registry Access Functions
  491. //////////////////////////////////////////////
  492.  
  493. //
  494. // Type definitions.
  495. //
  496.  
  497. typedef enum
  498. {
  499.     SHREGDEL_DEFAULT = 0x00000000,       // Delete's HKCU, or HKLM if HKCU is not found.
  500.     SHREGDEL_HKCU    = 0x00000001,       // Delete HKCU only
  501.     SHREGDEL_HKLM    = 0x00000010,       // Delete HKLM only.
  502.     SHREGDEL_BOTH    = 0x00000011,       // Delete both HKCU and HKLM.
  503. } SHREGDEL_FLAGS;
  504.  
  505. typedef enum
  506. {
  507.     SHREGENUM_DEFAULT = 0x00000000,       // Enumerates HKCU or HKLM if not found.
  508.     SHREGENUM_HKCU    = 0x00000001,       // Enumerates HKCU only
  509.     SHREGENUM_HKLM    = 0x00000010,       // Enumerates HKLM only.
  510.     SHREGENUM_BOTH    = 0x00000011,       // Enumerates both HKCU and HKLM without duplicates.
  511.                                           // This option is NYI.
  512. } SHREGENUM_FLAGS;
  513.  
  514. #define     SHREGSET_HKCU           0x00000001       // Write to HKCU if empty.
  515. #define     SHREGSET_FORCE_HKCU     0x00000002       // Write to HKCU.
  516. #define     SHREGSET_HKLM           0x00000004       // Write to HKLM if empty.
  517. #define     SHREGSET_FORCE_HKLM     0x00000008       // Write to HKLM.
  518. #define     SHREGSET_DEFAULT        (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)          // Default is SHREGSET_FORCE_HKCU | SHREGSET_HKLM.
  519.  
  520. typedef HANDLE HUSKEY;  // HUSKEY is a Handle to a User Specific KEY.
  521. typedef HUSKEY *PHUSKEY;
  522.  
  523. LWSTDAPI_(LONG)        SHRegCreateUSKeyA(LPCSTR pszPath, REGSAM samDesired, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, DWORD dwFlags);
  524. LWSTDAPI_(LONG)        SHRegCreateUSKeyW(LPCWSTR pwzPath, REGSAM samDesired, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, DWORD dwFlags);
  525. LWSTDAPI_(LONG)        SHRegOpenUSKeyA(LPCSTR pszPath, REGSAM samDesired, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU);
  526. LWSTDAPI_(LONG)        SHRegOpenUSKeyW(LPCWSTR pwzPath, REGSAM samDesired, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU);
  527. LWSTDAPI_(LONG)        SHRegQueryUSValueA(HUSKEY hUSKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize);
  528. LWSTDAPI_(LONG)        SHRegQueryUSValueW(HUSKEY hUSKey, LPCWSTR pwzValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize);
  529. LWSTDAPI_(LONG)        SHRegWriteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags);
  530. LWSTDAPI_(LONG)        SHRegWriteUSValueW(HUSKEY hUSKey, LPCWSTR pwzValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags);
  531. LWSTDAPI_(LONG)        SHRegDeleteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, SHREGDEL_FLAGS delRegFlags);
  532. LWSTDAPI_(LONG)        SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey, LPCWSTR pwzSubKey, SHREGDEL_FLAGS delRegFlags);
  533. LWSTDAPI_(LONG)        SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey, LPCSTR pszSubKey, SHREGDEL_FLAGS delRegFlags);
  534. LWSTDAPI_(LONG)        SHRegDeleteUSValueW(HUSKEY hUSKey, LPCWSTR pwzValue, SHREGDEL_FLAGS delRegFlags);
  535. LWSTDAPI_(LONG)        SHRegEnumUSKeyA(HUSKEY hUSKey, DWORD dwIndex, LPSTR pszName, LPDWORD pcchName, SHREGENUM_FLAGS enumRegFlags);
  536. LWSTDAPI_(LONG)        SHRegEnumUSKeyW(HUSKEY hUSKey, DWORD dwIndex, LPWSTR pwzName, LPDWORD pcchName, SHREGENUM_FLAGS enumRegFlags);
  537. LWSTDAPI_(LONG)        SHRegEnumUSValueA(HUSKEY hUSkey, DWORD dwIndex, LPSTR pszValueName, LPDWORD pcchValueName, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags);
  538. LWSTDAPI_(LONG)        SHRegEnumUSValueW(HUSKEY hUSkey, DWORD dwIndex, LPWSTR pszValueName, LPDWORD pcchValueName, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags);
  539. LWSTDAPI_(LONG)        SHRegQueryInfoUSKeyA(HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags);
  540. LWSTDAPI_(LONG)        SHRegQueryInfoUSKeyW(HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags);
  541. LWSTDAPI_(LONG)        SHRegCloseUSKey(HUSKEY hUSKey);
  542.  
  543.  
  544. // These calls are equal to an SHRegOpenUSKey, SHRegQueryUSValue, and then a SHRegCloseUSKey.
  545. LWSTDAPI_(LONG)        SHRegGetUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID  pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize);
  546. LWSTDAPI_(LONG)        SHRegGetUSValueW(LPCWSTR pwzSubKey, LPCWSTR pwzValue, LPDWORD pdwType, LPVOID  pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize);
  547. LWSTDAPI_(LONG)        SHRegSetUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags);
  548. LWSTDAPI_(LONG)        SHRegSetUSValueW(LPCWSTR pwzSubKey, LPCWSTR pwzValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags);
  549.  
  550. #ifdef UNICODE
  551. #define SHRegCreateUSKey        SHRegCreateUSKeyW
  552. #define SHRegOpenUSKey          SHRegOpenUSKeyW
  553. #define SHRegQueryUSValue       SHRegQueryUSValueW
  554. #define SHRegWriteUSValue       SHRegWriteUSValueW
  555. #define SHRegDeleteUSValue      SHRegDeleteUSValueW
  556. #define SHRegDeleteEmptyUSKey   SHRegDeleteEmptyUSKeyW
  557. #define SHRegEnumUSKey          SHRegEnumUSKeyW
  558. #define SHRegEnumUSValue        SHRegEnumUSValueW
  559. #define SHRegQueryInfoUSKey     SHRegQueryInfoUSKeyW
  560. #define SHRegGetUSValue         SHRegGetUSValueW
  561. #define SHRegSetUSValue         SHRegSetUSValueW
  562. #else
  563. #define SHRegCreateUSKey        SHRegCreateUSKeyA
  564. #define SHRegOpenUSKey          SHRegOpenUSKeyA
  565. #define SHRegQueryUSValue       SHRegQueryUSValueA
  566. #define SHRegWriteUSValue       SHRegWriteUSValueA
  567. #define SHRegDeleteUSValue      SHRegDeleteUSValueA
  568. #define SHRegDeleteEmptyUSKey   SHRegDeleteEmptyUSKeyA
  569. #define SHRegEnumUSKey          SHRegEnumUSKeyA
  570. #define SHRegEnumUSValue        SHRegEnumUSValueA
  571. #define SHRegQueryInfoUSKey     SHRegQueryInfoUSKeyA
  572. #define SHRegGetUSValue         SHRegGetUSValueA
  573. #define SHRegSetUSValue         SHRegSetUSValueA
  574. #endif
  575.  
  576. LWSTDAPI_(BOOL)        SHRegGetBoolUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault);
  577. LWSTDAPI_(BOOL)        SHRegGetBoolUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault);
  578.  
  579. #ifdef UNICODE
  580. #define SHRegGetBoolUSValue SHRegGetBoolUSValueW
  581. #else
  582. #define SHRegGetBoolUSValue SHRegGetBoolUSValueA
  583. #endif
  584.  
  585.  
  586. #endif //  NO_SHLWAPI_REG
  587.  
  588.  
  589.  
  590. #ifndef NO_SHLWAPI_STREAM
  591. //
  592. //=============== Stream Routines ===================================
  593. //
  594.  
  595. #ifdef __IStream_INTERFACE_DEFINED__
  596. LWSTDAPI_(IStream *)    SHOpenRegStreamA(HKEY hkey, LPCSTR pszSubkey, LPCSTR pszValue, DWORD grfMode);
  597. LWSTDAPI_(IStream *)    SHOpenRegStreamW(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD grfMode);
  598. #ifdef UNICODE
  599. #define SHOpenRegStream  SHOpenRegStreamW
  600. #else
  601. #define SHOpenRegStream  SHOpenRegStreamA
  602. #endif // !UNICODE
  603.  
  604.  
  605. #endif
  606.  
  607. #endif // NO_SHLWAPI_STREAM
  608.  
  609.  
  610.  
  611. #ifndef NO_SHLWAPI_GDI
  612. //
  613. //====== GDI helper functions  ================================================
  614. //
  615.  
  616. LWSTDAPI_(HPALETTE) SHCreateShellPalette(HDC hdc);
  617.  
  618. #endif // NO_SHLWAPI_GDI
  619.  
  620.  
  621. //
  622. //====== DllGetVersion  =======================================================
  623. //
  624.  
  625. typedef struct _DllVersionInfo
  626. {
  627.         DWORD cbSize;
  628.         DWORD dwMajorVersion;                   // Major version
  629.         DWORD dwMinorVersion;                   // Minor version
  630.         DWORD dwBuildNumber;                    // Build number
  631.         DWORD dwPlatformID;                     // DLLVER_PLATFORM_*
  632. } DLLVERSIONINFO;
  633.  
  634. // Platform IDs for DLLVERSIONINFO
  635. #define DLLVER_PLATFORM_WINDOWS         0x00000001      // Windows 95
  636. #define DLLVER_PLATFORM_NT              0x00000002      // Windows NT
  637.  
  638. //
  639. // The caller should always GetProcAddress("DllGetVersion"), not
  640. // implicitly link to it.
  641. //
  642.  
  643. typedef HRESULT (CALLBACK* DLLGETVERSIONPROC)(DLLVERSIONINFO *);
  644.  
  645. // DllInstall (to be implemented by self-installing DLLs)
  646. STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine);
  647.  
  648.  
  649. #ifdef __cplusplus
  650. }
  651. #endif
  652.  
  653. #ifdef _WIN32
  654. #include <poppack.h>
  655. #endif
  656.  
  657. #endif
  658.  
  659.  
  660. #endif  // _INC_SHLWAPI
  661.  
  662.