www.pudn.com > 一个托盘程序演示-闹钟 Alert .rar > SHELLAPI.H


/*****************************************************************************\ 
*                                                                             * 
* shellapi.h -  SHELL.DLL functions, types, and definitions                   * 
*                                                                             * 
* Copyright 1992 - 1998 Microsoft Corp.  All rights reserved               * 
*                                                                             * 
\*****************************************************************************/ 
 
#ifndef _INC_SHELLAPI 
#define _INC_SHELLAPI 
 
 
// 
// Define API decoration for direct importing of DLL references. 
// 
#ifndef WINSHELLAPI 
#if !defined(_SHELL32_) 
#define WINSHELLAPI       DECLSPEC_IMPORT 
#else 
#define WINSHELLAPI 
#endif 
#endif // WINSHELLAPI 
 
#ifndef SHSTDAPI 
#if !defined(_SHELL32_) 
#define SHSTDAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE 
#define SHSTDAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE 
#else 
#define SHSTDAPI          STDAPI 
#define SHSTDAPI_(type)   STDAPI_(type) 
#endif 
#endif // SHSTDAPI 
 
#ifndef SHDOCAPI 
#if !defined(_SHDOCVW_) 
#define SHDOCAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE 
#define SHDOCAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE 
#else 
#define SHDOCAPI          STDAPI 
#define SHDOCAPI_(type)   STDAPI_(type) 
#endif 
#endif // SHDOCAPI 
 
 
#include  
 
#ifdef __cplusplus 
extern "C" {            /* Assume C declarations for C++ */ 
#endif  /* __cplusplus */ 
 
 
 
DECLARE_HANDLE(HDROP); 
 
WINSHELLAPI UINT APIENTRY DragQueryFileA(HDROP,UINT,LPSTR,UINT); 
WINSHELLAPI UINT APIENTRY DragQueryFileW(HDROP,UINT,LPWSTR,UINT); 
#ifdef UNICODE 
#define DragQueryFile  DragQueryFileW 
#else 
#define DragQueryFile  DragQueryFileA 
#endif // !UNICODE 
WINSHELLAPI BOOL APIENTRY DragQueryPoint(HDROP,LPPOINT); 
WINSHELLAPI VOID APIENTRY DragFinish(HDROP); 
WINSHELLAPI VOID APIENTRY DragAcceptFiles(HWND,BOOL); 
 
WINSHELLAPI HINSTANCE APIENTRY ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); 
WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); 
#ifdef UNICODE 
#define ShellExecute  ShellExecuteW 
#else 
#define ShellExecute  ShellExecuteA 
#endif // !UNICODE 
WINSHELLAPI HINSTANCE APIENTRY FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult); 
WINSHELLAPI HINSTANCE APIENTRY FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult); 
#ifdef UNICODE 
#define FindExecutable  FindExecutableW 
#else 
#define FindExecutable  FindExecutableA 
#endif // !UNICODE 
WINSHELLAPI LPWSTR *  APIENTRY CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs); 
 
WINSHELLAPI INT       APIENTRY ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon); 
WINSHELLAPI INT       APIENTRY ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon); 
#ifdef UNICODE 
#define ShellAbout  ShellAboutW 
#else 
#define ShellAbout  ShellAboutA 
#endif // !UNICODE 
WINSHELLAPI HICON     APIENTRY DuplicateIcon(HINSTANCE hInst, HICON hIcon); 
WINSHELLAPI HICON     APIENTRY ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon); 
WINSHELLAPI HICON     APIENTRY ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon); 
#ifdef UNICODE 
#define ExtractAssociatedIcon  ExtractAssociatedIconW 
#else 
#define ExtractAssociatedIcon  ExtractAssociatedIconA 
#endif // !UNICODE 
 
WINSHELLAPI HICON     APIENTRY ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex); 
WINSHELLAPI HICON     APIENTRY ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex); 
#ifdef UNICODE 
#define ExtractIcon  ExtractIconW 
#else 
#define ExtractIcon  ExtractIconA 
#endif // !UNICODE 
 
#if(WINVER >= 0x0400) 
typedef struct _DRAGINFOA { 
    UINT uSize;                 /* init with sizeof(DRAGINFO) */ 
    POINT pt; 
    BOOL fNC; 
    LPSTR   lpFileList; 
    DWORD grfKeyState; 
} DRAGINFOA, FAR* LPDRAGINFOA; 
typedef struct _DRAGINFOW { 
    UINT uSize;                 /* init with sizeof(DRAGINFO) */ 
    POINT pt; 
    BOOL fNC; 
    LPWSTR  lpFileList; 
    DWORD grfKeyState; 
} DRAGINFOW, FAR* LPDRAGINFOW; 
#ifdef UNICODE 
typedef DRAGINFOW DRAGINFO; 
typedef LPDRAGINFOW LPDRAGINFO; 
#else 
typedef DRAGINFOA DRAGINFO; 
typedef LPDRAGINFOA LPDRAGINFO; 
#endif // UNICODE 
 
 
//// 
//// AppBar stuff 
//// 
#define ABM_NEW           0x00000000 
#define ABM_REMOVE        0x00000001 
#define ABM_QUERYPOS      0x00000002 
#define ABM_SETPOS        0x00000003 
#define ABM_GETSTATE      0x00000004 
#define ABM_GETTASKBARPOS 0x00000005 
#define ABM_ACTIVATE      0x00000006  // lParam == TRUE/FALSE means activate/deactivate 
#define ABM_GETAUTOHIDEBAR 0x00000007 
#define ABM_SETAUTOHIDEBAR 0x00000008  // this can fail at any time.  MUST check the result 
                                        // lParam = TRUE/FALSE  Set/Unset 
                                        // uEdge = what edge 
#define ABM_WINDOWPOSCHANGED 0x0000009 
 
 
// these are put in the wparam of callback messages 
#define ABN_STATECHANGE    0x0000000 
#define ABN_POSCHANGED     0x0000001 
#define ABN_FULLSCREENAPP  0x0000002 
#define ABN_WINDOWARRANGE  0x0000003 // lParam == TRUE means hide 
 
// flags for get state 
#define ABS_AUTOHIDE    0x0000001 
#define ABS_ALWAYSONTOP 0x0000002 
 
#define ABE_LEFT        0 
#define ABE_TOP         1 
#define ABE_RIGHT       2 
#define ABE_BOTTOM      3 
 
typedef struct _AppBarData 
{ 
    DWORD cbSize; 
    HWND hWnd; 
    UINT uCallbackMessage; 
    UINT uEdge; 
    RECT rc; 
    LPARAM lParam; // message specific 
} APPBARDATA, *PAPPBARDATA; 
 
WINSHELLAPI UINT APIENTRY SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData); 
 
//// 
////  EndAppBar 
//// 
 
 
WINSHELLAPI DWORD   APIENTRY DoEnvironmentSubstA(LPSTR szString, UINT cbString); 
WINSHELLAPI DWORD   APIENTRY DoEnvironmentSubstW(LPWSTR szString, UINT cbString); 
#ifdef UNICODE 
#define DoEnvironmentSubst  DoEnvironmentSubstW 
#else 
#define DoEnvironmentSubst  DoEnvironmentSubstA 
#endif // !UNICODE 
WINSHELLAPI LPSTR APIENTRY FindEnvironmentStringA(LPSTR szEnvVar); 
WINSHELLAPI LPWSTR APIENTRY FindEnvironmentStringW(LPWSTR szEnvVar); 
#ifdef UNICODE 
#define FindEnvironmentString  FindEnvironmentStringW 
#else 
#define FindEnvironmentString  FindEnvironmentStringA 
#endif // !UNICODE 
 
#define EIRESID(x) (-1 * (int)(x)) 
WINSHELLAPI UINT WINAPI ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons); 
WINSHELLAPI UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons); 
#ifdef UNICODE 
#define ExtractIconEx  ExtractIconExW 
#else 
#define ExtractIconEx  ExtractIconExA 
#endif // !UNICODE 
 
 
 
//// 
//// Shell File Operations 
//// 
 
#ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h 
 
#define FO_MOVE           0x0001 
#define FO_COPY           0x0002 
#define FO_DELETE         0x0003 
#define FO_RENAME         0x0004 
 
#define FOF_MULTIDESTFILES         0x0001 
#define FOF_CONFIRMMOUSE           0x0002 
#define FOF_SILENT                 0x0004  // don't create progress/report 
#define FOF_RENAMEONCOLLISION      0x0008 
#define FOF_NOCONFIRMATION         0x0010  // Don't prompt the user. 
#define FOF_WANTMAPPINGHANDLE      0x0020  // Fill in SHFILEOPSTRUCT.hNameMappings 
                                      // Must be freed using SHFreeNameMappings 
#define FOF_ALLOWUNDO              0x0040 
#define FOF_FILESONLY              0x0080  // on *.*, do only files 
#define FOF_SIMPLEPROGRESS         0x0100  // means don't show names of files 
#define FOF_NOCONFIRMMKDIR         0x0200  // don't confirm making any needed dirs 
#define FOF_NOERRORUI              0x0400  // don't put up error UI 
#define FOF_NOCOPYSECURITYATTRIBS  0x0800  // dont copy NT file Security Attributes 
 
typedef WORD FILEOP_FLAGS; 
 
#define PO_DELETE       0x0013  // printer is being deleted 
#define PO_RENAME       0x0014  // printer is being renamed 
#define PO_PORTCHANGE   0x0020  // port this printer connected to is being changed 
                                // if this id is set, the strings received by 
                                // the copyhook are a doubly-null terminated 
                                // list of strings.  The first is the printer 
                                // name and the second is the printer port. 
#define PO_REN_PORT     0x0034  // PO_RENAME and PO_PORTCHANGE at same time. 
 
// no POF_ flags currently defined 
 
typedef WORD PRINTEROP_FLAGS; 
 
#endif // FO_MOVE 
 
// implicit parameters are: 
//      if pFrom or pTo are unqualified names the current directories are 
//      taken from the global current drive/directory settings managed 
//      by Get/SetCurrentDrive/Directory 
// 
//      the global confirmation settings 
 
typedef struct _SHFILEOPSTRUCTA 
{ 
        HWND            hwnd; 
        UINT            wFunc; 
        LPCSTR          pFrom; 
        LPCSTR          pTo; 
        FILEOP_FLAGS    fFlags; 
        BOOL            fAnyOperationsAborted; 
        LPVOID          hNameMappings; 
        LPCSTR           lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS 
} SHFILEOPSTRUCTA, FAR *LPSHFILEOPSTRUCTA; 
typedef struct _SHFILEOPSTRUCTW 
{ 
        HWND            hwnd; 
        UINT            wFunc; 
        LPCWSTR         pFrom; 
        LPCWSTR         pTo; 
        FILEOP_FLAGS    fFlags; 
        BOOL            fAnyOperationsAborted; 
        LPVOID          hNameMappings; 
        LPCWSTR          lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS 
} SHFILEOPSTRUCTW, FAR *LPSHFILEOPSTRUCTW; 
#ifdef UNICODE 
typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT; 
typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT; 
#else 
typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; 
typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; 
#endif // UNICODE 
 
WINSHELLAPI int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); 
WINSHELLAPI int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp); 
#ifdef UNICODE 
#define SHFileOperation  SHFileOperationW 
#else 
#define SHFileOperation  SHFileOperationA 
#endif // !UNICODE 
 
WINSHELLAPI void WINAPI SHFreeNameMappings(HANDLE hNameMappings); 
 
typedef struct _SHNAMEMAPPINGA 
{ 
    LPSTR   pszOldPath; 
    LPSTR   pszNewPath; 
    int   cchOldPath; 
    int   cchNewPath; 
} SHNAMEMAPPINGA, FAR *LPSHNAMEMAPPINGA; 
typedef struct _SHNAMEMAPPINGW 
{ 
    LPWSTR  pszOldPath; 
    LPWSTR  pszNewPath; 
    int   cchOldPath; 
    int   cchNewPath; 
} SHNAMEMAPPINGW, FAR *LPSHNAMEMAPPINGW; 
#ifdef UNICODE 
typedef SHNAMEMAPPINGW SHNAMEMAPPING; 
typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING; 
#else 
typedef SHNAMEMAPPINGA SHNAMEMAPPING; 
typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING; 
#endif // UNICODE 
 
 
//// 
//// End Shell File Operations 
//// 
 
//// 
////  Begin ShellExecuteEx and family 
//// 
 
 
/* ShellExecute() and ShellExecuteEx() error codes */ 
 
/* regular WinExec() codes */ 
#define SE_ERR_FNF              2       // file not found 
#define SE_ERR_PNF              3       // path not found 
#define SE_ERR_ACCESSDENIED     5       // access denied 
#define SE_ERR_OOM              8       // out of memory 
#define SE_ERR_DLLNOTFOUND              32 
 
#endif /* WINVER >= 0x0400 */ 
 
/* error values for ShellExecute() beyond the regular WinExec() codes */ 
#define SE_ERR_SHARE                    26 
#define SE_ERR_ASSOCINCOMPLETE          27 
#define SE_ERR_DDETIMEOUT               28 
#define SE_ERR_DDEFAIL                  29 
#define SE_ERR_DDEBUSY                  30 
#define SE_ERR_NOASSOC                  31 
 
#if(WINVER >= 0x0400) 
 
// Note CLASSKEY overrides CLASSNAME 
#define SEE_MASK_CLASSNAME        0x00000001 
#define SEE_MASK_CLASSKEY         0x00000003 
// Note INVOKEIDLIST overrides IDLIST 
#define SEE_MASK_IDLIST           0x00000004 
#define SEE_MASK_INVOKEIDLIST     0x0000000c 
#define SEE_MASK_ICON             0x00000010 
#define SEE_MASK_HOTKEY           0x00000020 
#define SEE_MASK_NOCLOSEPROCESS   0x00000040 
#define SEE_MASK_CONNECTNETDRV    0x00000080 
#define SEE_MASK_FLAG_DDEWAIT     0x00000100 
#define SEE_MASK_DOENVSUBST       0x00000200 
#define SEE_MASK_FLAG_NO_UI       0x00000400 
#define SEE_MASK_UNICODE          0x00004000 
#define SEE_MASK_NO_CONSOLE       0x00008000 
#define SEE_MASK_ASYNCOK          0x00100000 
#define SEE_MASK_HMONITOR         0x00200000 
typedef struct _SHELLEXECUTEINFOA 
{ 
        DWORD cbSize; 
        ULONG fMask; 
        HWND hwnd; 
        LPCSTR   lpVerb; 
        LPCSTR   lpFile; 
        LPCSTR   lpParameters; 
        LPCSTR   lpDirectory; 
        int nShow; 
        HINSTANCE hInstApp; 
        // Optional fields 
        LPVOID lpIDList; 
        LPCSTR   lpClass; 
        HKEY hkeyClass; 
        DWORD dwHotKey; 
        union { 
        HANDLE hIcon; 
        HANDLE hMonitor; 
        }; 
        HANDLE hProcess; 
} SHELLEXECUTEINFOA, FAR *LPSHELLEXECUTEINFOA; 
// Note CLASSKEY overrides CLASSNAME 
#define SEE_MASK_CLASSNAME        0x00000001 
#define SEE_MASK_CLASSKEY         0x00000003 
// Note INVOKEIDLIST overrides IDLIST 
#define SEE_MASK_IDLIST           0x00000004 
#define SEE_MASK_INVOKEIDLIST     0x0000000c 
#define SEE_MASK_ICON             0x00000010 
#define SEE_MASK_HOTKEY           0x00000020 
#define SEE_MASK_NOCLOSEPROCESS   0x00000040 
#define SEE_MASK_CONNECTNETDRV    0x00000080 
#define SEE_MASK_FLAG_DDEWAIT     0x00000100 
#define SEE_MASK_DOENVSUBST       0x00000200 
#define SEE_MASK_FLAG_NO_UI       0x00000400 
#define SEE_MASK_UNICODE          0x00004000 
#define SEE_MASK_NO_CONSOLE       0x00008000 
#define SEE_MASK_ASYNCOK          0x00100000 
#define SEE_MASK_HMONITOR         0x00200000 
typedef struct _SHELLEXECUTEINFOW 
{ 
        DWORD cbSize; 
        ULONG fMask; 
        HWND hwnd; 
        LPCWSTR  lpVerb; 
        LPCWSTR  lpFile; 
        LPCWSTR  lpParameters; 
        LPCWSTR  lpDirectory; 
        int nShow; 
        HINSTANCE hInstApp; 
        // Optional fields 
        LPVOID lpIDList; 
        LPCWSTR  lpClass; 
        HKEY hkeyClass; 
        DWORD dwHotKey; 
        union { 
        HANDLE hIcon; 
        HANDLE hMonitor; 
        }; 
        HANDLE hProcess; 
} SHELLEXECUTEINFOW, FAR *LPSHELLEXECUTEINFOW; 
#ifdef UNICODE 
typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO; 
typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO; 
#else 
typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; 
typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; 
#endif // UNICODE 
 
WINSHELLAPI BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); 
WINSHELLAPI BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); 
#ifdef UNICODE 
#define ShellExecuteEx  ShellExecuteExW 
#else 
#define ShellExecuteEx  ShellExecuteExA 
#endif // !UNICODE 
WINSHELLAPI void WINAPI WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR lpstrTitle); 
WINSHELLAPI void WINAPI WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle); 
#ifdef UNICODE 
#define WinExecError  WinExecErrorW 
#else 
#define WinExecError  WinExecErrorA 
#endif // !UNICODE 
 
//// 
////  End ShellExecuteEx and family 
//// 
 
// 
// RecycleBin 
// 
 
 
// struct for query recycle bin info 
typedef struct _SHQUERYRBINFO { 
    DWORD   cbSize; 
#if !defined(_MAC) || defined(_MAC_INT_64) 
    __int64 i64Size; 
    __int64 i64NumItems; 
#else 
    DWORDLONG i64Size; 
    DWORDLONG i64NumItems; 
#endif 
} SHQUERYRBINFO, FAR *LPSHQUERYRBINFO; 
 
 
// flags for SHEmptyRecycleBin 
// 
#define SHERB_NOCONFIRMATION    0x00000001 
#define SHERB_NOPROGRESSUI      0x00000002 
#define SHERB_NOSOUND           0x00000004 
 
 
SHSTDAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo ); 
SHSTDAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo ); 
#ifdef UNICODE 
#define SHQueryRecycleBin  SHQueryRecycleBinW 
#else 
#define SHQueryRecycleBin  SHQueryRecycleBinA 
#endif // !UNICODE 
SHSTDAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags ); 
SHSTDAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags ); 
#ifdef UNICODE 
#define SHEmptyRecycleBin  SHEmptyRecycleBinW 
#else 
#define SHEmptyRecycleBin  SHEmptyRecycleBinA 
#endif // !UNICODE 
 
//// 
//// end of RecycleBin 
 
 
//// 
//// Tray notification definitions 
//// 
 
typedef struct _NOTIFYICONDATAA { 
        DWORD cbSize; 
        HWND hWnd; 
        UINT uID; 
        UINT uFlags; 
        UINT uCallbackMessage; 
        HICON hIcon; 
        CHAR   szTip[64]; 
} NOTIFYICONDATAA, *PNOTIFYICONDATAA; 
typedef struct _NOTIFYICONDATAW { 
        DWORD cbSize; 
        HWND hWnd; 
        UINT uID; 
        UINT uFlags; 
        UINT uCallbackMessage; 
        HICON hIcon; 
        WCHAR  szTip[64]; 
} NOTIFYICONDATAW, *PNOTIFYICONDATAW; 
#ifdef UNICODE 
typedef NOTIFYICONDATAW NOTIFYICONDATA; 
typedef PNOTIFYICONDATAW PNOTIFYICONDATA; 
#else 
typedef NOTIFYICONDATAA NOTIFYICONDATA; 
typedef PNOTIFYICONDATAA PNOTIFYICONDATA; 
#endif // UNICODE 
 
 
#define NIM_ADD         0x00000000 
#define NIM_MODIFY      0x00000001 
#define NIM_DELETE      0x00000002 
 
#define NIF_MESSAGE     0x00000001 
#define NIF_ICON        0x00000002 
#define NIF_TIP         0x00000004 
 
WINSHELLAPI BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); 
WINSHELLAPI BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); 
#ifdef UNICODE 
#define Shell_NotifyIcon  Shell_NotifyIconW 
#else 
#define Shell_NotifyIcon  Shell_NotifyIconA 
#endif // !UNICODE 
 
//// 
//// End Tray Notification Icons 
//// 
 
 
 
//// 
//// Begin SHGetFileInfo 
//// 
 
/* 
 * The SHGetFileInfo API provides an easy way to get attributes 
 * for a file given a pathname. 
 * 
 *   PARAMETERS 
 * 
 *     pszPath              file name to get info about 
 *     dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES 
 *     psfi                 place to return file info 
 *     cbFileInfo           size of structure 
 *     uFlags               flags 
 * 
 *   RETURN 
 *     TRUE if things worked 
 */ 
 
typedef struct _SHFILEINFOA 
{ 
        HICON       hIcon;                      // out: icon 
        int         iIcon;                      // out: icon index 
        DWORD       dwAttributes;               // out: SFGAO_ flags 
        CHAR        szDisplayName[MAX_PATH];    // out: display name (or path) 
        CHAR        szTypeName[80];             // out: type name 
} SHFILEINFOA; 
typedef struct _SHFILEINFOW 
{ 
        HICON       hIcon;                      // out: icon 
        int         iIcon;                      // out: icon index 
        DWORD       dwAttributes;               // out: SFGAO_ flags 
        WCHAR       szDisplayName[MAX_PATH];    // out: display name (or path) 
        WCHAR       szTypeName[80];             // out: type name 
} SHFILEINFOW; 
#ifdef UNICODE 
typedef SHFILEINFOW SHFILEINFO; 
#else 
typedef SHFILEINFOA SHFILEINFO; 
#endif // UNICODE 
 
#define SHGFI_ICON              0x000000100     // get icon 
#define SHGFI_DISPLAYNAME       0x000000200     // get display name 
#define SHGFI_TYPENAME          0x000000400     // get type name 
#define SHGFI_ATTRIBUTES        0x000000800     // get attributes 
#define SHGFI_ICONLOCATION      0x000001000     // get icon location 
#define SHGFI_EXETYPE           0x000002000     // return exe type 
#define SHGFI_SYSICONINDEX      0x000004000     // get system icon index 
#define SHGFI_LINKOVERLAY       0x000008000     // put a link overlay on icon 
#define SHGFI_SELECTED          0x000010000     // show icon in selected state 
#define SHGFI_ATTR_SPECIFIED    0x000020000     // get only specified attributes 
#define SHGFI_LARGEICON         0x000000000     // get large icon 
#define SHGFI_SMALLICON         0x000000001     // get small icon 
#define SHGFI_OPENICON          0x000000002     // get open icon 
#define SHGFI_SHELLICONSIZE     0x000000004     // get shell size icon 
#define SHGFI_PIDL              0x000000008     // pszPath is a pidl 
#define SHGFI_USEFILEATTRIBUTES 0x000000010     // use passed dwFileAttribute 
 
SHSTDAPI_(DWORD) SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA FAR *psfi, UINT cbFileInfo, UINT uFlags); 
SHSTDAPI_(DWORD) SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW FAR *psfi, UINT cbFileInfo, UINT uFlags); 
#ifdef UNICODE 
#define SHGetFileInfo  SHGetFileInfoW 
#else 
#define SHGetFileInfo  SHGetFileInfoA 
#endif // !UNICODE 
SHSTDAPI_(BOOL)  SHGetDiskFreeSpaceA(LPCSTR pszVolume, ULARGE_INTEGER *pqwFreeCaller, ULARGE_INTEGER *pqwTot, ULARGE_INTEGER *pqwFree); 
SHSTDAPI_(BOOL)  SHGetDiskFreeSpaceW(LPCWSTR pszVolume, ULARGE_INTEGER *pqwFreeCaller, ULARGE_INTEGER *pqwTot, ULARGE_INTEGER *pqwFree); 
#ifdef UNICODE 
#define SHGetDiskFreeSpace  SHGetDiskFreeSpaceW 
#else 
#define SHGetDiskFreeSpace  SHGetDiskFreeSpaceA 
#endif // !UNICODE 
SHSTDAPI_(BOOL)  SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName, BOOL *pfMustCopy, UINT uFlags); 
SHSTDAPI_(BOOL)  SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags); 
#ifdef UNICODE 
#define SHGetNewLinkInfo  SHGetNewLinkInfoW 
#else 
#define SHGetNewLinkInfo  SHGetNewLinkInfoA 
#endif // !UNICODE 
 
#define SHGNLI_PIDL             0x000000001     // pszLinkTo is a pidl 
#define SHGNLI_PREFIXNAME       0x000000002     // Make name "Shortcut to xxx" 
#define SHGNLI_NOUNIQUE         0x000000004     // don't do the unique name generation 
 
 
//// 
//// End SHGetFileInfo 
//// 
 
// Printer stuff 
#define PRINTACTION_OPEN           0 
#define PRINTACTION_PROPERTIES     1 
#define PRINTACTION_NETINSTALL     2 
#define PRINTACTION_NETINSTALLLINK 3 
#define PRINTACTION_TESTPAGE       4 
#define PRINTACTION_OPENNETPRN     5 
#ifdef WINNT 
#define PRINTACTION_DOCUMENTDEFAULTS 6 
#define PRINTACTION_SERVERPROPERTIES 7 
#endif 
 
SHSTDAPI_(BOOL)  SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, LPCSTR lpBuf2, BOOL fModal); 
SHSTDAPI_(BOOL)  SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1, LPCWSTR lpBuf2, BOOL fModal); 
#ifdef UNICODE 
#define SHInvokePrinterCommand  SHInvokePrinterCommandW 
#else 
#define SHInvokePrinterCommand  SHInvokePrinterCommandA 
#endif // !UNICODE 
 
 
 
#endif /* WINVER >= 0x0400 */ 
 
 
#ifdef __cplusplus 
} 
#endif  /* __cplusplus */ 
 
#include  
 
#endif  /* _INC_SHELLAPI */