home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / RTLWIN32.PAK / SHELLAPI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  16.5 KB  |  523 lines

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * shellapi.h -  SHELL.DLL functions, types, and definitions                   *
  4. *                                                                             *
  5. * Copyright (c) 1992-1996, Microsoft Corp.  All rights reserved               *
  6. *                                                                             *
  7. \*****************************************************************************/
  8.  
  9. #ifndef _INC_SHELLAPI
  10. #define _INC_SHELLAPI
  11. #pragma option -b
  12.  
  13.  
  14.  
  15. //
  16. // Define API decoration for direct importing of DLL references.
  17. //
  18. #ifndef WINSHELLAPI
  19. #if !defined(_SHELL32_)
  20. #define WINSHELLAPI DECLSPEC_IMPORT
  21. #else
  22. #define WINSHELLAPI
  23. #endif
  24. #endif // WINSHELLAPI
  25.  
  26. #pragma option -b.
  27. #include <pshpack1.h>
  28. #pragma option -b
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {            /* Assume C declarations for C++ */
  32. #endif  /* __cplusplus */
  33.  
  34.  
  35.  
  36. DECLARE_HANDLE(HDROP);
  37.  
  38. WINSHELLAPI UINT APIENTRY DragQueryFileA(HDROP,UINT,LPSTR,UINT);
  39. WINSHELLAPI UINT APIENTRY DragQueryFileW(HDROP,UINT,LPWSTR,UINT);
  40. #ifdef UNICODE
  41. #define DragQueryFile  DragQueryFileW
  42. #else
  43. #define DragQueryFile  DragQueryFileA
  44. #endif // !UNICODE
  45. WINSHELLAPI BOOL APIENTRY DragQueryPoint(HDROP,LPPOINT);
  46. WINSHELLAPI VOID APIENTRY DragFinish(HDROP);
  47. WINSHELLAPI VOID APIENTRY DragAcceptFiles(HWND,BOOL);
  48.  
  49. WINSHELLAPI HINSTANCE APIENTRY ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
  50. WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);
  51. #ifdef UNICODE
  52. #define ShellExecute  ShellExecuteW
  53. #else
  54. #define ShellExecute  ShellExecuteA
  55. #endif // !UNICODE
  56. WINSHELLAPI HINSTANCE APIENTRY FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult);
  57. WINSHELLAPI HINSTANCE APIENTRY FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult);
  58. #ifdef UNICODE
  59. #define FindExecutable  FindExecutableW
  60. #else
  61. #define FindExecutable  FindExecutableA
  62. #endif // !UNICODE
  63. WINSHELLAPI LPWSTR *  APIENTRY CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs);
  64.  
  65. WINSHELLAPI INT       APIENTRY ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon);
  66. WINSHELLAPI INT       APIENTRY ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon);
  67. #ifdef UNICODE
  68. #define ShellAbout  ShellAboutW
  69. #else
  70. #define ShellAbout  ShellAboutA
  71. #endif // !UNICODE
  72. WINSHELLAPI HICON     APIENTRY ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon);
  73. WINSHELLAPI HICON     APIENTRY ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon);
  74. #ifdef UNICODE
  75. #define ExtractAssociatedIcon  ExtractAssociatedIconW
  76. #else
  77. #define ExtractAssociatedIcon  ExtractAssociatedIconA
  78. #endif // !UNICODE
  79.  
  80. WINSHELLAPI HICON     APIENTRY ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex);
  81. WINSHELLAPI HICON     APIENTRY ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex);
  82. #ifdef UNICODE
  83. #define ExtractIcon  ExtractIconW
  84. #else
  85. #define ExtractIcon  ExtractIconA
  86. #endif // !UNICODE
  87.  
  88. #if(WINVER >= 0x0400)
  89.  
  90. ////
  91. //// AppBar stuff
  92. ////
  93. #define ABM_NEW           0x00000000
  94. #define ABM_REMOVE        0x00000001
  95. #define ABM_QUERYPOS      0x00000002
  96. #define ABM_SETPOS        0x00000003
  97. #define ABM_GETSTATE      0x00000004
  98. #define ABM_GETTASKBARPOS 0x00000005
  99. #define ABM_ACTIVATE      0x00000006  // lParam == TRUE/FALSE means activate/deactivate
  100. #define ABM_GETAUTOHIDEBAR 0x00000007
  101. #define ABM_SETAUTOHIDEBAR 0x00000008  // this can fail at any time.  MUST check the result
  102.                                         // lParam = TRUE/FALSE  Set/Unset
  103.                                         // uEdge = what edge
  104. #define ABM_WINDOWPOSCHANGED 0x0000009
  105.  
  106.  
  107. // these are put in the wparam of callback messages
  108. #define ABN_STATECHANGE    0x0000000
  109. #define ABN_POSCHANGED     0x0000001
  110. #define ABN_FULLSCREENAPP  0x0000002
  111. #define ABN_WINDOWARRANGE  0x0000003 // lParam == TRUE means hide
  112.  
  113. // flags for get state
  114. #define ABS_AUTOHIDE    0x0000001
  115. #define ABS_ALWAYSONTOP 0x0000002
  116.  
  117. #define ABE_LEFT        0
  118. #define ABE_TOP         1
  119. #define ABE_RIGHT       2
  120. #define ABE_BOTTOM      3
  121.  
  122. typedef struct _AppBarData
  123. {
  124.     DWORD cbSize;
  125.     HWND hWnd;
  126.     UINT uCallbackMessage;
  127.     UINT uEdge;
  128.     RECT rc;
  129.     LPARAM lParam; // message specific
  130. } APPBARDATA, *PAPPBARDATA;
  131.  
  132. WINSHELLAPI UINT APIENTRY SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData);
  133.  
  134. ////
  135. ////  EndAppBar
  136. ////
  137.  
  138.  
  139.  
  140.  
  141. #define EIRESID(x) (-1 * (int)(x))
  142. WINSHELLAPI UINT WINAPI ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons);
  143. WINSHELLAPI UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons);
  144. #ifdef UNICODE
  145. #define ExtractIconEx  ExtractIconExW
  146. #else
  147. #define ExtractIconEx  ExtractIconExA
  148. #endif // !UNICODE
  149.  
  150.  
  151.  
  152. ////
  153. //// Shell File Operations
  154. ////
  155.  
  156. #ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h
  157.  
  158. #define FO_MOVE           0x0001
  159. #define FO_COPY           0x0002
  160. #define FO_DELETE         0x0003
  161. #define FO_RENAME         0x0004
  162.  
  163. #define FOF_MULTIDESTFILES         0x0001
  164. #define FOF_CONFIRMMOUSE           0x0002
  165. #define FOF_SILENT                 0x0004  // don't create progress/report
  166. #define FOF_RENAMEONCOLLISION      0x0008
  167. #define FOF_NOCONFIRMATION         0x0010  // Don't prompt the user.
  168. #define FOF_WANTMAPPINGHANDLE      0x0020  // Fill in SHFILEOPSTRUCT.hNameMappings
  169.                                       // Must be freed using SHFreeNameMappings
  170. #define FOF_ALLOWUNDO              0x0040
  171. #define FOF_FILESONLY              0x0080  // on *.*, do only files
  172. #define FOF_SIMPLEPROGRESS         0x0100  // means don't show names of files
  173. #define FOF_NOCONFIRMMKDIR         0x0200  // don't confirm making any needed dirs
  174. #define FOF_NOERRORUI              0x0400  // don't put up error UI
  175. typedef WORD FILEOP_FLAGS;
  176.  
  177. #define PO_DELETE       0x0013  // printer is being deleted
  178. #define PO_RENAME       0x0014  // printer is being renamed
  179. #define PO_PORTCHANGE   0x0020  // port this printer connected to is being changed
  180.                                 // if this id is set, the strings received by
  181.                                 // the copyhook are a doubly-null terminated
  182.                                 // list of strings.  The first is the printer
  183.                                 // name and the second is the printer port.
  184. #define PO_REN_PORT     0x0034  // PO_RENAME and PO_PORTCHANGE at same time.
  185.  
  186. // no POF_ flags currently defined
  187.  
  188. typedef WORD PRINTEROP_FLAGS;
  189.  
  190. #endif // FO_MOVE
  191.  
  192. // implicit parameters are:
  193. //      if pFrom or pTo are unqualified names the current directories are
  194. //      taken from the global current drive/directory settings managed
  195. //      by Get/SetCurrentDrive/Directory
  196. //
  197. //      the global confirmation settings
  198.  
  199. typedef struct _SHFILEOPSTRUCTA
  200. {
  201.         HWND            hwnd;
  202.         UINT            wFunc;
  203.         LPCSTR          pFrom;
  204.         LPCSTR          pTo;
  205.         FILEOP_FLAGS    fFlags;
  206.         BOOL            fAnyOperationsAborted;
  207.         LPVOID          hNameMappings;
  208.         LPCSTR           lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS
  209. } SHFILEOPSTRUCTA, FAR *LPSHFILEOPSTRUCTA;
  210. typedef struct _SHFILEOPSTRUCTW
  211. {
  212.         HWND            hwnd;
  213.         UINT            wFunc;
  214.         LPCWSTR         pFrom;
  215.         LPCWSTR         pTo;
  216.         FILEOP_FLAGS    fFlags;
  217.         BOOL            fAnyOperationsAborted;
  218.         LPVOID          hNameMappings;
  219.         LPCWSTR          lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS
  220. } SHFILEOPSTRUCTW, FAR *LPSHFILEOPSTRUCTW;
  221. #ifdef UNICODE
  222. typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT;
  223. typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT;
  224. #else
  225. typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT;
  226. typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT;
  227. #endif // UNICODE
  228.  
  229. WINSHELLAPI int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp);
  230. WINSHELLAPI int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp);
  231. #ifdef UNICODE
  232. #define SHFileOperation  SHFileOperationW
  233. #else
  234. #define SHFileOperation  SHFileOperationA
  235. #endif // !UNICODE
  236.  
  237. WINSHELLAPI void WINAPI SHFreeNameMappings(HANDLE hNameMappings);
  238.  
  239. typedef struct _SHNAMEMAPPINGA
  240. {
  241.     LPSTR   pszOldPath;
  242.     LPSTR   pszNewPath;
  243.     int   cchOldPath;
  244.     int   cchNewPath;
  245. } SHNAMEMAPPINGA, FAR *LPSHNAMEMAPPINGA;
  246. typedef struct _SHNAMEMAPPINGW
  247. {
  248.     LPWSTR  pszOldPath;
  249.     LPWSTR  pszNewPath;
  250.     int   cchOldPath;
  251.     int   cchNewPath;
  252. } SHNAMEMAPPINGW, FAR *LPSHNAMEMAPPINGW;
  253. #ifdef UNICODE
  254. typedef SHNAMEMAPPINGW SHNAMEMAPPING;
  255. typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING;
  256. #else
  257. typedef SHNAMEMAPPINGA SHNAMEMAPPING;
  258. typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING;
  259. #endif // UNICODE
  260.  
  261.  
  262. ////
  263. //// End Shell File Operations
  264. ////
  265.  
  266. ////
  267. ////  Begin ShellExecuteEx and family
  268. ////
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278. /* ShellExecute() and ShellExecuteEx() error codes */
  279.  
  280. /* regular WinExec() codes */
  281. #define SE_ERR_FNF              2       // file not found
  282. #define SE_ERR_PNF              3       // path not found
  283. #define SE_ERR_ACCESSDENIED     5       // access denied
  284. #define SE_ERR_OOM              8       // out of memory
  285. #define SE_ERR_DLLNOTFOUND              32
  286.  
  287. #endif /* WINVER >= 0x0400 */
  288.  
  289. /* error values for ShellExecute() beyond the regular WinExec() codes */
  290. #define SE_ERR_SHARE                    26
  291. #define SE_ERR_ASSOCINCOMPLETE          27
  292. #define SE_ERR_DDETIMEOUT               28
  293. #define SE_ERR_DDEFAIL                  29
  294. #define SE_ERR_DDEBUSY                  30
  295. #define SE_ERR_NOASSOC                  31
  296.  
  297. #if(WINVER >= 0x0400)
  298.  
  299.  
  300.  
  301. // Note CLASSKEY overrides CLASSNAME
  302. #define SEE_MASK_CLASSNAME      0x00000001
  303. #define SEE_MASK_CLASSKEY       0x00000003
  304. // Note INVOKEIDLIST overrides IDLIST
  305. #define SEE_MASK_IDLIST         0x00000004
  306. #define SEE_MASK_INVOKEIDLIST   0x0000000c
  307. #define SEE_MASK_ICON           0x00000010
  308. #define SEE_MASK_HOTKEY         0x00000020
  309. #define SEE_MASK_NOCLOSEPROCESS 0x00000040
  310. #define SEE_MASK_CONNECTNETDRV  0x00000080
  311. #define SEE_MASK_FLAG_DDEWAIT   0x00000100
  312. #define SEE_MASK_DOENVSUBST     0x00000200
  313. #define SEE_MASK_FLAG_NO_UI     0x00000400
  314. #define SEE_MASK_UNICODE        0x00004000
  315. #define SEE_MASK_NO_CONSOLE     0x00008000
  316. #define SEE_MASK_ASYNCOK        0x00100000
  317.  
  318. typedef struct _SHELLEXECUTEINFOA
  319. {
  320.         DWORD cbSize;
  321.         ULONG fMask;
  322.         HWND hwnd;
  323.         LPCSTR   lpVerb;
  324.         LPCSTR   lpFile;
  325.         LPCSTR   lpParameters;
  326.         LPCSTR   lpDirectory;
  327.         int nShow;
  328.         HINSTANCE hInstApp;
  329.         // Optional fields
  330.         LPVOID lpIDList;
  331.         LPCSTR   lpClass;
  332.         HKEY hkeyClass;
  333.         DWORD dwHotKey;
  334.         HANDLE hIcon;
  335.         HANDLE hProcess;
  336. } SHELLEXECUTEINFOA, FAR *LPSHELLEXECUTEINFOA;
  337. typedef struct _SHELLEXECUTEINFOW
  338. {
  339.         DWORD cbSize;
  340.         ULONG fMask;
  341.         HWND hwnd;
  342.         LPCWSTR  lpVerb;
  343.         LPCWSTR  lpFile;
  344.         LPCWSTR  lpParameters;
  345.         LPCWSTR  lpDirectory;
  346.         int nShow;
  347.         HINSTANCE hInstApp;
  348.         // Optional fields
  349.         LPVOID lpIDList;
  350.         LPCWSTR  lpClass;
  351.         HKEY hkeyClass;
  352.         DWORD dwHotKey;
  353.         HANDLE hIcon;
  354.         HANDLE hProcess;
  355. } SHELLEXECUTEINFOW, FAR *LPSHELLEXECUTEINFOW;
  356. #ifdef UNICODE
  357. typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO;
  358. typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO;
  359. #else
  360. typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO;
  361. typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO;
  362. #endif // UNICODE
  363.  
  364. WINSHELLAPI BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);
  365. WINSHELLAPI BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
  366. #ifdef UNICODE
  367. #define ShellExecuteEx  ShellExecuteExW
  368. #else
  369. #define ShellExecuteEx  ShellExecuteExA
  370. #endif // !UNICODE
  371.  
  372. ////
  373. ////  End ShellExecuteEx and family
  374. ////
  375.  
  376.  
  377. ////
  378. //// Tray notification definitions
  379. ////
  380.  
  381. typedef struct _NOTIFYICONDATAA {
  382.         DWORD cbSize;
  383.         HWND hWnd;
  384.         UINT uID;
  385.         UINT uFlags;
  386.         UINT uCallbackMessage;
  387.         HICON hIcon;
  388.         CHAR   szTip[64];
  389. } NOTIFYICONDATAA, *PNOTIFYICONDATAA;
  390. typedef struct _NOTIFYICONDATAW {
  391.         DWORD cbSize;
  392.         HWND hWnd;
  393.         UINT uID;
  394.         UINT uFlags;
  395.         UINT uCallbackMessage;
  396.         HICON hIcon;
  397.         WCHAR  szTip[64];
  398. } NOTIFYICONDATAW, *PNOTIFYICONDATAW;
  399. #ifdef UNICODE
  400. typedef NOTIFYICONDATAW NOTIFYICONDATA;
  401. typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
  402. #else
  403. typedef NOTIFYICONDATAA NOTIFYICONDATA;
  404. typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
  405. #endif // UNICODE
  406.  
  407.  
  408. #define NIM_ADD         0x00000000
  409. #define NIM_MODIFY      0x00000001
  410. #define NIM_DELETE      0x00000002
  411.  
  412. #define NIF_MESSAGE     0x00000001
  413. #define NIF_ICON        0x00000002
  414. #define NIF_TIP         0x00000004
  415.  
  416. WINSHELLAPI BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
  417. WINSHELLAPI BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
  418. #ifdef UNICODE
  419. #define Shell_NotifyIcon  Shell_NotifyIconW
  420. #else
  421. #define Shell_NotifyIcon  Shell_NotifyIconA
  422. #endif // !UNICODE
  423.  
  424. ////
  425. //// End Tray Notification Icons
  426. ////
  427.  
  428.  
  429.  
  430. ////
  431. //// Begin SHGetFileInfo
  432. ////
  433.  
  434. /*
  435.  * The SHGetFileInfo API provides an easy way to get attributes
  436.  * for a file given a pathname.
  437.  *
  438.  *   PARAMETERS
  439.  *
  440.  *     pszPath              file name to get info about
  441.  *     dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES
  442.  *     psfi                 place to return file info
  443.  *     cbFileInfo           size of structure
  444.  *     uFlags               flags
  445.  *
  446.  *   RETURN
  447.  *     TRUE if things worked
  448.  */
  449.  
  450. typedef struct _SHFILEINFOA
  451. {
  452.         HICON       hIcon;                      // out: icon
  453.         int         iIcon;                      // out: icon index
  454.         DWORD       dwAttributes;               // out: SFGAO_ flags
  455.         CHAR        szDisplayName[MAX_PATH];    // out: display name (or path)
  456.         CHAR        szTypeName[80];             // out: type name
  457. } SHFILEINFOA;
  458. typedef struct _SHFILEINFOW
  459. {
  460.         HICON       hIcon;                      // out: icon
  461.         int         iIcon;                      // out: icon index
  462.         DWORD       dwAttributes;               // out: SFGAO_ flags
  463.         WCHAR       szDisplayName[MAX_PATH];    // out: display name (or path)
  464.         WCHAR       szTypeName[80];             // out: type name
  465. } SHFILEINFOW;
  466. #ifdef UNICODE
  467. typedef SHFILEINFOW SHFILEINFO;
  468. #else
  469. typedef SHFILEINFOA SHFILEINFO;
  470. #endif // UNICODE
  471.  
  472. #define SHGFI_ICON              0x000000100     // get icon
  473. #define SHGFI_DISPLAYNAME       0x000000200     // get display name
  474. #define SHGFI_TYPENAME          0x000000400     // get type name
  475. #define SHGFI_ATTRIBUTES        0x000000800     // get attributes
  476. #define SHGFI_ICONLOCATION      0x000001000     // get icon location
  477. #define SHGFI_EXETYPE           0x000002000     // return exe type
  478. #define SHGFI_SYSICONINDEX      0x000004000     // get system icon index
  479. #define SHGFI_LINKOVERLAY       0x000008000     // put a link overlay on icon
  480. #define SHGFI_SELECTED          0x000010000     // show icon in selected state
  481. #define SHGFI_LARGEICON         0x000000000     // get large icon
  482. #define SHGFI_SMALLICON         0x000000001     // get small icon
  483. #define SHGFI_OPENICON          0x000000002     // get open icon
  484. #define SHGFI_SHELLICONSIZE     0x000000004     // get shell size icon
  485. #define SHGFI_PIDL              0x000000008     // pszPath is a pidl
  486. #define SHGFI_USEFILEATTRIBUTES 0x000000010     // use passed dwFileAttribute
  487.  
  488. WINSHELLAPI DWORD WINAPI SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA FAR *psfi, UINT cbFileInfo, UINT uFlags);
  489. WINSHELLAPI DWORD WINAPI SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW FAR *psfi, UINT cbFileInfo, UINT uFlags);
  490. #ifdef UNICODE
  491. #define SHGetFileInfo  SHGetFileInfoW
  492. #else
  493. #define SHGetFileInfo  SHGetFileInfoA
  494. #endif // !UNICODE
  495.  
  496.  
  497. #define SHGNLI_PIDL             0x000000001     // pszLinkTo is a pidl
  498. #define SHGNLI_PREFIXNAME       0x000000002     // Make name "Shortcut to xxx"
  499. #define SHGNLI_NOUNIQUE         0x000000004     // don't do the unique name generation
  500.  
  501.  
  502. ////
  503. //// End SHGetFileInfo
  504. ////
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511. #endif /* WINVER >= 0x0400 */
  512.  
  513. #ifdef __cplusplus
  514. }
  515. #endif  /* __cplusplus */
  516.  
  517. #pragma option -b.
  518. #include <poppack.h>
  519. #pragma option -b
  520.  
  521. #pragma option -b.
  522. #endif  /* _INC_SHELLAPI */
  523.