Complete cleanup, bugfixes.

New: PathStripPath, PathMakeUniqueName, PathStripToRoot,
PathGetShortPath, PathParseIconLocation, PathRemoveExtension,
PathRemoveArgs, PathAppend, PathBuildRoot, PathCanonicalize,
PathFindNextComponent, PathRemoveFileSpec.
This commit is contained in:
Juergen Schmied 2000-04-28 20:23:46 +00:00 committed by Alexandre Julliard
parent 24f4cdc69f
commit 51c74d82a9
15 changed files with 2843 additions and 1121 deletions

View File

@ -278,6 +278,6 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi)
TRACE("(%lx,%s) empty stub!\n", (DWORD)lpbi, lpbi->lpszTitle);
return (LPITEMIDLIST) DialogBoxParamA( shell32_hInstance,
"SHBRSFORFOLDER_MSGBOX", 0,
"SHBRSFORFOLDER_MSGBOX", lpbi->hwndOwner,
BrsFolderDlgProc, (INT)lpbi );
}

View File

@ -8,6 +8,7 @@
*/
#define INITGUID
#include "shlwapi.h"
/* #include "shlguid.h" */
/*

File diff suppressed because it is too large Load Diff

View File

@ -8,16 +8,33 @@
#include "winversion.h"
#include "shlobj.h"
#include "shresdef.h"
#include "wine/undocshell.h"
DEFAULT_DEBUG_CHANNEL(shell);
#define ASK_DELETE_FILE 1
#define ASK_DELETE_FOLDER 2
#define ASK_DELETE_MULTIPLE_FILE 3
static BOOL SHELL_WarnFolderDelete (int nKindOfDialog, LPCSTR szDir)
{
char szCaption[255], szText[255], szBuffer[256];
LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_TEXT, szText, sizeof(szText));
LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_CAPTION, szCaption, sizeof(szCaption));
FormatMessageA(FORMAT_MESSAGE_FROM_STRING, szText, 0,0, szBuffer, sizeof(szBuffer), (DWORD*)&szDir);
return (IDOK == MessageBoxA(GetActiveWindow(),szText, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
}
/**************************************************************************
* SHELL_DeleteDirectoryA()
*
* like rm -r
*/
BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir)
BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
{
BOOL ret = FALSE;
HANDLE hFind;
@ -28,6 +45,8 @@ BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir)
PathAddBackslashA(szTemp);
strcat(szTemp, "*.*");
if (bShowUI && !SHELL_WarnFolderDelete(ASK_DELETE_FOLDER, pszDir)) return FALSE;
if(INVALID_HANDLE_VALUE != (hFind = FindFirstFileA(szTemp, &wfd)))
{
do
@ -39,7 +58,7 @@ BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir)
strcat(szTemp, wfd.cFileName);
if(FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
SHELL_DeleteDirectoryA(szTemp);
SHELL_DeleteDirectoryA(szTemp, FALSE);
else
DeleteFileA(szTemp);
}
@ -124,3 +143,22 @@ DWORD WINAPI SHFileOperationAW(LPVOID lpFileOp)
return SHFileOperationW(lpFileOp);
return SHFileOperationA(lpFileOp);
}
/*************************************************************************
* SheGetDirW [SHELL32.281]
*
*/
HRESULT WINAPI SheGetDirW(LPWSTR u, LPWSTR v)
{ FIXME("%p %p stub\n",u,v);
return 0;
}
/*************************************************************************
* SheChangeDirW [SHELL32.274]
*
*/
HRESULT WINAPI SheChangeDirW(LPWSTR u)
{ FIXME("(%s),stub\n",debugstr_w(u));
return 0;
}

View File

@ -208,6 +208,70 @@ static HRESULT SHELL32_GetDisplayNameOfChild(
return hr;
}
/***********************************************************************
* SHELL32_GetItemAttributes
*
* NOTES
* observerd values:
* folder: 0xE0000177 FILESYSTEM | HASSUBFOLDER | FOLDER
* file: 0x40000177 FILESYSTEM
* drive: 0xf0000144 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR
* mycomputer: 0xb0000154 HASSUBFOLDER | FOLDER | FILESYSANCESTOR
* (seems to be default for shell extensions if no registry entry exists)
*
* This functions does not set flags!! It only resets flags when nessesary.
*/
static HRESULT SHELL32_GetItemAttributes(
IShellFolder * psf,
LPITEMIDLIST pidl,
LPDWORD pdwAttributes)
{
GUID const * clsid;
DWORD dwAttributes;
TRACE("0x%08lx\n", *pdwAttributes);
if (*pdwAttributes & (0xcff3fe88))
WARN("attribute 0x%08lx not implemented\n", *pdwAttributes);
*pdwAttributes &= ~SFGAO_LINK; /* FIXME: for native filedialogs */
if (_ILIsDrive(pidl))
{
*pdwAttributes &= 0xf0000144;
}
else if ((clsid=_ILGetGUIDPointer(pidl)))
{
if (HCR_GetFolderAttributes(clsid, &dwAttributes))
{
*pdwAttributes &= dwAttributes;
}
else
{
*pdwAttributes &= 0xb0000154;
}
}
else if (_ILGetDataPointer(pidl))
{
dwAttributes = _ILGetFileAttributes(pidl, NULL, 0);
*pdwAttributes &= ~SFGAO_FILESYSANCESTOR;
if(( SFGAO_FOLDER & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_DIRECTORY))
*pdwAttributes &= ~(SFGAO_FOLDER|SFGAO_HASSUBFOLDER);
if(( SFGAO_HIDDEN & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_HIDDEN))
*pdwAttributes &= ~SFGAO_HIDDEN;
if(( SFGAO_READONLY & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_READONLY))
*pdwAttributes &= ~SFGAO_READONLY;
}
else
{
*pdwAttributes &= 0xb0000154;
}
TRACE("-- 0x%08lx\n", *pdwAttributes);
return S_OK;
}
/***********************************************************************
* IShellFolder implementation
*/
@ -604,6 +668,17 @@ static HRESULT WINAPI IShellFolder_fnParseDisplayName(
}
else
{
if (pdwAttributes && *pdwAttributes)
{
SHELL32_GetItemAttributes(_IShellFolder_(This), pidlTemp, pdwAttributes);
/* WIN32_FIND_DATAA fd;
SHGetDataFromIDListA(_IShellFolder_(This), pidlTemp, SHGDFIL_FINDDATA, &fd, sizeof(fd));
if (!(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes))
*pdwAttributes &= ~SFGAO_FOLDER;
if (FILE_ATTRIBUTE_READONLY & fd.dwFileAttributes)
*pdwAttributes &= ~(SFGAO_CANDELETE|SFGAO_CANMOVE|SFGAO_CANRENAME );
*/
}
hr = S_OK;
}
}
@ -682,12 +757,17 @@ static HRESULT WINAPI IShellFolder_fnBindToObject( IShellFolder2 * iface, LPCITE
return E_FAIL;
}
}
else
else if(_ILIsFolder(pidl))
{
LPITEMIDLIST pidltemp = ILCloneFirst(pidl);
pShellFolder = IShellFolder_Constructor(iface, pidltemp);
ILFree(pidltemp);
}
else
{
ERR("can't bind to a file\n");
return E_FAIL;
}
if (_ILIsPidlSimple(pidl))
{
@ -901,19 +981,8 @@ static HRESULT WINAPI IShellFolder_fnGetAttributesOf(
while (cidl > 0 && *apidl)
{
pdump (*apidl);
if (_ILIsFolder( *apidl))
{
*rgfInOut &= 0xe0000177;
goto next;
}
else if (_ILIsValue( *apidl))
{
*rgfInOut &= 0x40000177;
goto next;
}
hr = E_INVALIDARG;
next: apidl++;
SHELL32_GetItemAttributes(_IShellFolder_(This), *apidl, rgfInOut);
apidl++;
cidl--;
}
@ -1436,7 +1505,7 @@ static HRESULT WINAPI ISFHelper_fnDeleteItems(
LPITEMIDLIST pidl;
MESSAGE("delete %s\n", szPath);
if (! RemoveDirectoryA(szPath)) return E_FAIL;
if (! SHELL_DeleteDirectoryA(szPath, TRUE)) return E_FAIL;
pidl = ILCombine(This->absPidl, apidl[i]);
SHChangeNotifyA(SHCNE_RMDIR, SHCNF_IDLIST, pidl, NULL);
SHFree(pidl);
@ -1625,6 +1694,11 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName(
else
{
hr = S_OK;
if (pdwAttributes && *pdwAttributes)
{
SHELL32_GetItemAttributes(_IShellFolder_(This), pidlTemp, pdwAttributes);
}
}
*ppidl = pidlTemp;
@ -1769,12 +1843,14 @@ static HRESULT WINAPI ISF_Desktop_fnCreateViewObject( IShellFolder2 * iface,
/**************************************************************************
* ISF_Desktop_fnGetAttributesOf
*/
static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(
IShellFolder2 * iface,
UINT cidl,
LPCITEMIDLIST *apidl,
DWORD *rgfInOut)
{
_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
GUID const * clsid;
DWORD attributes;
HRESULT hr = S_OK;
TRACE("(%p)->(cidl=%d apidl=%p mask=0x%08lx)\n",This,cidl,apidl, *rgfInOut);
@ -1785,37 +1861,8 @@ static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(IShellFolder2 * iface,UINT c
while (cidl > 0 && *apidl)
{
pdump (*apidl);
if ((clsid=_ILGetGUIDPointer(*apidl)))
{
if (IsEqualIID(clsid, &CLSID_MyComputer))
{
*rgfInOut &= 0xb0000154;
goto next;
}
else if (HCR_GetFolderAttributes(clsid, &attributes))
{
*rgfInOut &= attributes;
goto next;
}
else
{ /* some shell-extension */
*rgfInOut &= 0xb0000154;
}
}
else if (_ILIsFolder( *apidl))
{
*rgfInOut &= 0xe0000177;
goto next;
}
else if (_ILIsValue( *apidl))
{
*rgfInOut &= 0x40000177;
goto next;
}
hr = E_INVALIDARG;
next: apidl++;
SHELL32_GetItemAttributes(_IShellFolder_(This), *apidl, rgfInOut);
apidl++;
cidl--;
}
@ -2086,6 +2133,10 @@ static HRESULT WINAPI ISF_MyComputer_fnParseDisplayName(
}
else
{
if (pdwAttributes && *pdwAttributes)
{
SHELL32_GetItemAttributes(_IShellFolder_(This), pidlTemp, pdwAttributes);
}
hr = S_OK;
}
*ppidl = pidlTemp;
@ -2213,12 +2264,14 @@ static HRESULT WINAPI ISF_MyComputer_fnCreateViewObject( IShellFolder2 * iface,
/**************************************************************************
* ISF_MyComputer_fnGetAttributesOf
*/
static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(
IShellFolder2 * iface,
UINT cidl,
LPCITEMIDLIST *apidl,
DWORD *rgfInOut)
{
_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
GUID const * clsid;
DWORD attributes;
HRESULT hr = S_OK;
TRACE("(%p)->(cidl=%d apidl=%p mask=0x%08lx)\n",This,cidl,apidl,*rgfInOut);
@ -2226,28 +2279,11 @@ static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(IShellFolder2 * iface,UIN
if ( (!cidl) || (!apidl) || (!rgfInOut))
return E_INVALIDARG;
*rgfInOut = 0xffffffff;
while (cidl > 0 && *apidl)
{
pdump (*apidl);
if (_ILIsDrive(*apidl))
{
*rgfInOut &= 0xf0000144;
goto next;
}
else if ((clsid=_ILGetGUIDPointer(*apidl)))
{
if (HCR_GetFolderAttributes(clsid, &attributes))
{
*rgfInOut &= attributes;
goto next;
}
}
hr = E_INVALIDARG;
next: apidl++;
SHELL32_GetItemAttributes(_IShellFolder_(This), *apidl, rgfInOut);
apidl++;
cidl--;
}

View File

@ -444,7 +444,7 @@ HMENU WINAPI FileMenu_FindSubMenuByPidl(
/*************************************************************************
* FileMenu_AppendFilesForPidl [SHELL32.124]
*/
HMENU WINAPI FileMenu_AppendFilesForPidl(
int WINAPI FileMenu_AppendFilesForPidl(
HMENU hmenu,
LPCITEMIDLIST pidl,
BOOL bAddSeperator)
@ -490,7 +490,7 @@ int WINAPI FileMenu_AddFilesForPidl (
/*************************************************************************
* FileMenu_TrackPopupMenuEx [SHELL32.116]
*/
HRESULT WINAPI FileMenu_TrackPopupMenuEx (
BOOL WINAPI FileMenu_TrackPopupMenuEx (
HMENU hMenu,
UINT uFlags,
int x,

View File

@ -176,11 +176,11 @@ type win32
@ stub PathAddExtensionA
@ stub PathAddExtensionW
@ stdcall PathAppendA (str str) PathAppendA
@ stub PathAppendW
@ stdcall PathAppendW (str str) PathAppendW
@ stdcall PathBuildRootA (ptr long) PathBuildRootA
@ stub PathBuildRootW
@ stub PathCanonicalizeA
@ stub PathCanonicalizeW
@ stdcall PathBuildRootW (ptr long) PathBuildRootW
@ stdcall PathCanonicalizeA (ptr str) PathCanonicalizeA
@ stdcall PathCanonicalizeW (ptr wstr) PathCanonicalizeW
@ stdcall PathCombineA (ptr ptr ptr) PathCombineA
@ stdcall PathCombineW (ptr ptr ptr) PathCombineW
@ stub PathCommonPrefixA
@ -192,21 +192,21 @@ type win32
@ stub PathCreateFromUrlA
@ stub PathCreateFromUrlW
@ stdcall PathFileExistsA (str) PathFileExistsA
@ stub PathFileExistsW
@ stdcall PathFindExtensionA (ptr) PathFindExtensionA
@ stdcall PathFindExtensionW (ptr) PathFindExtensionW
@ stdcall PathFindFileNameA (ptr) PathFindFilenameA
@ stdcall PathFindFileNameW (ptr) PathFindFilenameW
@ stub PathFindNextComponentA
@ stub PathFindNextComponentW
@ stdcall PathFindOnPathA (ptr ptr) PathFindOnPathA
@ stdcall PathFindOnPathW (ptr ptr) PathFindOnPathW
@ stdcall PathFileExistsW (wstr) PathFileExistsW
@ stdcall PathFindExtensionA (str) PathFindExtensionA
@ stdcall PathFindExtensionW (wstr) PathFindExtensionW
@ stdcall PathFindFileNameA (str) PathFindFileNameA
@ stdcall PathFindFileNameW (wstr) PathFindFileNameW
@ stdcall PathFindNextComponentA (str) PathFindNextComponentA
@ stdcall PathFindNextComponentW (wstr) PathFindNextComponentW
@ stdcall PathFindOnPathA (str ptr) PathFindOnPathA
@ stdcall PathFindOnPathW (wstr ptr) PathFindOnPathW
@ stdcall PathGetArgsA (str) PathGetArgsA
@ stdcall PathGetArgsW (str) PathGetArgsW
@ stdcall PathGetArgsW (wstr) PathGetArgsW
@ stub PathGetCharTypeA
@ stub PathGetCharTypeW
@ stdcall PathGetDriveNumberA(str) PathGetDriveNumberA
@ stdcall PathGetDriveNumberW(str) PathGetDriveNumberW
@ stdcall PathGetDriveNumberA (str) PathGetDriveNumberA
@ stdcall PathGetDriveNumberW (wstr) PathGetDriveNumberW
@ stub PathIsContentTypeA
@ stub PathIsContentTypeW
@ stdcall PathIsDirectoryA(str) PathIsDirectoryA
@ -215,44 +215,44 @@ type win32
@ stub PathIsFileSpecW
@ stub PathIsPrefixA
@ stub PathIsPrefixW
@ stdcall PathIsRelativeA (ptr) PathIsRelativeA
@ stdcall PathIsRelativeW (ptr) PathIsRelativeW
@ stdcall PathIsRelativeA (str) PathIsRelativeA
@ stdcall PathIsRelativeW (wstr) PathIsRelativeW
@ stdcall PathIsRootA(str) PathIsRootA
@ stdcall PathIsRootW(wstr) PathIsRootW
@ stub PathIsSameRootA
@ stub PathIsSameRootW
@ stdcall PathIsSameRootA(str str) PathIsSameRootA
@ stdcall PathIsSameRootW(wstr wstr) PathIsSameRootW
@ stub PathIsSystemFolderA
@ stub PathIsSystemFolderW
@ stdcall PathIsUNCA (ptr) PathIsUNCA
@ stdcall PathIsUNCA (str) PathIsUNCA
@ stub PathIsUNCServerA
@ stub PathIsUNCServerShareA
@ stub PathIsUNCServerShareW
@ stub PathIsUNCServerW
@ stdcall PathIsUNCW(wstr) PathIsUNCW
@ stdcall PathIsURLA(str) PathIsURLA
@ stub PathIsURLW
@ stdcall PathIsURLW(wstr) PathIsURLW
@ stub PathMakePrettyA
@ stub PathMakePrettyW
@ stub PathMakeSystemFolderA
@ stub PathMakeSystemFolderW
@ stdcall PathMatchSpecA (str str) PathMatchSpecA
@ stdcall PathMatchSpecW (str str) PathMatchSpecW
@ stub PathParseIconLocationA
@ stub PathParseIconLocationW
@ stdcall PathParseIconLocationA (str) PathParseIconLocationA
@ stdcall PathParseIconLocationW (wstr) PathParseIconLocationW
@ stdcall PathQuoteSpacesA (ptr) PathQuoteSpacesA
@ stdcall PathQuoteSpacesW (ptr) PathQuoteSpacesW
@ stub PathRelativePathToA
@ stub PathRelativePathToW
@ stub PathRemoveArgsA
@ stub PathRemoveArgsW
@ stdcall PathRemoveBackslashA (ptr) PathRemoveBackslashA
@ stdcall PathRemoveBackslashW (ptr) PathRemoveBackslashW
@ stdcall PathRemoveArgsA(str)PathRemoveArgsA
@ stdcall PathRemoveArgsW(wstr)PathRemoveArgsW
@ stdcall PathRemoveBackslashA (str) PathRemoveBackslashA
@ stdcall PathRemoveBackslashW (wstr) PathRemoveBackslashW
@ stdcall PathRemoveBlanksA(str) PathRemoveBlanksA
@ stdcall PathRemoveBlanksW(wstr) PathRemoveBlanksW
@ stub PathRemoveExtensionA
@ stub PathRemoveExtensionW
@ stdcall PathRemoveExtensionA(str)PathRemoveExtensionA
@ stdcall PathRemoveExtensionW(wstr)PathRemoveExtensionW
@ stdcall PathRemoveFileSpecA (str) PathRemoveFileSpecA
@ stub PathRemoveFileSpecW
@ stdcall PathRemoveFileSpecW (wstr) PathRemoveFileSpecW
@ stub PathRenameExtensionA
@ stub PathRenameExtensionW
@ stub PathSearchAndQualifyA
@ -261,19 +261,19 @@ type win32
@ stdcall PathSetDlgItemPathW (long long ptr) PathSetDlgItemPathW
@ stub PathSkipRootA
@ stub PathSkipRootW
@ stub PathStripPathA
@ stub PathStripPathW
@ stub PathStripToRootA
@ stub PathStripToRootW
@ stdcall PathStripPathA(str)PathStripPathA
@ stdcall PathStripPathW(wstr)PathStripPathW
@ stdcall PathStripToRootA(str)PathStripToRootA
@ stdcall PathStripToRootW(wstr)PathStripToRootW
@ stub PathUnmakeSystemFolderA
@ stub PathUnmakeSystemFolderW
@ stdcall PathUnquoteSpacesA (str) PathUnquoteSpacesA
@ stdcall PathUnquoteSpacesW (str) PathUnquoteSpacesW
@ stdcall PathUnquoteSpacesW (wstr) PathUnquoteSpacesW
@ stub SHCreateShellPalette
@ stub SHDeleteEmptyKeyA
@ stub SHDeleteEmptyKeyW
@ stdcall SHDeleteKeyA(long str)SHRegDeleteKeyA
@ stdcall SHDeleteKeyW(long str)SHRegDeleteKeyW
@ stdcall SHDeleteKeyW(long wstr)SHRegDeleteKeyW
@ stub SHDeleteOrphanKeyA
@ stub SHDeleteOrphanKeyW
@ stub SHDeleteValueA

View File

@ -129,6 +129,8 @@ STRINGTABLE DISCARDABLE
{
IDS_CREATEFOLDER_DENIED "Can not create new Folder: Permission denied."
IDS_CREATEFOLDER_CAPTION "Error during creating a new folder"
IDS_DELETEFOLDER_TEXT "Are you sure you want to delete %1 and all it's subfolders?"
IDS_DELETEFOLDER_CAPTION "Confirm file delete"
}
shv_accel ACCELERATORS

View File

@ -24,5 +24,6 @@
#define IDS_CREATEFOLDER_DENIED 30
#define IDS_CREATEFOLDER_CAPTION 31
#define IDS_DELETEFOLDER_TEXT 32
#define IDS_DELETEFOLDER_CAPTION 33
#endif

View File

@ -16,6 +16,7 @@
#include "shell32_main.h"
#include "shellfolder.h"
#include "shell.h" /* DROPFILESTRUCT */
#include "wine/undocshell.h"
DEFAULT_DEBUG_CHANNEL(shell)

View File

@ -65,6 +65,7 @@ typedef struct
{ WORD cb; /* nr of bytes in this item */
BYTE abID[1];/* first byte in this item */
} SHITEMID,*LPSHITEMID;
typedef LPSHITEMID const LPCSHITEMID;
typedef struct
{ SHITEMID mkid; /* first itemid in list */
@ -87,94 +88,11 @@ DWORD WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
* SHGetSpecialFolderLocation API
*/
HRESULT WINAPI SHGetSpecialFolderLocation(HWND, INT, LPITEMIDLIST *);
/****************************************************************************
* string and path functions
*/
BOOL WINAPI PathIsRootA(LPCSTR x);
BOOL WINAPI PathIsRootW(LPCWSTR x);
#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
BOOL WINAPI PathIsRootAW(LPCVOID x);
LPSTR WINAPI PathAddBackslashA(LPSTR path);
LPWSTR WINAPI PathAddBackslashW(LPWSTR path);
#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
LPVOID WINAPI PathAddBackslashAW(LPVOID path);
BOOL WINAPI PathQualifyA(LPCSTR path);
BOOL WINAPI PathQualifyW(LPCWSTR path);
#define PathQualify WINELIB_NAME_AW(PathQualify)
BOOL WINAPI PathQualifyAW(LPCVOID path);
LPSTR WINAPI PathQuoteSpacesA(LPCSTR path);
LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);
#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
LPVOID WINAPI PathQuoteSpacesAW(LPCVOID path);
LPSTR WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
#define PathCombine WINELIB_NAME_AW(PathCombine)
LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
LPCSTR WINAPI PathFindExtensionA(LPCSTR path);
LPCWSTR WINAPI PathFindExtensionW(LPCWSTR path);
#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
LPCVOID WINAPI PathFindExtensionAW(LPCVOID path);
LPCSTR WINAPI PathGetExtensionA(LPCSTR path, DWORD y, DWORD x);
LPCWSTR WINAPI PathGetExtensionW(LPCWSTR path, DWORD y, DWORD x);
#define PathGetExtension WINELIB_NAME_AW(PathGetExtension)
LPCVOID WINAPI PathGetExtensionAW(LPCVOID path, DWORD y, DWORD x);
LPCSTR WINAPI PathFindFilenameA(LPCSTR path);
LPCWSTR WINAPI PathFindFilenameW(LPCWSTR path);
#define PathFindFilename WINELIB_NAME_AW(PathFindFilename)
LPCVOID WINAPI PathFindFilenameAW(LPCVOID path);
BOOL WINAPI PathMatchSpecA(LPCSTR x, LPCSTR y);
BOOL WINAPI PathMatchSpecW(LPCWSTR x, LPCWSTR y);
#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
BOOL WINAPI PathMatchSpecAW(LPVOID x, LPVOID y);
LPSTR WINAPI PathRemoveBlanksA(LPSTR str);
LPWSTR WINAPI PathRemoveBlanksW(LPWSTR str);
#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
LPVOID WINAPI PathRemoveBlanksAW(LPVOID str);
BOOL WINAPI PathIsRelativeA(LPCSTR str);
BOOL WINAPI PathIsRelativeW(LPCWSTR str);
#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
BOOL WINAPI PathIsRelativeAW(LPCVOID str);
BOOL WINAPI PathIsUNCA(LPCSTR str);
BOOL WINAPI PathIsUNCW(LPCWSTR str);
#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
BOOL WINAPI PathIsUNCAW(LPCVOID str);
BOOL WINAPI PathIsURLA(LPCSTR str);
BOOL WINAPI PathIsURLW(LPCWSTR str);
#define PathIsURL WINELIB_NAME_AW(PathIsURL)
BOOL WINAPI PathIsURLAW(LPCVOID str);
BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
#define StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
DWORD WINAPI PathCleanupSpecA(LPSTR x, LPSTR y);
DWORD WINAPI PathCleanupSpecW(LPWSTR x, LPWSTR y);
#define PathCleanupSpec WINELIB_NAME_AW(PathCleanupSpec)
/****************************************************************************
* other functions
*/
LPVOID WINAPI SHAlloc(DWORD len);
DWORD WINAPI SHFree(LPVOID x);
#define CSIDL_DESKTOP 0x0000
#define CSIDL_PROGRAMS 0x0002
#define CSIDL_CONTROLS 0x0003

View File

@ -72,13 +72,9 @@ extern UINT cfFileContents;
* IShellView interface
*/
typedef GUID SHELLVIEWID;
#define SV_CLASS_NAME ("SHELLDLL_DefView")
UINT WINAPI SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER sh, LPITEMIDLIST pidl, UINT * pIndex);
/****************************************************************************
* IShellIcon interface
*/
@ -341,29 +337,6 @@ typedef struct _SHELLVIEWDATA /* idl */
DWORD WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
/****************************************************************************
* Shell File Menu API
*/
/* FileMenu_Create nSelHeight */
#define FM_FULL_SELHEIGHT -1;
#define FM_DEFAULT_SELHEIGHT 0
/* FileMenu_Create uFlags */
#define FMF_SMALL_ICONS 0x00
#define FMF_LARGE_ICONS 0x08
#define FMF_NO_COLUMN_BREAK 0x10
/* FileMenu_InsertUsingPidl uFlags */
#define FMF_NO_EMPTY_ITEM 0x01
#define FMF_NO_PROGRAM_GROUPS 0x04
typedef void (CALLBACK * LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
/* FileMenu_AppendItem lpszText */
#define FM_SEPARATOR (LPCSTR)1
#define FM_BLANK_ICON -1
#define FM_DEFAULT_HEIGHT 0
/**********************************************************************
* SHGetSettings ()
*/

36
include/shlwapi.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef __WINE_SHLWAPI_H
#define __WINE_SHLWAPI_H
#include "windef.h"
#include "wine/obj_queryassociations.h"
#ifdef __cplusplus
extern "C" {
#endif /* defined(__cplusplus) */
LPSTR WINAPI PathFindFileNameA(LPCSTR pPath);
LPWSTR WINAPI PathFindFileNameW(LPCWSTR pPath);
#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
LPVOID WINAPI PathFindFileNameAW(LPCVOID path);
int WINAPI PathGetDriveNumberA(LPCSTR lpszPath);
int WINAPI PathGetDriveNumberW(LPCWSTR lpszPath);
#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
BOOL WINAPI PathCanonicalizeA(LPSTR lpszDst, LPCSTR lpszSrc);
BOOL WINAPI PathCanonicalizeW(LPWSTR lpszDst, LPCWSTR lpszSrc);
#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
LPSTR WINAPI PathFindNextComponentA(LPCSTR pszPath);
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR pszPath);
#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
BOOL WINAPI PathIsURLA(LPCSTR pszPath);
BOOL WINAPI PathIsURLW(LPCWSTR pszPath);
#define PathIsURL WINELIB_NAME_AW(PathIsURL)
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */
#endif /* __WINE_SHLWAPI_H */

View File

@ -58,14 +58,6 @@ DEFINE_SHLGUID(IID_IShellBrowser, 0x000214E2L, 0, 0);
#define FCT_CONFIGABLE 0x0002
#define FCT_ADDTOEND 0x0004
/* undocumented, found in the web posted by Chris Becke */
#define CWM_SETPATH (WM_USER+2)
#define CWM_WANTIDLE (WM_USER+3)
#define CWM_GETSETCURRENTINFO (WM_USER+4)
#define CWM_SELECTITEM (WM_USER+5)
#define CWM_STOPWAITING (WM_USER+6)
#define CWM_GETISHELLBROWSER (WM_USER+7)
#define ICOM_INTERFACE IShellBrowser
#define IShellBrowser_METHODS \
ICOM_METHOD2(HRESULT, InsertMenusSB, HMENU, hmenuShared, LPOLEMENUGROUPWIDTHS, lpMenuWidths) \

View File

@ -2,8 +2,11 @@
#define __WINE_UNDOCSHELL_H
#include "windef.h"
#include "shell.h"
#include "wine/obj_shellfolder.h" /* strret */
//#include "shell.h"
#include "commctrl.h"
#include "wine/obj_shellfolder.h"
#include "wine/obj_shellview.h"
#include "wine/obj_dragdrop.h"
#ifdef __cplusplus
extern "C" {
@ -14,46 +17,113 @@ extern "C" {
*/
LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl);
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl);
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST iil1,LPCITEMIDLIST iil2);
LPITEMIDLIST WINAPI ILCombine(
LPCITEMIDLIST iil1,
LPCITEMIDLIST iil2);
DWORD WINAPI ILGetSize(LPITEMIDLIST pidl);
LPITEMIDLIST WINAPI ILGetNext(LPITEMIDLIST pidl);
LPITEMIDLIST WINAPI ILFindLastID(LPITEMIDLIST pidl);
BOOL WINAPI ILRemoveLastID(LPCITEMIDLIST pidl);
LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1,LPCITEMIDLIST pidl2);
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
LPITEMIDLIST WINAPI ILFindChild(
LPCITEMIDLIST pidl1,
LPCITEMIDLIST pidl2);
BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl,LPSTR path);
LPITEMIDLIST WINAPI ILAppendID(
LPITEMIDLIST pidl,
LPCSHITEMID lpItemID,
BOOL bAddToEnd);
BOOL WINAPI ILIsEqual(
LPCITEMIDLIST pidl1,
LPCITEMIDLIST pidl2);
BOOL WINAPI ILIsParent(
LPCITEMIDLIST pidlParent,
LPCITEMIDLIST pidlChild,
BOOL bImmediate);
BOOL WINAPI ILGetDisplayName(
LPCITEMIDLIST pidl,
LPSTR path);
DWORD WINAPI ILFree(LPITEMIDLIST pidl);
HRESULT WINAPI ILSaveToStream(
LPSTREAM pstrm,
LPCITEMIDLIST pidl);
HRESULT WINAPI ILLoadFromStream(
LPSTREAM pstrm,
LPITEMIDLIST *ppidl);
LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
void WINAPI ILGlobalFree(LPCITEMIDLIST pidl);
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath);
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath);
HRESULT WINAPI SHILCreateFromPathA (LPCSTR path, LPITEMIDLIST * ppidl, DWORD *attributes);
HRESULT WINAPI SHILCreateFromPathW (LPCWSTR path, LPITEMIDLIST * ppidl, DWORD *attributes);
HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD *attributes);
HRESULT WINAPI SHILCreateFromPathA (
LPCSTR path,
LPITEMIDLIST * ppidl,
DWORD *attributes);
HRESULT WINAPI SHILCreateFromPathW (
LPCWSTR path,
LPITEMIDLIST * ppidl,
DWORD *attributes);
HRESULT WINAPI SHILCreateFromPathAW (
LPCVOID path,
LPITEMIDLIST * ppidl,
DWORD *attributes);
LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path);
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path);
LPITEMIDLIST WINAPI ILCreateFromPathAW(LPCVOID path);
HRESULT WINAPI SHBindToParent(
LPCITEMIDLIST pidl,
REFIID riid,
LPVOID *ppv,
LPCITEMIDLIST *ppidlLast);
/*
string functions
*/
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
HRESULT WINAPI StrRetToStrNA (
LPVOID dest,
DWORD len,
LPSTRRET src,
LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToStrNAW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToStrNW (
LPVOID dest,
DWORD len,
LPSTRRET src,
LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToBufA (LPSTRRET src, LPITEMIDLIST pidl, LPSTR dest, DWORD len);
HRESULT WINAPI StrRetToBufW (LPSTRRET src, LPITEMIDLIST pidl, LPWSTR dest, DWORD len);
HRESULT WINAPI StrRetToStrNAW (
LPVOID dest,
DWORD len,
LPSTRRET src,
LPITEMIDLIST pidl);
HRESULT WINAPI StrRetToBufA (
LPSTRRET src,
LPITEMIDLIST pidl,
LPSTR dest,
DWORD len);
HRESULT WINAPI StrRetToBufW (
LPSTRRET src,
LPITEMIDLIST pidl,
LPWSTR dest,
DWORD len);
/****************************************************************************
* SHChangeNotifyRegister API
@ -78,16 +148,822 @@ typedef struct
} DWORDITEMID;
HANDLE WINAPI SHChangeNotifyRegister(
HWND hwnd,
LONG dwFlags,
LONG wEventMask,
DWORD uMsg,
int cItems,
LPCNOTIFYREGISTER lpItems);
HWND hwnd,
LONG dwFlags,
LONG wEventMask,
DWORD uMsg,
int cItems,
LPCNOTIFYREGISTER lpItems);
BOOL WINAPI SHChangeNotifyDeregister( HANDLE hNotify);
BOOL WINAPI SHChangeNotifyDeregister(HANDLE hNotify);
HANDLE WINAPI SHChangeNotification_Lock(
HANDLE hMemoryMap,
DWORD dwProcessId,
LPCITEMIDLIST **lppidls,
LPLONG lpwEventId);
BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
/****************************************************************************
* Shell Common Dialogs
*/
BOOL WINAPI PickIconDlg(
HWND hwndOwner,
LPSTR lpstrFile,
DWORD nMaxFile,
LPDWORD lpdwIconIndex);
/* RunFileDlg flags */
#define RFF_NOBROWSE 0x01
#define RFF_NODEFAULT 0x02
#define RFF_CALCDIRECTORY 0x04
#define RFF_NOLABEL 0x08
#define RFF_NOSEPARATEMEM 0x20 /* NT only */
/* RunFileFlg notification structure */
typedef struct
{
NMHDR hdr;
LPCSTR lpFile;
LPCSTR lpDirectory;
int nShow;
} NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
/* RunFileDlg notification return values */
#define RF_OK 0x00
#define RF_CANCEL 0x01
#define RF_RETRY 0x02
void WINAPI RunFileDlg(
HWND hwndOwner,
HICON hIcon,
LPCSTR lpstrDirectory,
LPCSTR lpstrTitle,
LPCSTR lpstrDescription,
UINT uFlags);
void WINAPI ExitWindowsDialog(HWND hwndOwner);
int WINAPI RestartDialog(
HWND hwndOwner,
LPCSTR lpstrReason,
UINT uFlags);
BOOL WINAPI GetFileNameFromBrowse(
HWND hwndOwner,
LPSTR lpstrFile,
DWORD nMaxFile,
LPCSTR lpstrInitialDir,
LPCSTR lpstrDefExt,
LPCSTR lpstrFilter,
LPCSTR lpstrTitle);
BOOL WINAPI SHFindFiles(
LPCITEMIDLIST pidlRoot,
LPCITEMIDLIST pidlSavedSearch);
BOOL WINAPI SHFindComputer(
LPCITEMIDLIST pidlRoot,
LPCITEMIDLIST pidlSavedSearch);
/* SHObjectProperties flags */
#define OPF_PRINTERNAME 0x01
#define OPF_PATHNAME 0x02
BOOL WINAPI SHObjectProperties(
HWND hwndOwner,
UINT uFlags,
LPCSTR lpstrName,
LPCSTR lpstrParameters);
void WINAPI SHHandleDiskFull(HWND hwndOwner,
UINT uDrive);
int WINAPI SHOutOfMemoryMessageBox(
HWND hwndOwner,
LPCSTR lpCaption,
UINT uType);
DWORD WINAPI SHNetConnectionDialog(
HWND hwndOwner,
LPCSTR lpstrRemoteName,
DWORD dwType);
int WINAPIV ShellMessageBoxA(
HINSTANCE hInstance,
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType,
...);
int WINAPIV ShellMessageBoxW(
HINSTANCE hInstance,
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType,
...);
#define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
/****************************************************************************
* Memory Routines
*/
LPVOID WINAPI SHAlloc(ULONG cb);
void WINAPI SHFree(LPVOID pv);
HANDLE WINAPI SHAllocShared(
LPVOID pv,
ULONG cb,
DWORD pid);
BOOL WINAPI SHFreeShared(
HANDLE hMem,
DWORD pid);
LPVOID WINAPI SHLockShared(
HANDLE hMem,
DWORD pid);
BOOL WINAPI SHUnlockShared(LPVOID pv);
/****************************************************************************
* Cabinet Window Messages
*/
#define CWM_SETPATH (WM_USER + 2)
#define CWM_WANTIDLE (WM_USER + 3)
#define CWM_GETSETCURRENTINFO (WM_USER + 4)
#define CWM_SELECTITEM (WM_USER + 5)
#define CWM_SELECTITEMSTR (WM_USER + 6)
#define CWM_GETISHELLBROWSER (WM_USER + 7)
#define CWM_TESTPATH (WM_USER + 9)
#define CWM_STATECHANGE (WM_USER + 10)
#define CWM_GETPATH (WM_USER + 12)
/* CWM_TESTPATH types */
#define CWTP_ISEQUAL 0
#define CWTP_ISCHILD 1
/* CWM_TESTPATH structure */
typedef struct
{
DWORD dwType;
ITEMIDLIST idl;
} CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
/****************************************************************************
* System Imagelist Routines
*/
int WINAPI Shell_GetCachedImageIndex(
LPCSTR lpszFileName,
UINT nIconIndex,
BOOL bSimulateDoc);
BOOL WINAPI Shell_GetImageLists(
HIMAGELIST *lphimlLarge,
HIMAGELIST *lphimlSmall);
HICON WINAPI SHGetFileIcon(
DWORD dwReserved,
LPCSTR lpszPath,
DWORD dwFileAttributes,
UINT uFlags);
int WINAPI SHMapPIDLToSystemImageListIndex(
LPSHELLFOLDER psf,
LPCITEMIDLIST pidl,
UINT * pOpenIndex);
BOOL WINAPI FileIconInit(BOOL bFullInit);
/****************************************************************************
* File Menu Routines
*/
/* FileMenu_Create nSelHeight constants */
#define FM_DEFAULT_SELHEIGHT -1
#define FM_FULL_SELHEIGHT 0
/* FileMenu_Create flags */
#define FMF_SMALL_ICONS 0x00
#define FMF_LARGE_ICONS 0x08
#define FMF_NO_COLUMN_BREAK 0x10
HMENU WINAPI FileMenu_Create(
COLORREF crBorderColor,
int nBorderWidth,
HBITMAP hBorderBmp,
int nSelHeight,
UINT uFlags);
void WINAPI FileMenu_Destroy(HMENU hMenu);
/* FileMenu_AppendItem constants */
#define FM_SEPARATOR (LPCSTR)1
#define FM_BLANK_ICON -1
#define FM_DEFAULT_HEIGHT 0
BOOL WINAPI FileMenu_AppendItem(
HMENU hMenu,
LPCSTR lpszText,
UINT uID,
int iIcon,
HMENU hMenuPopup,
int nItemHeight);
/* FileMenu_InsertUsingPidl flags */
#define FMF_NO_EMPTY_ITEM 0x01
#define FMF_NO_PROGRAM_GROUPS 0x04
/* FileMenu_InsertUsingPidl callback function */
typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
int WINAPI FileMenu_InsertUsingPidl(
HMENU hMenu,
UINT uID,
LPCITEMIDLIST pidl,
UINT uFlags,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback);
int WINAPI FileMenu_ReplaceUsingPidl(
HMENU hMenu,
UINT uID,
LPCITEMIDLIST pidl,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback);
void WINAPI FileMenu_Invalidate(HMENU hMenu);
HMENU WINAPI FileMenu_FindSubMenuByPidl(
HMENU hMenu,
LPCITEMIDLIST pidl);
BOOL WINAPI FileMenu_TrackPopupMenuEx(
HMENU hMenu,
UINT uFlags,
int x,
int y,
HWND hWnd,
LPTPMPARAMS lptpm);
BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
UINT uReserved,
LPITEMIDLIST *ppidlFolder,
LPITEMIDLIST *ppidlItem);
LRESULT WINAPI FileMenu_MeasureItem(
HWND hWnd,
LPMEASUREITEMSTRUCT lpmis);
LRESULT WINAPI FileMenu_DrawItem(
HWND hWnd,
LPDRAWITEMSTRUCT lpdis);
BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
void WINAPI FileMenu_AbortInitMenu(void);
LRESULT WINAPI FileMenu_HandleMenuChar(
HMENU hMenu,
WPARAM wParam);
BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
BOOL WINAPI FileMenu_DeleteItemByCmd(
HMENU hMenu,
UINT uID);
BOOL WINAPI FileMenu_DeleteItemByIndex(
HMENU hMenu,
UINT uPos);
BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
HMENU hMenu,
UINT uID);
BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
BOOL WINAPI FileMenu_EnableItemByCmd(
HMENU hMenu,
UINT uID,
BOOL bEnable);
DWORD WINAPI FileMenu_GetItemExtent(
HMENU hMenu,
UINT uPos);
int WINAPI FileMenu_AppendFilesForPidl(
HMENU hMenu,
LPCITEMIDLIST pidl,
BOOL bAddSeparator);
int WINAPI FileMenu_AddFilesForPidl(
HMENU hMenu,
UINT uReserved,
UINT uID,
LPCITEMIDLIST pidl,
UINT uFlags,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback);
/****************************************************************************
* Drag And Drop Routines
*/
HRESULT WINAPI SHLoadOLE(DWORD dwFlags);
HRESULT WINAPI SHRegisterDragDrop(
HWND hWnd,
LPDROPTARGET lpDropTarget);
HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
HRESULT WINAPI SHDoDragDrop(
HWND hWnd,
LPDATAOBJECT lpDataObject,
LPDROPSOURCE lpDropSource,
DWORD dwOKEffect,
LPDWORD pdwEffect);
BOOL WINAPI DAD_DragEnter(HWND hWnd);
BOOL WINAPI DAD_DragEnterEx(
HWND hWnd,
POINT pt);
BOOL WINAPI DAD_DragMove(POINT pt);
/* DAD_AutoScroll return values */
#define DAD_SCROLL_UP 1
#define DAD_SCROLL_DOWN 2
#define DAD_SCROLL_LEFT 4
#define DAD_SCROLL_RIGHT 8
/* DAD_AutoScroll sample structure */
typedef struct
{
DWORD dwCount;
DWORD dwLastTime;
BOOL bWrapped;
POINT aptPositions[3];
DWORD adwTimes[3];
} SCROLLSAMPLES, *LPSCROLLSAMPLES;
DWORD WINAPI DAD_AutoScroll(HWND hWnd,
LPSCROLLSAMPLES lpSamples,
LPPOINT lppt);
BOOL WINAPI DAD_DragLeave();
BOOL WINAPI DAD_SetDragImageFromListView(
HWND hWnd,
POINT pt);
BOOL WINAPI DAD_SetDragImage(
HIMAGELIST himlTrack,
LPPOINT lppt);
BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
HRESULT WINAPI SHCreateStdEnumFmtEtc(
DWORD cFormats,
const FORMATETC *lpFormats,
LPENUMFORMATETC *ppenumFormatetc);
HRESULT WINAPI CIDLData_CreateFromIDArray(
LPCITEMIDLIST pidlFolder,
DWORD cpidlFiles,
LPCITEMIDLIST *lppidlFiles,
LPDATAOBJECT *ppdataObject);
/****************************************************************************
* Path Manipulation Routines
*/
LPSTR WINAPI PathAppend(
LPSTR lpszPath1,
LPCSTR lpszPath2);
LPSTR WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
#define PathCombine WINELIB_NAME_AW(PathCombine)
LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
LPSTR WINAPI PathAddBackslashA(LPSTR path);
LPWSTR WINAPI PathAddBackslashW(LPWSTR path);
#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
LPVOID WINAPI PathAddBackslashAW(LPVOID path);
LPSTR WINAPI PathRemoveBackslashA(LPSTR lpszPath);
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath);
#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
LPSTR WINAPI PathBuildRoot(
LPSTR lpszPath,
int drive);
LPSTR WINAPI PathFindExtensionA(LPCSTR path);
LPWSTR WINAPI PathFindExtensionW(LPCWSTR path);
#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
LPVOID WINAPI PathFindExtensionAW(LPCVOID path);
LPSTR WINAPI PathGetExtensionA(LPCSTR lpszPath);
LPWSTR WINAPI PathGetExtensionW(LPCWSTR lpszPath);
#define PathGetExtension WINELIB_NAME_AW(PathGetExtension)
LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath);
LPSTR WINAPI PathGetArgs(LPCSTR lpszPath);
BOOL WINAPI PathRemoveFileSpec(LPSTR lpszPath);
LPSTR WINAPI PathGetShortPath(LPSTR lpszPath);
LPSTR WINAPI PathRemoveBlanksA(LPSTR lpszPath);
LPWSTR WINAPI PathRemoveBlanksW(LPWSTR lpszPath);
#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
LPVOID WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
LPSTR WINAPI PathQuoteSpacesA(LPCSTR path);
LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);
#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
LPVOID WINAPI PathQuoteSpacesAW(LPCVOID path);
void WINAPI PathUnquoteSpaces(LPSTR lpszPath);
BOOL WINAPI PathIsUNCA(LPCSTR lpszPath);
BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath);
#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
BOOL WINAPI PathIsRelativeA(LPCSTR lpszPath);
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath);
#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
BOOL WINAPI PathIsRootA(LPCSTR x);
BOOL WINAPI PathIsRootW(LPCWSTR x);
#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
BOOL WINAPI PathIsRootAW(LPCVOID x);
BOOL WINAPI PathIsExe(LPCSTR lpszPath);
BOOL WINAPI PathIsDirectory(LPCSTR lpszPath);
BOOL WINAPI PathFileExists(LPCSTR lpszPath);
BOOL WINAPI PathMatchSpecA(
LPCSTR lpszPath,
LPCSTR lpszSpec);
BOOL WINAPI PathMatchSpecW(
LPCWSTR lpszPath,
LPCWSTR lpszSpec);
#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
BOOL WINAPI PathMakeUniqueName(
LPSTR lpszBuffer,
DWORD dwBuffSize,
LPCSTR lpszShortName,
LPCSTR lpszLongName,
LPCSTR lpszPathName);
BOOL WINAPI PathYetAnotherMakeUniqueName(
LPSTR lpszBuffer,
LPCSTR lpszPathName,
LPCSTR lpszShortName,
LPCSTR lpszLongName);
BOOL WINAPI PathFindOnPath(
LPSTR lpszFile,
LPCSTR *alpszPaths);
/* PathCleanupSpec return values */
#define PCS_REPLACEDCHARS 0x00000001
#define PCS_REMOVEDCHARS 0x00000002
#define PCS_SHORTENED 0x00000004
#define PCS_PATHTOOLONG 0x80000008
DWORD WINAPI PathCleanupSpec(
LPCSTR lpszPath,
LPSTR lpszFile);
BOOL WINAPI PathQualifyA(LPCSTR path);
BOOL WINAPI PathQualifyW(LPCWSTR path);
#define PathQualify WINELIB_NAME_AW(PathQualify)
BOOL WINAPI PathQualifyAW(LPCVOID path);
/* PathResolve flags */
#define PRF_CHECKEXISTANCE 0x01
#define PRF_EXECUTABLE 0x02
#define PRF_QUALIFYONPATH 0x04
#define PRF_WINDOWS31 0x08
BOOL WINAPI PathResolve(
LPSTR lpszPath,
LPCSTR *alpszPaths,
DWORD dwFlags);
BOOL WINAPI PathSetDlgItemPath(
HWND hDlg,
int nIDDlgItem,
LPCSTR lpszPath);
/* PathProcessCommand flags */
#define PPCF_QUOTEPATH 0x01 /* implies PPCF_INCLUDEARGS */
#define PPCF_INCLUDEARGS 0x02
#define PPCF_NODIRECTORIES 0x10
#define PPCF_DONTRESOLVE 0x20
#define PPCF_PATHISRELATIVE 0x40
int WINAPI PathProcessCommand(
LPCWSTR lpszPath,
LPWSTR lpszBuff,
DWORD dwBuffSize,
DWORD dwFlags);
void WINAPI PathStripPath(LPWSTR lpszPath);
BOOL WINAPI PathStripToRoot(LPWSTR lpszPath);
void WINAPI PathRemoveArgs(LPWSTR lpszPath);
void WINAPI PathRemoveExtension(LPWSTR lpszPath);
int WINAPI PathParseIconLocation(LPWSTR lpszPath);
BOOL WINAPI PathIsSameRoot(
LPCWSTR lpszPath1,
LPCWSTR lpszPath2);
BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
#define StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
DWORD WINAPI PathCleanupSpecA(LPSTR x, LPSTR y);
DWORD WINAPI PathCleanupSpecW(LPWSTR x, LPWSTR y);
#define PathCleanupSpec WINELIB_NAME_AW(PathCleanupSpec)
/****************************************************************************
* Shell Namespace Routines
*/
/* SHCreateShellFolderViewEx callback function */
typedef HRESULT (CALLBACK* LPFNSFVCALLBACK)(
DWORD dwUser,
LPSHELLFOLDER pshf,
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
/* SHCreateShellFolderViewEx structure */
typedef struct
{
DWORD dwSize;
LPSHELLFOLDER pshf;
DWORD dwUser;
LPCITEMIDLIST pidlFolder;
DWORD dwEventId;
LPFNSFVCALLBACK lpfnCallback;
UINT uViewMode;
} SHELLFOLDERVIEWINFO, * LPSHELLFOLDERVIEWINFO;
typedef const SHELLFOLDERVIEWINFO * LPCSHELLFOLDERVIEWINFO;
HRESULT WINAPI SHCreateShellFolderViewEx(
LPCSHELLFOLDERVIEWINFO pshfvi,
LPSHELLVIEW *ppshv);
/* SHCreateShellFolderViewEx callback messages */
#define SFVCB_ADDTOMENU 0x0001
#define SFVCB_INVOKECOMMAND 0x0002
#define SFVCB_GETMENUHELP 0x0003
#define SFVCB_GETTOOLBARTIP 0x0004
#define SFVCB_GETTOOLBARINFO 0x0005
#define SFVCB_ADDTOOLBARITEMS 0x0006
#define SFVCB_INITMENUPOPUP 0x0007
#define SFVCB_SELECTIONCHANGED 0x0008
#define SFVCB_DRAWMENUITEM 0x0009
#define SFVCB_MEASUREMENUITEM 0x000A
#define SFVCB_EXITMENULOOP 0x000B
#define SFVCB_VIEWRELEASE 0x000C
#define SFVCB_GETNAMELENGTH 0x000D
#define SFVCB_CHANGENOTIFY 0x000E
#define SFVCB_WINDOWCREATED 0x000F
#define SFVCB_WINDOWCLOSING 0x0010
#define SFVCB_LISTREFRESHED 0x0011
#define SFVCB_WINDOWFOCUSED 0x0012
#define SFVCB_REGISTERCOPYHOOK 0x0014
#define SFVCB_COPYHOOKCALLBACK 0x0015
#define SFVCB_GETDETAILSOF 0x0017
#define SFVCB_COLUMNCLICK 0x0018
#define SFVCB_GETCHANGENOTIFYPIDL 0x0019
#define SFVCB_GETESTIMATEDCOUNT 0x001A
#define SFVCB_ADJUSTVIEWMODE 0x001B
#define SFVCB_REMOVEFROMMENU 0x001C
#define SFVCB_ADDINGOBJECT 0x001D
#define SFVCB_REMOVINGOBJECT 0x001E
#define SFVCB_UPDATESTATUSBAR 0x001F
#define SFVCB_ISSLOWREFRESH 0x0020
#define SFVCB_GETCOMMANDDIR 0x0021
#define SFVCB_GETCOLUMNSTREAM 0x0022
#define SFVCB_CANSELECTALL 0x0023
#define SFVCB_DRAGSUCCEEDED 0x0024
#define SFVCB_ISSTRICTREFRESH 0x0025
#define SFVCB_ISCHILDOBJECT 0x0026
/* Generic structure used by several messages */
typedef struct
{
DWORD dwReserved;
DWORD dwReserved2;
LPCITEMIDLIST pidl;
LPDWORD lpdwUser;
} SFVCBINFO, * LPSFVCBINFO;
typedef const SFVCBINFO * LPCSFVCBINFO;
/* SFVCB_ADDTOMENU structure */
typedef struct
{
HMENU hMenu;
UINT indexMenu;
UINT idCmdFirst;
UINT idCmdLast;
} SFVMENUINFO, * LPSFVMENUINFO;
/* SFVCB_GETTOOLBARINFO structure */
typedef struct
{
UINT nButtons;
UINT uFlags;
} SFVTOOLBARINFO, * LPSFVTOOLBARINFO;
/* SFVTOOLBARINFO flags */
typedef enum
{
SFVTI_ADDTOEND = 0,
SFVTI_ADDTOFRONT = 1,
SFVTI_OVERWRITE = 2
} SFVTIF;
/* SFVCB_SELECTIONCHANGED structure */
typedef struct
{
UINT uOldState;
UINT uNewState;
LPCITEMIDLIST pidl;
LPDWORD lpdwUser;
} SFVSELECTSTATE, * LPSFVSELECTSTATE;
typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
/* SFVCB_COPYHOOKCALLBACK structure */
typedef struct
{
HWND hwnd;
UINT wFunc;
UINT wFlags;
LPCSTR pszSrcFile;
DWORD dwSrcAttribs;
LPCSTR pszDestFile;
DWORD dwDestAttribs;
} SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
/* SFVCB_GETDETAILSOF structure */
typedef struct
{
LPCITEMIDLIST pidl;
int fmt;
int cx;
STRRET lpText;
} SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
int WINAPI SHShellFolderView_Message(
HWND hwndCabinet,
DWORD dwMessage,
DWORD dwParam);
/* SHShellFolderView_Message messages */
#define SFVM_REARRANGE 0x0001
#define SFVM_GETARRANGECOLUMN 0x0002
#define SFVM_ADDOBJECT 0x0003
#define SFVM_GETITEMCOUNT 0x0004
#define SFVM_GETITEMPIDL 0x0005
#define SFVM_REMOVEOBJECT 0x0006
#define SFVM_UPDATEOBJECT 0x0007
#define SFVM_SETREDRAW 0x0008
#define SFVM_GETSELECTEDOBJECTS 0x0009
#define SFVM_ISDROPONSOURCE 0x000A
#define SFVM_MOVEICONS 0x000B
#define SFVM_GETDRAGPOINT 0x000C
#define SFVM_GETDROPPOINT 0x000D
#define SFVM_SETOBJECTPOS 0x000E
#define SFVM_ISDROPONBACKGROUND 0x000F
#define SFVM_CUTOBJECTS 0x0010
#define SFVM_TOGGLEAUTOARRANGE 0x0011
#define SFVM_LINEUPICONS 0x0012
#define SFVM_GETAUTOARRANGE 0x0013
#define SFVM_GETSELECTEDCOUNT 0x0014
#define SFVM_GETITEMSPACING 0x0015
#define SFVM_REFRESHOBJECT 0x0016
#define SFVM_SETCLIPBOARDPOINTS 0x0017
/****************************************************************************
* Misc Stuff
*/
/* SHWaitForFileToOpen flags */
#define SHWFF_ADD 0x01
#define SHWFF_REMOVE 0x02
#define SHWFF_WAIT 0x04
BOOL WINAPI SHWaitForFileToOpen(
LPCITEMIDLIST pidl,
DWORD dwFlags,
DWORD dwTimeout);
WORD WINAPI ArrangeWindows(
HWND hwndParent,
DWORD dwReserved,
LPCRECT lpRect,
WORD cKids,
CONST HWND * lpKids);
/* RegisterShellHook types */
#define RSH_DEREGISTER 0
#define RSH_REGISTER 1
#define RSH_REGISTER_PROGMAN 2
#define RSH_REGISTER_TASKMAN 3
BOOL WINAPI RegisterShellHook(
HWND hWnd,
DWORD dwType);
/* SHCreateDefClassObject callback function */
typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)(
LPUNKNOWN pUnkOuter,
REFIID riidObject,
LPVOID *ppvObject);
HRESULT WINAPI SHCreateDefClassObject(
REFIID riidFactory,
LPVOID *ppvFactory,
LPFNCDCOCALLBACK lpfnCallback,
LPDWORD lpdwUsage,
REFIID riidObject);
HRESULT WINAPI SHCoCreateInstance(
LPCSTR lpszClsid,
REFCLSID rClsid,
LPUNKNOWN pUnkOuter,
REFIID riid,
LPVOID *ppv);
void WINAPI SHFreeUnusedLibraries();
/* SHCreateLinks flags */
#define SHCLF_PREFIXNAME 0x01
#define SHCLF_CREATEONDESKTOP 0x02
HRESULT WINAPI SHCreateLinks(
HWND hWnd,
LPCSTR lpszDir,
LPDATAOBJECT lpDataObject,
UINT uFlags,
LPITEMIDLIST *lppidlLinks);
/* SHGetNewLinkInfo flags */
#define SHGNLI_PIDL 0x01
#define SHGNLI_PREFIXNAME 0x02
#define SHGNLI_NOUNIQUE 0x04
BOOL WINAPI SHGetNewLinkInfoA(
LPCSTR pszLinkTo,
LPCSTR pszDir,
LPSTR pszName,
BOOL *pfMustCopy,
UINT uFlags);
BOOL WINAPI SHGetNewLinkInfoW(
LPCWSTR pszLinkTo,
LPCWSTR pszDir,
LPWSTR pszName,
BOOL *pfMustCopy,
UINT uFlags);
#define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
/* policy functions */
BOOL WINAPI SHInitRestricted(LPSTR, LPSTR);
#ifdef __cplusplus
} /* extern "C" */