//*************************************************************************** // --- SHELLAPI.W SHSEMIP.H SHLOBJ.W SHOBJIDL.IDL SHLDISP.IDL SHPRIV.IDL --- // Which header is best for my new API? // // SHSEMIP - *AVOID _ALL_ USAGE*, NO EXPORTS, SUPER PRIVATE // used for very private shell defines. // // SHELLAPI - ALL NEW SHELL32 EXPORTS public and private // used for both public and private exports from shell32 // // SHLOBJ - *AVOID NEW USAGE*, PREFER OTHER HEADERS // used primarily for legacy compatibility // // SHOBJIDL - ALL NEW SHELL PUBLIC INTERFACES // primary file for public shell (shell32+) interfaces // // SHLDISP - ALL NEW SHELL AUTOMATION INTERFACES // automation interfaces are always public // // SHPRIV - ALL NEW SHELL PRIVATE INTERFACES // private interfaces used anywhere in the shell // //*************************************************************************** #ifndef _SHSEMIP_H_ #define _SHSEMIP_H_ #ifndef LPNTSTR_DEFINED #define LPNTSTR_DEFINED typedef UNALIGNED const WCHAR * LPNCWSTR; typedef UNALIGNED WCHAR * LPNWSTR; #ifdef UNICODE #define LPNCTSTR LPNCWSTR #define LPNTSTR LPNWSTR #else #define LPNCTSTR LPCSTR #define LPNTSTR LPSTR #endif #endif // LPNTSTR_DEFINED #ifndef DONT_WANT_SHELLDEBUG #ifndef DebugMsg /* ;Internal */ #define DM_TRACE 0x0001 // Trace messages /* ;Internal */ #define DM_WARNING 0x0002 // Warning /* ;Internal */ #define DM_ERROR 0x0004 // Error /* ;Internal */ #define DM_ASSERT 0x0008 // Assertions /* ;Internal */ #define Assert(f) /* ;Internal */ #define AssertE(f) (f) /* ;Internal */ #define AssertMsg 1 ? (void)0 : (void) /* ;Internal */ #define DebugMsg 1 ? (void)0 : (void) /* ;Internal */ #endif /* ;Internal */ /* ;Internal */ #endif // // 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 NOPRAGMAS #ifndef RC_INVOKED #pragma pack(1) /* Assume byte packing throughout */ #endif /* !RC_INVOKED */ #endif #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ //====== Ranges for WM_NOTIFY codes ================================== // If a new set of codes is defined, make sure the range goes /* ;Internal */ // here so that we can keep them distinct /* ;Internal */ // Note that these are defined to be unsigned to avoid compiler warnings // since NMHDR.code is declared as UINT. // // NM_FIRST - NM_LAST defined in commctrl.h (0U-0U) - (OU-99U) // // LVN_FIRST - LVN_LAST defined in commctrl.h (0U-100U) - (OU-199U) // // PSN_FIRST - PSN_LAST defined in prsht.h (0U-200U) - (0U-299U) // // HDN_FIRST - HDN_LAST defined in commctrl.h (0U-300U) - (OU-399U) // // TVN_FIRST - TVN_LAST defined in commctrl.h (0U-400U) - (OU-499U) // TTN_FIRST - TTN_LAST defined in commctrl.h (0U-520U) - (OU-549U) #define SEN_FIRST (0U-550U) // ;Internal #define SEN_LAST (0U-559U) // ;Internal #ifndef UNIX #define MAXPATHLEN MAX_PATH // ;Internal #endif #ifdef UNICODE #define OTHER_TCHAR_NAME(sz) sz##A #else // !UNICODE #define OTHER_TCHAR_NAME(sz) sz##W #endif //=========================================================================== // ITEMIDLIST //=========================================================================== // unsafe macros #define _ILSkip(pidl, cb) ((LPITEMIDLIST)(((BYTE*)(pidl))+cb)) #define _ILNext(pidl) _ILSkip(pidl, (pidl)->mkid.cb) __inline BOOL SHIsConsistentPidl(LPCITEMIDLIST pidl, UINT cbAlloc) { // test to make sure that the pidl does not overrun itself // this is for callers that un-persist pidl data, and // assumes that the caller knows the allocated size of the pidl // similar to ILGetSize(pidl) <= cbAlloc except that // it doesnt assert or throw exceptions UINT cbPidl = sizeof(pidl->mkid.cb); while (cbPidl < cbAlloc && pidl->mkid.cb) { cbPidl += pidl->mkid.cb; pidl = _ILNext(pidl); } return cbPidl <= cbAlloc && 0 == pidl->mkid.cb; } //=================================================================== // Smart tiling API's WINSHELLAPI WORD WINAPI ArrangeWindows(HWND hwndParent, WORD flags, LPCRECT lpRect, WORD chwnd, const HWND *ahwnd); /* Avoid multiple typedefs C warnings. Defined in shlapip.h as well. */ #ifndef RUNDLLPROC typedef void (WINAPI *RUNDLLPROCA)(HWND hwndStub, HINSTANCE hAppInstance, LPSTR lpszCmdLine, int nCmdShow); typedef void (WINAPI * RUNDLLPROCW)(HWND hwndStub, HINSTANCE hAppInstance, LPWSTR lpszCmdLine, int nCmdShow); #ifdef UNICODE #define RUNDLLPROC RUNDLLPROCW #else #define RUNDLLPROC RUNDLLPROCA #endif #endif // Maximum length of a path string #define CCHPATHMAX MAX_PATH #define MAXSPECLEN MAX_PATH #define MAX_PATH_URL INTERNET_MAX_URL_LENGTH #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) #ifndef SIZEOF #define SIZEOF(a) sizeof(a) #endif #define PathRemoveBlanksORD 33 #define PathFindFileNameORD 34 #define PathFindExtensionORD 31 #ifdef OVERRIDE_SHLWAPI_PATH_FUNCTIONS // SHLWAPI provides the majority of the Path functions. There are // some cases where the shell code (shell32 and explorer) need to // call a different variation of these calls. Because of this, we // have OVERRIDE_SHLWAPI_PATH_FUNCTIONS. Components such as shdocvw // should strive to *not* have this defined. // // Some reasons why something like shell32 would need this: // 1) Shell32 calls some WNet APIs due to the NT merge. Shlwapi // cannot take these. // 2) Shell32 needs the unaligned version PathBuildRoot, // PathCombine, etc. // #undef PathIsDirectory #undef PathMakePretty WINSHELLAPI BOOL WINAPI PathIsDirectory(LPCTSTR lpszPath); WINSHELLAPI BOOL WINAPI PathMakePretty(LPTSTR lpszPath); #endif // OVERRIDE_SHLWAPI_PATH_FUNCTIONS WINSHELLAPI void WINAPI ExitWindowsDialog(HWND hwnd); WINSHELLAPI void WINAPI LogoffWindowsDialog(HWND hwnd); WINSHELLAPI void WINAPI DisconnectWindowsDialog(HWND hwnd); WINSHELLAPI BOOL WINAPI IsSuspendAllowed(void); WINSHELLAPI void WINAPI SHRefreshSettings(void); EXTERN_C WINSHELLAPI HRESULT STDAPICALLTYPE SHCopyMonikerToTemp(IMoniker *pmk, LPCWSTR pszIn, LPWSTR pszOut, int cchOut); WINSHELLAPI BOOL WINAPI IsVolumeNTFS(LPCTSTR pszRootPath); #ifdef WINNT WINSHELLAPI LPWSTR WINAPI GetDownlevelCopyDataLossText(LPCWSTR pszSrcFile, LPCWSTR pszDestDir, BOOL bIsADir, BOOL * pbLossPossibleThisDir); #endif //-------- file engine stuff ---------- // "current directory" management routines. used to set parameters // that paths are qualfied against in MoveCopyDeleteRename() WINSHELLAPI int WINAPI GetDefaultDrive(); WINSHELLAPI int WINAPI SetDefaultDrive(int iDrive); WINSHELLAPI int WINAPI SetDefaultDirectory(LPCTSTR lpPath); WINSHELLAPI void WINAPI GetDefaultDirectory(int iDrive, LPSTR lpPath); // // NOTES: No reason to have this one here, but I don't want to break the build. // #ifndef WINCOMMCTRLAPI int WINAPI StrToInt(LPCTSTR lpSrc); // atoi() #endif #define POSINVALID 32767 // values for invalid position #define IDCMD_SYSTEMFIRST 0x8000 #define IDCMD_SYSTEMLAST 0xbfff #define IDCMD_CANCELED 0xbfff #define IDCMD_PROCESSED 0xbffe #define IDCMD_DEFAULT 0xbffe /* timedate.c */ // ********************************************************************** // DATE is a structure with a date packed into a WORD size value. It // is compatible with a file date in a directory entry structure. // ********************************************************************** #ifndef DATE_DEFINED typedef struct { WORD Day :5; // Day number 1 - 31 WORD Month :4; // Month number 1 - 12 WORD Year :7; // Year subtracted from 1980, 0-127 } WORD_DATE; typedef union { WORD wDate; WORD_DATE sDate; } WDATE; #define DATE_DEFINED #endif // ********************************************************************** // TIME is a structure with a 24 hour time packed into a WORD size value. // It is compatible with a file time in a directory entry structure. // ********************************************************************** #ifndef TIME_DEFINED typedef struct { WORD Sec :5; // Seconds divided by 2 (0 - 29). WORD Min :6; // Minutes 0 - 59 WORD Hour :5; // Hours 0 - 24 } WORD_TIME; typedef union { WORD wTime; WORD_TIME sTime; } WTIME; #define TIME_DEFINED #endif WINSHELLAPI WORD WINAPI Shell_GetCurrentDate(void); WINSHELLAPI WORD WINAPI Shell_GetCurrentTime(void); //====== SEMI-PRIVATE API =============================== #ifndef HPSXA_DEFINED #define HPSXA_DEFINED DECLARE_HANDLE( HPSXA ); #endif // HPSXA_DEFINED //====== SEMI-PRIVATE API ORDINALS =============================== // This is the list of semi-private ordinals we semi-publish. #define SHObjectPropertiesORD 178 #define SHCreateDefClassObjectORD 70 #define SHGetNetResourceORD 69 #define SHEXP_SHCREATEDEFCLASSOBJECT MAKEINTRESOURCE(SHCreateDefClassObjectORD) #define SHEXP_SHGETNETRESOURCE MAKEINTRESOURCE(SHGetNetResourceORD) #ifdef __cplusplus } #endif /* __cplusplus */ #ifndef RC_INVOKED #ifndef NOPRAGMAS #pragma pack() #endif /* NOPRAGMAS */ #endif /* !RC_INVOKED */ #endif // _SHSEMIP_H_