mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 08:50:27 +00:00
[SHELL32] Make some PIDL (_IL*) functions Unicode (#7018)
There were encoding problems due to non- Unicode functions. JIRA issue: CORE-19653 - Adapt _ILGetDrive, _ILGetExtension, _ILGetFileAttributes, _ILGetFileDate, _ILGetFileSize, and _ILGetFileType functions to Unicode. - Adapt SHELL_IsShortcut and SHGetFileInfoW functions to Unicode. - Delete useless _ILSimpleGetText function.
This commit is contained in:
parent
91af99323f
commit
55898a7ffd
5 changed files with 78 additions and 175 deletions
|
@ -57,13 +57,13 @@ static int iDriveTypeIds[7] = { IDS_DRIVE_FIXED, /* DRIVE_UNKNOWN */
|
|||
|
||||
BOOL _ILGetDriveType(LPCITEMIDLIST pidl)
|
||||
{
|
||||
char szDrive[8];
|
||||
WCHAR szDrive[8];
|
||||
if (!_ILGetDrive(pidl, szDrive, _countof(szDrive)))
|
||||
{
|
||||
ERR("pidl %p is not a drive\n", pidl);
|
||||
return DRIVE_UNKNOWN;
|
||||
}
|
||||
return ::GetDriveTypeA(szDrive);
|
||||
return ::GetDriveTypeW(szDrive);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -285,16 +285,16 @@ HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf,
|
|||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
char szDrive[8] = {0};
|
||||
if (!_ILGetDrive(apidl[0], szDrive, sizeof(szDrive)))
|
||||
WCHAR szDrive[8] = {0};
|
||||
if (!_ILGetDrive(apidl[0], szDrive, _countof(szDrive)))
|
||||
{
|
||||
ERR("pidl is not a drive\n");
|
||||
SHFree(pidlFolder);
|
||||
_ILFreeaPidl(apidl, cidl);
|
||||
return E_FAIL;
|
||||
}
|
||||
nDriveType = GetDriveTypeA(szDrive);
|
||||
GetVolumeInformationA(szDrive, NULL, 0, NULL, NULL, &dwFlags, NULL, 0);
|
||||
nDriveType = GetDriveTypeW(szDrive);
|
||||
GetVolumeInformationW(szDrive, NULL, 0, NULL, NULL, &dwFlags, NULL, 0);
|
||||
|
||||
// custom command IDs
|
||||
#if 0 // Disabled until our menu building system is fixed
|
||||
|
|
|
@ -657,9 +657,9 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW
|
|||
|
||||
if (SFGAO_LINK & *pdwAttributes)
|
||||
{
|
||||
char ext[MAX_PATH];
|
||||
WCHAR ext[MAX_PATH];
|
||||
|
||||
if (_ILGetExtension(pidl, ext, MAX_PATH) && !lstrcmpiA(ext, "lnk"))
|
||||
if (_ILGetExtension(pidl, ext, _countof(ext)) && !lstrcmpiW(ext, L"lnk"))
|
||||
dwShellAttributes |= SFGAO_LINK;
|
||||
}
|
||||
|
||||
|
@ -1598,7 +1598,8 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl,
|
|||
else
|
||||
{
|
||||
hr = S_OK;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
psd->str.uType = STRRET_WSTR;
|
||||
psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc(MAX_PATH * sizeof(WCHAR));
|
||||
/* the data from the pidl */
|
||||
switch (iColumn)
|
||||
{
|
||||
|
@ -1606,19 +1607,19 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl,
|
|||
hr = GetDisplayNameOf (pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case SHFSF_COL_SIZE:
|
||||
_ILGetFileSize(pidl, psd->str.cStr, MAX_PATH);
|
||||
_ILGetFileSize(pidl, psd->str.pOleStr, MAX_PATH);
|
||||
break;
|
||||
case SHFSF_COL_TYPE:
|
||||
_ILGetFileType(pidl, psd->str.cStr, MAX_PATH);
|
||||
_ILGetFileType(pidl, psd->str.pOleStr, MAX_PATH);
|
||||
break;
|
||||
case SHFSF_COL_MDATE:
|
||||
_ILGetFileDate(pidl, psd->str.cStr, MAX_PATH);
|
||||
_ILGetFileDate(pidl, psd->str.pOleStr, MAX_PATH);
|
||||
break;
|
||||
case SHFSF_COL_FATTS:
|
||||
_ILGetFileAttributes(pidl, psd->str.cStr, MAX_PATH);
|
||||
_ILGetFileAttributes(pidl, psd->str.pOleStr, MAX_PATH);
|
||||
break;
|
||||
case SHFSF_COL_COMMENT:
|
||||
psd->str.cStr[0] = '\0'; // TODO: Extract comment from .lnk files? desktop.ini?
|
||||
psd->str.pOleStr[0] = UNICODE_NULL; // TODO: Extract comment from .lnk files? desktop.ini?
|
||||
break;
|
||||
#if DBG
|
||||
default:
|
||||
|
|
|
@ -1855,13 +1855,11 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
|
|||
pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
|
||||
if (pidlOut)
|
||||
{
|
||||
LPSTR pszDest;
|
||||
|
||||
pszDest = _ILGetTextPointer(pidlOut);
|
||||
LPSTR pszDest = _ILGetTextPointer(pidlOut);
|
||||
if (pszDest)
|
||||
{
|
||||
strcpy(pszDest, "x:\\");
|
||||
pszDest[0]=toupperW(lpszNew[0]);
|
||||
lstrcpyA(pszDest, "x:\\");
|
||||
pszDest[0] = toupper(lpszNew[0]);
|
||||
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
|
||||
}
|
||||
}
|
||||
|
@ -1893,7 +1891,7 @@ LPITEMIDLIST _ILCreateEntireNetwork(void)
|
|||
* RETURNS
|
||||
* strlen (lpszText)
|
||||
*/
|
||||
DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
|
||||
DWORD _ILGetDrive(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uSize)
|
||||
{
|
||||
TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
|
||||
|
||||
|
@ -1901,7 +1899,7 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
|
|||
pidl = ILGetNext(pidl);
|
||||
|
||||
if (pidl && _ILIsDrive(pidl))
|
||||
return _ILSimpleGetText(pidl, pOut, uSize);
|
||||
return _ILSimpleGetTextW(pidl, pOut, uSize);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2066,79 +2064,7 @@ BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
|
|||
* ### 3. section getting values from pidls ###
|
||||
*/
|
||||
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetText
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
*
|
||||
* returns the length of the string
|
||||
*/
|
||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
||||
{
|
||||
DWORD dwReturn=0;
|
||||
LPSTR szSrc;
|
||||
LPWSTR szSrcW;
|
||||
GUID const * riid;
|
||||
char szTemp[MAX_PATH];
|
||||
|
||||
TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
|
||||
|
||||
if (!pidl)
|
||||
return 0;
|
||||
|
||||
if (szOut)
|
||||
*szOut = 0;
|
||||
|
||||
if (_ILIsDesktop(pidl))
|
||||
{
|
||||
/* desktop */
|
||||
if (HCR_GetClassNameA(&CLSID_ShellDesktop, szTemp, MAX_PATH))
|
||||
{
|
||||
if (szOut)
|
||||
lstrcpynA(szOut, szTemp, uOutSize);
|
||||
|
||||
dwReturn = strlen (szTemp);
|
||||
}
|
||||
}
|
||||
else if (( szSrc = _ILGetTextPointer(pidl) ))
|
||||
{
|
||||
/* filesystem */
|
||||
if (szOut)
|
||||
lstrcpynA(szOut, szSrc, uOutSize);
|
||||
|
||||
dwReturn = strlen(szSrc);
|
||||
}
|
||||
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
|
||||
{
|
||||
/* unicode filesystem */
|
||||
WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
|
||||
|
||||
if (szOut)
|
||||
lstrcpynA(szOut, szTemp, uOutSize);
|
||||
|
||||
dwReturn = strlen (szTemp);
|
||||
}
|
||||
else if (( riid = _ILGetGUIDPointer(pidl) ))
|
||||
{
|
||||
/* special folder */
|
||||
if ( HCR_GetClassNameA(riid, szTemp, MAX_PATH) )
|
||||
{
|
||||
if (szOut)
|
||||
lstrcpynA(szOut, szTemp, uOutSize);
|
||||
|
||||
dwReturn = strlen (szTemp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ERR("-- no text\n");
|
||||
}
|
||||
|
||||
TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
|
||||
return dwReturn;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetTextW
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
|
@ -2171,7 +2097,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
|||
if (_ILIsDesktop(pidl))
|
||||
{
|
||||
/* desktop */
|
||||
if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, MAX_PATH))
|
||||
if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, _countof(szTemp)))
|
||||
{
|
||||
if (szOut)
|
||||
lstrcpynW(szOut, szTemp, uOutSize);
|
||||
|
@ -2190,7 +2116,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
|||
else if (( szSrc = _ILGetTextPointer(pidl) ))
|
||||
{
|
||||
/* filesystem */
|
||||
MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH);
|
||||
MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, _countof(szTemp));
|
||||
|
||||
if (szOut)
|
||||
lstrcpynW(szOut, szTemp, uOutSize);
|
||||
|
@ -2200,7 +2126,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
|||
else if (( riid = _ILGetGUIDPointer(pidl) ))
|
||||
{
|
||||
/* special folder */
|
||||
if ( HCR_GetClassNameW(riid, szTemp, MAX_PATH) )
|
||||
if ( HCR_GetClassNameW(riid, szTemp, _countof(szTemp)))
|
||||
{
|
||||
if (szOut)
|
||||
lstrcpynW(szOut, szTemp, uOutSize);
|
||||
|
@ -2460,7 +2386,7 @@ BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
BOOL _ILGetFileDate(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||
{
|
||||
FILETIME ft,lft;
|
||||
SYSTEMTIME time;
|
||||
|
@ -2471,17 +2397,17 @@ BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
FileTimeToLocalFileTime(&ft, &lft);
|
||||
FileTimeToSystemTime (&lft, &time);
|
||||
|
||||
ret = GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL, pOut, uOutSize);
|
||||
if (ret)
|
||||
ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, pOut, uOutSize);
|
||||
if (ret)
|
||||
{
|
||||
/* Append space + time without seconds */
|
||||
pOut[ret-1] = ' ';
|
||||
GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret);
|
||||
pOut[ret - 1] = L' ';
|
||||
GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pOut[0] = '\0';
|
||||
pOut[0] = UNICODE_NULL;
|
||||
ret = FALSE;
|
||||
}
|
||||
return ret;
|
||||
|
@ -2504,7 +2430,7 @@ BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
* pOut can be null when no string is needed
|
||||
*
|
||||
*/
|
||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||
{
|
||||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
DWORD dwSize;
|
||||
|
@ -2517,19 +2443,19 @@ DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
case PT_VALUE:
|
||||
dwSize = pdata->u.file.dwFileSize;
|
||||
if (pOut)
|
||||
StrFormatKBSizeA(dwSize, pOut, uOutSize);
|
||||
StrFormatKBSizeW(dwSize, pOut, uOutSize);
|
||||
return dwSize;
|
||||
}
|
||||
if (pOut)
|
||||
*pOut = 0x00;
|
||||
*pOut = UNICODE_NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||
{
|
||||
char szTemp[MAX_PATH];
|
||||
const char * pPoint;
|
||||
LPCITEMIDLIST pidlTemp=pidl;
|
||||
WCHAR szTemp[MAX_PATH];
|
||||
LPCWSTR pPoint;
|
||||
LPCITEMIDLIST pidlTemp = pidl;
|
||||
|
||||
TRACE("pidl=%p\n",pidl);
|
||||
|
||||
|
@ -2540,17 +2466,17 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
|
||||
if (!_ILIsValue(pidlTemp))
|
||||
return FALSE;
|
||||
if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH))
|
||||
if (!_ILSimpleGetTextW(pidlTemp, szTemp, _countof(szTemp)))
|
||||
return FALSE;
|
||||
|
||||
pPoint = PathFindExtensionA(szTemp);
|
||||
pPoint = PathFindExtensionW(szTemp);
|
||||
|
||||
if (!*pPoint)
|
||||
return FALSE;
|
||||
|
||||
pPoint++;
|
||||
lstrcpynA(pOut, pPoint, uOutSize);
|
||||
TRACE("%s\n",pOut);
|
||||
lstrcpynW(pOut, pPoint, uOutSize);
|
||||
TRACE("%s\n", debugstr_w(pOut));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -2571,60 +2497,41 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
* NOTES
|
||||
* This function copies as much as possible into the buffer.
|
||||
*/
|
||||
void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
void _ILGetFileType(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||
{
|
||||
#ifdef __REACTOS__ /* r32966 */
|
||||
char sType[64];
|
||||
#endif
|
||||
WCHAR sType[64], sTemp[64];
|
||||
|
||||
if(_ILIsValue(pidl))
|
||||
{
|
||||
char sTemp[64];
|
||||
|
||||
if(uOutSize > 0)
|
||||
pOut[0] = 0;
|
||||
#ifdef __REACTOS__ /* r32966 */
|
||||
if (_ILGetExtension (pidl, sType, 64))
|
||||
if (_ILGetExtension(pidl, sType, _countof(sType)))
|
||||
{
|
||||
if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE))
|
||||
if (HCR_MapTypeToValueW(sType, sTemp, _countof(sTemp), TRUE))
|
||||
{
|
||||
/* retrieve description */
|
||||
if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))
|
||||
if (HCR_MapTypeToValueW(sTemp, pOut, uOutSize, FALSE))
|
||||
return;
|
||||
}
|
||||
|
||||
/* display Ext-file as description */
|
||||
_strupr(sType);
|
||||
CharUpperW(sType);
|
||||
/* load localized file string */
|
||||
sTemp[0] = '\0';
|
||||
if(LoadStringA(shell32_hInstance, IDS_ANY_FILE, sTemp, 64))
|
||||
sTemp[0] = UNICODE_NULL;
|
||||
if (LoadStringW(shell32_hInstance, IDS_ANY_FILE, sTemp, _countof(sTemp)))
|
||||
{
|
||||
sTemp[63] = '\0';
|
||||
StringCchPrintfA(pOut, uOutSize, sTemp, sType);
|
||||
sTemp[_countof(sTemp) - 1] = UNICODE_NULL;
|
||||
StringCchPrintfW(pOut, uOutSize, sTemp, sType);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (_ILGetExtension (pidl, sTemp, 64))
|
||||
{
|
||||
if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE)
|
||||
&& HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )))
|
||||
{
|
||||
lstrcpynA (pOut, sTemp, uOutSize - 6);
|
||||
strcat (pOut, "-file");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
#ifdef __REACTOS__ /* r32966 */
|
||||
{
|
||||
pOut[0] = '\0';
|
||||
LoadStringA(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize);
|
||||
pOut[0] = UNICODE_NULL;
|
||||
LoadStringW(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize);
|
||||
/* make sure its null terminated */
|
||||
pOut[uOutSize-1] = '\0';
|
||||
pOut[uOutSize - 1] = UNICODE_NULL;
|
||||
}
|
||||
#else
|
||||
lstrcpynA(pOut, "Folder", uOutSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -2644,7 +2551,7 @@ void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
* return value 0 in case of error is a valid return value
|
||||
*
|
||||
*/
|
||||
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||
{
|
||||
LPPIDLDATA pData = _ILGetDataPointer(pidl);
|
||||
WORD wAttrib = 0;
|
||||
|
@ -2665,16 +2572,16 @@ DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
{
|
||||
i=0;
|
||||
if(wAttrib & FILE_ATTRIBUTE_READONLY)
|
||||
pOut[i++] = 'R';
|
||||
pOut[i++] = L'R';
|
||||
if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
|
||||
pOut[i++] = 'H';
|
||||
pOut[i++] = L'H';
|
||||
if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
|
||||
pOut[i++] = 'S';
|
||||
pOut[i++] = L'S';
|
||||
if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
|
||||
pOut[i++] = 'A';
|
||||
pOut[i++] = L'A';
|
||||
if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
|
||||
pOut[i++] = 'C';
|
||||
pOut[i] = 0x00;
|
||||
pOut[i++] = L'C';
|
||||
pOut[i] = UNICODE_NULL;
|
||||
}
|
||||
return wAttrib;
|
||||
}
|
||||
|
|
|
@ -218,16 +218,14 @@ typedef struct tagPIDLDATA
|
|||
/*
|
||||
* getting special values from simple pidls
|
||||
*/
|
||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
|
||||
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT) DECLSPEC_HIDDEN;
|
||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
void _ILGetFileType (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN;
|
||||
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN;
|
||||
DWORD _ILGetDrive (LPCITEMIDLIST, LPWSTR, UINT) DECLSPEC_HIDDEN;
|
||||
|
||||
/*
|
||||
* testing simple pidls
|
||||
|
|
|
@ -382,19 +382,19 @@ static DWORD shgfi_get_exe_type(LPCWSTR szFullPath)
|
|||
*/
|
||||
BOOL SHELL_IsShortcut(LPCITEMIDLIST pidlLast)
|
||||
{
|
||||
char szTemp[MAX_PATH];
|
||||
WCHAR szTemp[MAX_PATH];
|
||||
HKEY keyCls;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (_ILGetExtension(pidlLast, szTemp, MAX_PATH) &&
|
||||
HCR_MapTypeToValueA(szTemp, szTemp, MAX_PATH, TRUE))
|
||||
if (_ILGetExtension(pidlLast, szTemp, _countof(szTemp)) &&
|
||||
HCR_MapTypeToValueW(szTemp, szTemp, _countof(szTemp), TRUE))
|
||||
{
|
||||
if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls))
|
||||
if (ERROR_SUCCESS == RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls))
|
||||
{
|
||||
if (ERROR_SUCCESS == RegQueryValueExA(keyCls, "IsShortcut", NULL, NULL, NULL, NULL))
|
||||
ret = TRUE;
|
||||
if (ERROR_SUCCESS == RegQueryValueExW(keyCls, L"IsShortcut", NULL, NULL, NULL, NULL))
|
||||
ret = TRUE;
|
||||
|
||||
RegCloseKey(keyCls);
|
||||
RegCloseKey(keyCls);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -560,10 +560,7 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
|
|||
{
|
||||
if (!(flags & SHGFI_USEFILEATTRIBUTES) || (flags & SHGFI_PIDL))
|
||||
{
|
||||
char ftype[80];
|
||||
|
||||
_ILGetFileType(pidlLast, ftype, 80);
|
||||
MultiByteToWideChar(CP_ACP, 0, ftype, -1, psfi->szTypeName, 80 );
|
||||
_ILGetFileType(pidlLast, psfi->szTypeName, _countof(psfi->szTypeName));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue