Windows2000/private/shell/ext/url/urlshell.h
2020-09-30 17:12:32 +02:00

135 lines
6.4 KiB
C

#ifndef _URLSHELL_H_
#define _URLSHELL_H_
// This header is an extraction of private macros and prototypes that
// originally came from shellp.h and shellprv.h.
#define DATASEG_READONLY DATA_SEG_READ_ONLY
#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 */
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
#define ENTERCRITICAL Shell_EnterCriticalSection();
#define LEAVECRITICAL Shell_LeaveCriticalSection();
void Shell_EnterCriticalSection(void);
void Shell_LeaveCriticalSection(void);
#define CCH_KEYMAX 64 // DOC: max size of a reg key (under shellex)
#define FillExecInfo(_info, _hwnd, _verb, _file, _params, _dir, _show) \
(_info).hwnd = _hwnd; \
(_info).lpVerb = _verb; \
(_info).lpFile = _file; \
(_info).lpParameters = _params; \
(_info).lpDirectory = _dir; \
(_info).nShow = _show; \
(_info).fMask = 0; \
(_info).cbSize = SIZEOF(SHELLEXECUTEINFO);
// Define some registry caching apis. This will allow us to minimize the
// changes needed in the shell code and still try to reduce the number of
// calls that we make to the registry.
LONG SHRegQueryValueA(HKEY hKey,LPCSTR lpSubKey,LPSTR lpValue,PLONG lpcbValue);
LONG SHRegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
LONG SHRegQueryValueW(HKEY hKey,LPCWSTR lpSubKey,LPWSTR lpValue,PLONG lpcbValue);
LONG SHRegQueryValueExW(HKEY hKey,LPCWSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
#define GCD_MUSTHAVEOPENCMD 0x0001
#define GCD_ADDEXETODISPNAME 0x0002 // must be used with GCD_MUSTHAVEOPENCMD
#define GCD_ALLOWPSUDEOCLASSES 0x0004 // .ext type extensions
// Only valid when used with FillListWithClasses
#define GCD_MUSTHAVEEXTASSOC 0x0008 // There must be at least one extension assoc
#define DECLAREWAITCURSOR HCURSOR hcursor_wait_cursor_save
#define SetWaitCursor() hcursor_wait_cursor_save = SetCursor(LoadCursor(NULL, IDC_WAIT))
#define ResetWaitCursor() SetCursor(hcursor_wait_cursor_save)
// indexes into the shell image lists (Shell_GetImageList) for default images
// If you add to this list, you also need to update II_LASTSYSICON!
#define II_DOCNOASSOC 0 // document (blank page) (not associated)
#define II_APPLICATION 2 // application (exe, com, bat)
WINSHELLAPI BOOL WINAPI Shell_GetImageLists(HIMAGELIST *phiml, HIMAGELIST *phimlSmall);
WINSHELLAPI int WINAPI Shell_GetCachedImageIndex(LPCTSTR pszIconPath, int iIconIndex, UINT uIconFlags);
WINSHELLAPI int WINAPI PickIconDlg(HWND hwnd, LPSTR pszIconPath, UINT cbIconPath, int *piIconIndex);
WINSHELLAPI BOOL WINAPI GetFileNameFromBrowse(HWND hwnd, LPSTR szFilePath, UINT cbFilePath, LPCSTR szWorkingDir, LPCSTR szDefExt, LPCSTR szFilters, LPCSTR szTitle);
WINSHELLAPI void WINAPI PathGetShortPath(LPTSTR pszLongPath);
WINSHELLAPI BOOL WINAPI PathYetAnotherMakeUniqueName(LPTSTR pszUniqueName, LPCTSTR pszPath, LPCTSTR pszShort, LPCTSTR pszFileSpec);
extern DWORD WINAPI GetExeType(LPCTSTR pszFile);
WINSHELLAPI LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCTSTR pszPath);
WINSHELLAPI void WINAPI ILFree(LPITEMIDLIST pidl);
// Path processing function
#define PPCF_ADDQUOTES 0x00000001 // return a quoted name if required
#define PPCF_ADDARGUMENTS 0x00000003 // appends arguments (and wraps in quotes if required)
#define PPCF_NODIRECTORIES 0x00000010 // don't match to directories
#define PPCF_NORELATIVEOBJECTQUALIFY 0x00000020 // don't return fully qualified relative objects
#define PPCF_FORCEQUALIFY 0x00000040 // qualify even non-relative names
WINSHELLAPI LONG WINAPI PathProcessCommand( LPCTSTR lpSrc, LPTSTR lpDest, int iMax, DWORD dwFlags );
// PathResolve flags
#define PRF_VERIFYEXISTS 0x0001
#define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS)
#define PRF_FIRSTDIRDEF 0x0004
#define PRF_DONTFINDLNK 0x0008 // if PRF_TRYPROGRAMEXTENSIONS is specified
WINSHELLAPI int WINAPI PathResolve(LPTSTR lpszPath, LPCTSTR FAR dirs[], UINT fFlags);
//======Hash Item=============================================================
typedef struct _HashTable * PHASHTABLE;
#define PHASHITEM LPCTSTR
typedef void (CALLBACK *HASHITEMCALLBACK)(PHASHTABLE pht, LPCTSTR sz, UINT wUsage, DWORD param);
LPCTSTR WINAPI FindHashItem (PHASHTABLE pht, LPCTSTR lpszStr);
LPCTSTR WINAPI AddHashItem (PHASHTABLE pht, LPCTSTR lpszStr);
LPCTSTR WINAPI DeleteHashItem(PHASHTABLE pht, LPCTSTR lpszStr);
LPCTSTR WINAPI PurgeHashItem (PHASHTABLE pht, LPCTSTR lpszStr);
#define GetHashItemName(pht, sz, lpsz, cch) lstrcpyn(lpsz, sz, cch)
PHASHTABLE WINAPI CreateHashItemTable(UINT wBuckets, UINT wExtra, BOOL fCaseSensitive);
void WINAPI DestroyHashItemTable(PHASHTABLE pht);
void WINAPI SetHashItemData(PHASHTABLE pht, LPCTSTR lpszStr, int n, DWORD dwData);
DWORD WINAPI GetHashItemData(PHASHTABLE pht, LPCTSTR lpszStr, int n);
void * WINAPI GetHashItemDataPtr(PHASHTABLE pht, LPCTSTR lpszStr);
void WINAPI EnumHashItems(PHASHTABLE pht, HASHITEMCALLBACK callback, DWORD dwParam);
#ifdef DEBUG
void WINAPI DumpHashItemTable(PHASHTABLE pht);
#endif
#ifndef SIZEOF
#define SIZEOF(a) sizeof(a)
#endif
#ifndef ARRAYSIZE
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
#endif
#define PATH_CCH_EXT 64
#endif // _URLSHELL_H_