|
|
//***************************************************************************
// --- 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_
|