mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 05:15:00 -06:00
4.32
This commit is contained in:
committed by
Kornel Lesiński
parent
acac987575
commit
e8d0636d7a
@@ -192,7 +192,7 @@ SZ_RESULT SafeReadDirect(ISzInStream *inStream, Byte *data, size_t size)
|
||||
{
|
||||
Byte *inBuffer;
|
||||
size_t processedSize;
|
||||
RINOK(inStream->Read(inStream, &inBuffer, size, &processedSize));
|
||||
RINOK(inStream->Read(inStream, (void **)&inBuffer, size, &processedSize));
|
||||
if (processedSize == 0 || processedSize > size)
|
||||
return SZE_FAIL;
|
||||
size -= processedSize;
|
||||
|
||||
@@ -105,8 +105,8 @@ static void PrintHelp()
|
||||
" -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, bt4b, pat2r, pat2,\n"
|
||||
" pat2h, pat3h, pat4h, hc3, hc4], default: bt4\n"
|
||||
" -eos: write End Of Stream marker\n"
|
||||
" -si: Read data from stdin\n"
|
||||
" -so: Write data to stdout\n"
|
||||
" -si: read data from stdin\n"
|
||||
" -so: write data to stdout\n"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ int main2(int n, const char *args[])
|
||||
g_IsNT = IsItWindowsNT();
|
||||
#endif
|
||||
|
||||
fprintf(stderr, "\nLZMA 4.30 Copyright (c) 1999-2005 Igor Pavlov 2005-11-20\n");
|
||||
fprintf(stderr, "\nLZMA 4.32 Copyright (c) 1999-2005 Igor Pavlov 2005-12-09\n");
|
||||
|
||||
if (n == 1)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ const UInt32 kTopValue = (1 << kNumTopBits);
|
||||
|
||||
class CEncoder
|
||||
{
|
||||
UInt32 _ffNum;
|
||||
UInt32 _cacheSize;
|
||||
Byte _cache;
|
||||
public:
|
||||
UInt64 Low;
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
Stream.Init();
|
||||
Low = 0;
|
||||
Range = 0xFFFFFFFF;
|
||||
_ffNum = 0;
|
||||
_cacheSize = 1;
|
||||
_cache = 0;
|
||||
}
|
||||
|
||||
@@ -54,36 +54,21 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void EncodeDirectBitsDiv(UInt32 value, UInt32 numTotalBits)
|
||||
{
|
||||
Low += value * (Range >>= numTotalBits);
|
||||
Normalize();
|
||||
}
|
||||
|
||||
void EncodeDirectBitsDiv2(UInt32 value, UInt32 numTotalBits)
|
||||
{
|
||||
if (numTotalBits <= kNumBottomBits)
|
||||
EncodeDirectBitsDiv(value, numTotalBits);
|
||||
else
|
||||
{
|
||||
EncodeDirectBitsDiv(value >> kNumBottomBits, (numTotalBits - kNumBottomBits));
|
||||
EncodeDirectBitsDiv(value & ((1 << kBottomValueBits) - 1), kNumBottomBits);
|
||||
}
|
||||
}
|
||||
*/
|
||||
void ShiftLow()
|
||||
{
|
||||
if (Low < (UInt32)0xFF000000 || UInt32(Low >> 32) == 1)
|
||||
if ((UInt32)Low < (UInt32)0xFF000000 || (int)(Low >> 32) != 0)
|
||||
{
|
||||
Stream.WriteByte(Byte(_cache + Byte(Low >> 32)));
|
||||
for (;_ffNum != 0; _ffNum--)
|
||||
Stream.WriteByte(Byte(0xFF + Byte(Low >> 32)));
|
||||
_cache = Byte(UInt32(Low) >> 24);
|
||||
Byte temp = _cache;
|
||||
do
|
||||
{
|
||||
Stream.WriteByte((Byte)(temp + (Byte)(Low >> 32)));
|
||||
temp = 0xFF;
|
||||
}
|
||||
while(--_cacheSize != 0);
|
||||
_cache = (Byte)((UInt32)Low >> 24);
|
||||
}
|
||||
else
|
||||
_ffNum++;
|
||||
Low = UInt32(Low) << 8;
|
||||
_cacheSize++;
|
||||
Low = (UInt32)Low << 8;
|
||||
}
|
||||
|
||||
void EncodeDirectBits(UInt32 value, int numTotalBits)
|
||||
@@ -118,7 +103,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _ffNum; }
|
||||
UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _cacheSize + 4; }
|
||||
};
|
||||
|
||||
class CDecoder
|
||||
@@ -162,26 +147,6 @@ public:
|
||||
Normalize();
|
||||
}
|
||||
|
||||
/*
|
||||
UInt32 DecodeDirectBitsDiv(UInt32 numTotalBits)
|
||||
{
|
||||
Range >>= numTotalBits;
|
||||
UInt32 threshold = Code / Range;
|
||||
Code -= threshold * Range;
|
||||
|
||||
Normalize();
|
||||
return threshold;
|
||||
}
|
||||
|
||||
UInt32 DecodeDirectBitsDiv2(UInt32 numTotalBits)
|
||||
{
|
||||
if (numTotalBits <= kNumBottomBits)
|
||||
return DecodeDirectBitsDiv(numTotalBits);
|
||||
UInt32 result = DecodeDirectBitsDiv(numTotalBits - kNumBottomBits) << kNumBottomBits;
|
||||
return (result | DecodeDirectBitsDiv(kNumBottomBits));
|
||||
}
|
||||
*/
|
||||
|
||||
UInt32 DecodeDirectBits(int numTotalBits)
|
||||
{
|
||||
UInt32 range = Range;
|
||||
|
||||
@@ -211,6 +211,10 @@ static HANDLE StartEditApplication(const UString &path, HWND window)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
typedef BOOL (WINAPI * ShellExecuteExWP)(LPSHELLEXECUTEINFOW lpExecInfo);
|
||||
#endif
|
||||
|
||||
static HANDLE StartApplication(const UString &path, HWND window)
|
||||
{
|
||||
UINT32 result;
|
||||
@@ -228,7 +232,11 @@ static HANDLE StartApplication(const UString &path, HWND window)
|
||||
execInfo.lpDirectory = NULL;
|
||||
execInfo.nShow = SW_SHOWNORMAL;
|
||||
execInfo.hProcess = 0;
|
||||
::ShellExecuteExW(&execInfo);
|
||||
ShellExecuteExWP shellExecuteExW = (ShellExecuteExWP)
|
||||
::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "ShellExecuteExW");
|
||||
if (shellExecuteExW == 0)
|
||||
return 0;
|
||||
shellExecuteExW(&execInfo);
|
||||
result = (UINT32)execInfo.hInstApp;
|
||||
hProcess = execInfo.hProcess;
|
||||
}
|
||||
|
||||
@@ -51,6 +51,10 @@ struct CThreadDelete
|
||||
}
|
||||
};
|
||||
|
||||
#ifndef _UNICODE
|
||||
typedef int (WINAPI * SHFileOperationWP)(LPSHFILEOPSTRUCTW lpFileOp);
|
||||
#endif
|
||||
|
||||
void CPanel::DeleteItems(bool toRecycleBin)
|
||||
{
|
||||
CPanel::CDisableTimerProcessing disableTimerProcessing2(*this);
|
||||
@@ -118,7 +122,16 @@ void CPanel::DeleteItems(bool toRecycleBin)
|
||||
fo.fAnyOperationsAborted = FALSE;
|
||||
fo.hNameMappings = 0;
|
||||
fo.lpszProgressTitle = 0;
|
||||
int res = ::SHFileOperationW(&fo);
|
||||
int res;
|
||||
#ifdef _UNICODE
|
||||
res = ::SHFileOperationW(&fo);
|
||||
#else
|
||||
SHFileOperationWP shFileOperationW = (SHFileOperationWP)
|
||||
::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHFileOperationW");
|
||||
if (shFileOperationW == 0)
|
||||
return;
|
||||
res = shFileOperationW(&fo);
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
if (fo.fAnyOperationsAborted)
|
||||
|
||||
@@ -27,10 +27,10 @@ BEGIN
|
||||
LTEXT "Destination folder already contains processed file.", IDC_STATIC_OVERWRITE_HEADER, marg, 7, xSize2, 8
|
||||
LTEXT "Would you like to replace the existing file", IDC_STATIC_OVERWRITE_QUESTION_BEGIN, marg, 28, xSize2, 8
|
||||
ICON "", IDC_STATIC_OVERWRITE_OLD_FILE_ICON, marg, 44, iconSize, iconSize
|
||||
LTEXT "", IDC_STATIC_OVERWRITE_OLD_FILE_SIZE_TIME, fiXPos, 44, fiXSize, fiYSize
|
||||
LTEXT "", IDC_STATIC_OVERWRITE_OLD_FILE_SIZE_TIME, fiXPos, 44, fiXSize, fiYSize, SS_NOPREFIX
|
||||
LTEXT "with this one?",IDC_STATIC_OVERWRITE_QUESTION_END, marg, 98, xSize2, 8
|
||||
ICON "",IDC_STATIC_OVERWRITE_NEW_FILE_ICON, marg, 114, iconSize, iconSize
|
||||
LTEXT "",IDC_STATIC_OVERWRITE_NEW_FILE_SIZE_TIME, fiXPos, 114, fiXSize, fiYSize
|
||||
LTEXT "",IDC_STATIC_OVERWRITE_NEW_FILE_SIZE_TIME, fiXPos, 114, fiXSize, fiYSize, SS_NOPREFIX
|
||||
PUSHBUTTON "&Yes", IDYES, 78, b2YPos, bXSize, bYSize
|
||||
PUSHBUTTON "Yes to &All", IDC_BUTTON_OVERWRITE_YES_TO_ALL, 152, b2YPos, bXSize, bYSize
|
||||
PUSHBUTTON "&No", IDNO, 226, b2YPos, bXSize, bYSize
|
||||
|
||||
@@ -42,7 +42,7 @@ BEGIN
|
||||
RTEXT "", IDC_PROGRESS_REMAINING_VALUE, valPos1, yPos, valSize, 8
|
||||
RTEXT "", IDC_PROGRESS_SPEED_TOTAL_VALUE, valPos2, marg, valSize, 8
|
||||
RTEXT "", IDC_PROGRESS_SPEED_VALUE, valPos2, yPos, valSize, 8
|
||||
LTEXT "", IDC_PROGRESS_FILE_NAME, marg, yPos + 16, xSize2, 8
|
||||
LTEXT "", IDC_PROGRESS_FILE_NAME, marg, yPos + 16, xSize2, 8, SS_NOPREFIX
|
||||
CONTROL "Progress1", IDC_PROGRESS1, "msctls_progress32", PBS_SMOOTH | WS_BORDER,
|
||||
marg, bYPos - 20, xSize2, 13
|
||||
END
|
||||
|
||||
@@ -42,6 +42,33 @@ DWORD_PTR GetRealIconIndex(LPCTSTR path, UINT32 attributes, int &iconIndex)
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
#ifndef _UNICODE
|
||||
typedef int (WINAPI * SHGetFileInfoWP)(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags);
|
||||
|
||||
struct CSHGetFileInfoInit
|
||||
{
|
||||
SHGetFileInfoWP shGetFileInfoW;
|
||||
CSHGetFileInfoInit()
|
||||
{
|
||||
shGetFileInfoW = (SHGetFileInfoWP)
|
||||
::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHGetFileInfoW");
|
||||
}
|
||||
} g_SHGetFileInfoInit;
|
||||
#endif
|
||||
|
||||
DWORD_PTR MySHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags)
|
||||
{
|
||||
#ifdef _UNICODE
|
||||
return SHGetFileInfoW(
|
||||
#else
|
||||
if (g_SHGetFileInfoInit.shGetFileInfoW == 0)
|
||||
return 0;
|
||||
return g_SHGetFileInfoInit.shGetFileInfoW(
|
||||
#endif
|
||||
pszPath, dwFileAttributes, psfi, cbFileInfo, uFlags);
|
||||
}
|
||||
|
||||
#ifndef _UNICODE
|
||||
// static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; }
|
||||
DWORD_PTR GetRealIconIndex(LPCWSTR path, UINT32 attributes, int &iconIndex)
|
||||
@@ -49,7 +76,7 @@ DWORD_PTR GetRealIconIndex(LPCWSTR path, UINT32 attributes, int &iconIndex)
|
||||
if(g_IsNT)
|
||||
{
|
||||
SHFILEINFOW shellInfo;
|
||||
DWORD_PTR res = ::SHGetFileInfoW(path, FILE_ATTRIBUTE_NORMAL | attributes, &shellInfo,
|
||||
DWORD_PTR res = ::MySHGetFileInfoW(path, FILE_ATTRIBUTE_NORMAL | attributes, &shellInfo,
|
||||
sizeof(shellInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);
|
||||
iconIndex = shellInfo.iIcon;
|
||||
return res;
|
||||
@@ -79,7 +106,7 @@ DWORD_PTR GetRealIconIndex(const UString &fileName, UINT32 attributes,
|
||||
{
|
||||
SHFILEINFOW shellInfo;
|
||||
shellInfo.szTypeName[0] = 0;
|
||||
DWORD_PTR res = ::SHGetFileInfoW(fileName, FILE_ATTRIBUTE_NORMAL | attributes, &shellInfo,
|
||||
DWORD_PTR res = ::MySHGetFileInfoW(fileName, FILE_ATTRIBUTE_NORMAL | attributes, &shellInfo,
|
||||
sizeof(shellInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX
|
||||
| SHGFI_TYPENAME);
|
||||
typeName = shellInfo.szTypeName;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#define MY_VER_MAJOR 4
|
||||
#define MY_VER_MINOR 31
|
||||
#define MY_VERSION "4.31"
|
||||
#define MY_7ZIP_VERSION "7-Zip 4.31"
|
||||
#define MY_DATE "2005-12-04"
|
||||
#define MY_VER_MINOR 32
|
||||
#define MY_VERSION "4.32"
|
||||
#define MY_7ZIP_VERSION "7-Zip 4.32"
|
||||
#define MY_DATE "2005-12-09"
|
||||
#define MY_COPYRIGHT "Copyright (c) 1999-2005 Igor Pavlov"
|
||||
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
;Defines
|
||||
|
||||
!define VERSION_MAJOR 4
|
||||
!define VERSION_MINOR 31
|
||||
!define VERSION_MINOR 32
|
||||
!define VERSION_POSTFIX_FULL ""
|
||||
!ifdef WIN64
|
||||
!ifdef IA64
|
||||
|
||||
55
DOC/lzma.txt
55
DOC/lzma.txt
@@ -1,10 +1,10 @@
|
||||
LZMA SDK 4.30
|
||||
LZMA SDK 4.32
|
||||
-------------
|
||||
|
||||
LZMA SDK 4.30 Copyright (C) 1999-2005 Igor Pavlov
|
||||
LZMA SDK 4.32 Copyright (C) 1999-2005 Igor Pavlov
|
||||
|
||||
LZMA SDK provides developers with documentation, source code,
|
||||
and sample code necessary to write software that uses LZMA compression.
|
||||
LZMA SDK provides the documentation, samples, header files, libraries,
|
||||
and tools you need to develop applications that use LZMA compression.
|
||||
|
||||
LZMA is default and general compression method of 7z format
|
||||
in 7-Zip compression program (www.7-zip.org). LZMA provides high
|
||||
@@ -20,15 +20,24 @@ decompressing.
|
||||
LICENSE
|
||||
-------
|
||||
|
||||
LZMA SDK is licensed under two licenses:
|
||||
LZMA SDK is available under any of the following licenses:
|
||||
|
||||
1) GNU Lesser General Public License (GNU LGPL)
|
||||
2) Common Public License (CPL)
|
||||
3) Simplified license for unmodified code (read SPECIAL EXCEPTION)
|
||||
4) Proprietary license
|
||||
|
||||
It means that you can select one of these two licenses and
|
||||
follow rules of that license.
|
||||
It means that you can select one of these four options and follow rules of that license.
|
||||
|
||||
|
||||
1,2) GNU LGPL and CPL licenses are pretty similar and both these
|
||||
licenses are classified as
|
||||
- "Free software licenses" at http://www.gnu.org/
|
||||
- "OSI-approved" at http://www.opensource.org/
|
||||
|
||||
|
||||
3) SPECIAL EXCEPTION
|
||||
|
||||
SPECIAL EXCEPTION
|
||||
Igor Pavlov, as the author of this code, expressly permits you
|
||||
to statically or dynamically link your code (or bind by name)
|
||||
to the files from LZMA SDK without subjecting your linked
|
||||
@@ -36,7 +45,6 @@ code to the terms of the CPL or GNU LGPL.
|
||||
Any modifications or additions to files from LZMA SDK, however,
|
||||
are subject to the GNU LGPL or CPL terms.
|
||||
|
||||
|
||||
SPECIAL EXCEPTION allows you to use LZMA SDK in applications with closed code,
|
||||
while you keep LZMA SDK code unmodified.
|
||||
|
||||
@@ -50,17 +58,11 @@ of LZMA SDK as update for previous versions.
|
||||
|
||||
|
||||
SPECIAL EXCEPTION #3: Igor Pavlov, as the author of this code, expressly permits
|
||||
you to use code of examples (LzmaTest.c, LzmaStateTest.c, LzmaAlone.cpp) as
|
||||
public domain code.
|
||||
|
||||
|
||||
GNU LGPL and CPL licenses are pretty similar and both these
|
||||
licenses are classified as
|
||||
|
||||
1) "Free software licenses" at http://www.gnu.org/
|
||||
2) "OSI-approved" at http://www.opensource.org/
|
||||
you to use code of examples (LzmaTest.c, LzmaStateTest.c, LzmaAlone.cpp,
|
||||
LzmaAlone.cs, LzmaAlone.java) as public domain code.
|
||||
|
||||
|
||||
4) Proprietary license
|
||||
|
||||
LZMA SDK also can be available under a proprietary license which
|
||||
can include:
|
||||
@@ -87,11 +89,11 @@ LZMA SDK Contents
|
||||
|
||||
LZMA SDK includes:
|
||||
|
||||
- C++ source code of LZMA Encoder and Decoder
|
||||
- C++ source code for file->file LZMA compressing and decompressing
|
||||
- C++ source code of LZMA compressing and decompressing
|
||||
- ANSI-C compatible source code for LZMA decompressing
|
||||
- C# source code for LZMA compressing and decompressing
|
||||
- Java source code for LZMA compressing and decompressing
|
||||
- Compiled file->file LZMA compressing/decompressing program for Windows system
|
||||
- C# source code for file->file LZMA compressing and decompressing
|
||||
|
||||
ANSI-C LZMA decompression code was ported from original C++ sources to C.
|
||||
Also it was simplified and optimized for code size.
|
||||
@@ -115,6 +117,7 @@ Files
|
||||
---------------------
|
||||
C - C / CPP source code
|
||||
CS - C# source code
|
||||
Java - Java source code
|
||||
lzma.txt - LZMA SDK description (this file)
|
||||
7zFormat.txt - 7z Format description
|
||||
7zC.txt - 7z ANSI-C Decoder description (this file)
|
||||
@@ -162,8 +165,14 @@ CS - C# files
|
||||
LzmaAlone - file->file LZMA compression/decompression
|
||||
RangeCoder - Range Coder (special code of compression/decompression)
|
||||
|
||||
Source code of LZMA SDK is only part of big 7-Zip project. That is
|
||||
why LZMA SDK uses such complex source code structure.
|
||||
Java - Java files
|
||||
SevenZip
|
||||
Compression - files related to compression/decompression
|
||||
LZ - files related to LZ (Lempel-Ziv) compression algorithm
|
||||
LZMA - LZMA compression/decompression
|
||||
RangeCoder - Range Coder (special code of compression/decompression)
|
||||
|
||||
C/C++ source code of LZMA SDK is part of 7-Zip project.
|
||||
|
||||
You can find ANSI-C LZMA decompressing code at folder
|
||||
C/7zip/Compress/LZMA_C
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
7-Zip 4.31 Sources
|
||||
7-Zip 4.32 Sources
|
||||
------------------
|
||||
|
||||
7-Zip is a file archiver for Windows 95/98/ME/NT/2000/2003/XP.
|
||||
|
||||
@@ -152,6 +152,7 @@ int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM data)
|
||||
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, data);
|
||||
break;
|
||||
}
|
||||
/*
|
||||
case BFFM_SELCHANGED:
|
||||
{
|
||||
TCHAR dir[MAX_PATH];
|
||||
@@ -161,6 +162,7 @@ int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM data)
|
||||
SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)TEXT(""));
|
||||
break;
|
||||
}
|
||||
*/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -193,17 +195,30 @@ bool BrowseForFolder(HWND owner, LPCTSTR title,
|
||||
|
||||
#ifndef _UNICODE
|
||||
|
||||
typedef BOOL (WINAPI * SHGetPathFromIDListWP)(LPCITEMIDLIST pidl, LPWSTR pszPath);
|
||||
|
||||
bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path)
|
||||
{
|
||||
bool result = BOOLToBool(::SHGetPathFromIDListW(itemIDList, path.GetBuffer(MAX_PATH * 2)));
|
||||
path.Empty();
|
||||
SHGetPathFromIDListWP shGetPathFromIDListW = (SHGetPathFromIDListWP)
|
||||
::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHGetPathFromIDListW");
|
||||
if (shGetPathFromIDListW == 0)
|
||||
return false;
|
||||
bool result = BOOLToBool(shGetPathFromIDListW(itemIDList, path.GetBuffer(MAX_PATH * 2)));
|
||||
path.ReleaseBuffer();
|
||||
return result;
|
||||
}
|
||||
|
||||
typedef LPITEMIDLIST (WINAPI * SHBrowseForFolderWP)(LPBROWSEINFOW lpbi);
|
||||
|
||||
bool BrowseForFolder(LPBROWSEINFOW browseInfo, UString &resultPath)
|
||||
{
|
||||
NWindows::NCOM::CComInitializer comInitializer;
|
||||
LPITEMIDLIST itemIDList = ::SHBrowseForFolderW(browseInfo);
|
||||
SHBrowseForFolderWP shBrowseForFolderW = (SHBrowseForFolderWP)
|
||||
::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHBrowseForFolderW");
|
||||
if (shBrowseForFolderW == 0)
|
||||
return false;
|
||||
LPITEMIDLIST itemIDList = shBrowseForFolderW(browseInfo);
|
||||
if (itemIDList == NULL)
|
||||
return false;
|
||||
CItemIDList itemIDListHolder;
|
||||
@@ -221,15 +236,18 @@ int CALLBACK BrowseCallbackProc2(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM data)
|
||||
SendMessageW(hwnd, BFFM_SETSELECTIONW, TRUE, data);
|
||||
break;
|
||||
}
|
||||
/*
|
||||
case BFFM_SELCHANGED:
|
||||
{
|
||||
wchar_t dir[MAX_PATH * 2];
|
||||
if (::SHGetPathFromIDListW((LPITEMIDLIST) lp , dir))
|
||||
|
||||
if (shGetPathFromIDListW((LPITEMIDLIST)lp , dir))
|
||||
SendMessageW(hwnd, BFFM_SETSTATUSTEXTW, 0, (LPARAM)dir);
|
||||
else
|
||||
SendMessageW(hwnd, BFFM_SETSTATUSTEXTW, 0, (LPARAM)L"");
|
||||
break;
|
||||
}
|
||||
*/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -256,11 +274,15 @@ bool BrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR initialFolder, UString &
|
||||
{
|
||||
if (g_IsNT)
|
||||
return BrowseForFolder(owner, title,
|
||||
BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT, initialFolder, resultPath);
|
||||
BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS
|
||||
// | BIF_STATUSTEXT // This flag is not supported when BIF_NEWDIALOGSTYLE is specified.
|
||||
, initialFolder, resultPath);
|
||||
// BIF_STATUSTEXT; BIF_USENEWUI (Version 5.0)
|
||||
CSysString s;
|
||||
bool res = BrowseForFolder(owner, GetSystemString(title),
|
||||
BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT, GetSystemString(initialFolder), s);
|
||||
BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS
|
||||
// | BIF_STATUSTEXT // This flag is not supported when BIF_NEWDIALOGSTYLE is specified.
|
||||
, GetSystemString(initialFolder), s);
|
||||
resultPath = GetUnicodeString(s);
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user