mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 22:56:00 +00:00
[SHELL32] Implement basic SHMultiFileProperties (#7956)
CORE-12510 CORE-20217
This commit is contained in:
parent
bec50f65f4
commit
c7a7376545
46 changed files with 610 additions and 271 deletions
|
@ -29,54 +29,92 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||||
|
|
||||||
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath);
|
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath);
|
||||||
|
|
||||||
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
|
static BOOL SH32_GetFileFindData(PCWSTR pszPath, WIN32_FIND_DATAW *pWFD)
|
||||||
{
|
{
|
||||||
UNICODE_STRING FileName;
|
HANDLE hFind = FindFirstFileW(pszPath, pWFD);
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
return hFind != INVALID_HANDLE_VALUE ? FindClose(hFind) : FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL GetPhysicalFileSize(LPCWSTR pszPath, PULARGE_INTEGER Size)
|
||||||
|
{
|
||||||
|
HANDLE hFile = CreateFileW(pszPath, FILE_READ_ATTRIBUTES, FILE_SHARE_READ |
|
||||||
|
FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
|
||||||
|
FILE_FLAG_OPEN_NO_RECALL, NULL);
|
||||||
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
ERR("Failed to open file for GetPhysicalFileSize\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
HANDLE FileHandle;
|
|
||||||
FILE_STANDARD_INFORMATION FileInfo;
|
FILE_STANDARD_INFORMATION FileInfo;
|
||||||
|
NTSTATUS Status = NtQueryInformationFile(hFile, &IoStatusBlock, &FileInfo,
|
||||||
|
sizeof(FileInfo), FileStandardInformation);
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
Size->QuadPart = FileInfo.AllocationSize.QuadPart;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("NtQueryInformationFile failed for %S (Status: %08lX)\n", pszPath, Status);
|
||||||
|
}
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return NT_SUCCESS(Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT
|
||||||
|
GetFileStats(HANDLE hFile, PULARGE_INTEGER pVirtSize, PULARGE_INTEGER pPhysSize)
|
||||||
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
if (!RtlDosPathNameToNtPathName_U(PathBuffer, &FileName, NULL, NULL))
|
FILE_BASIC_INFORMATION BasicInfo;
|
||||||
{
|
Status = NtQueryInformationFile(hFile, &IoStatusBlock, &BasicInfo, sizeof(BasicInfo), FileBasicInformation);
|
||||||
ERR("RtlDosPathNameToNtPathName_U failed\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
InitializeObjectAttributes(&ObjectAttributes,
|
|
||||||
&FileName,
|
|
||||||
OBJ_CASE_INSENSITIVE,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
Status = NtOpenFile(&FileHandle,
|
|
||||||
FILE_READ_ATTRIBUTES | SYNCHRONIZE,
|
|
||||||
&ObjectAttributes,
|
|
||||||
&IoStatusBlock,
|
|
||||||
FILE_SHARE_READ,
|
|
||||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
|
||||||
RtlFreeUnicodeString(&FileName);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
return INVALID_FILE_ATTRIBUTES;
|
||||||
|
|
||||||
|
if ((pVirtSize || pPhysSize) && !(BasicInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
{
|
{
|
||||||
ERR("NtOpenFile failed for %S (Status 0x%08lx)\n", PathBuffer, Status);
|
FILE_STANDARD_INFORMATION FileInfo;
|
||||||
return FALSE;
|
Status = NtQueryInformationFile(hFile, &IoStatusBlock, &FileInfo,
|
||||||
|
sizeof(FileInfo), FileStandardInformation);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
return INVALID_FILE_ATTRIBUTES;
|
||||||
|
if (pVirtSize)
|
||||||
|
pVirtSize->QuadPart = FileInfo.EndOfFile.QuadPart;
|
||||||
|
if (pPhysSize)
|
||||||
|
pPhysSize->QuadPart = FileInfo.AllocationSize.QuadPart;
|
||||||
|
}
|
||||||
|
return BasicInfo.FileAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT
|
||||||
|
GetFileStats(PCWSTR pszPath, PULARGE_INTEGER pVirtSize, PULARGE_INTEGER pPhysSize)
|
||||||
|
{
|
||||||
|
HANDLE hFile = CreateFileW(pszPath, FILE_READ_ATTRIBUTES, FILE_SHARE_READ |
|
||||||
|
FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
|
||||||
|
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_NO_RECALL, NULL);
|
||||||
|
if (hFile != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
UINT Attrib = GetFileStats(hFile, pVirtSize, pPhysSize);
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return Attrib;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Query the file size */
|
WIN32_FIND_DATAW Data;
|
||||||
Status = NtQueryInformationFile(FileHandle,
|
if (!SH32_GetFileFindData(pszPath, &Data))
|
||||||
&IoStatusBlock,
|
return INVALID_FILE_ATTRIBUTES;
|
||||||
&FileInfo,
|
if (pVirtSize)
|
||||||
sizeof(FileInfo),
|
|
||||||
FileStandardInformation);
|
|
||||||
NtClose(FileHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
{
|
||||||
ERR("NtQueryInformationFile failed for %S (Status: %08lX)\n", PathBuffer, Status);
|
pVirtSize->u.LowPart = Data.nFileSizeLow;
|
||||||
return FALSE;
|
pVirtSize->u.HighPart = Data.nFileSizeHigh;
|
||||||
}
|
}
|
||||||
|
if (pPhysSize)
|
||||||
Size->QuadPart = FileInfo.AllocationSize.QuadPart;
|
{
|
||||||
return TRUE;
|
pPhysSize->u.LowPart = Data.nFileSizeLow;
|
||||||
|
pPhysSize->u.HighPart = Data.nFileSizeHigh;
|
||||||
|
// TODO: Should we round up to cluster size?
|
||||||
|
}
|
||||||
|
return Data.dwFileAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CFileVersionInfo::Load(LPCWSTR pwszPath)
|
BOOL CFileVersionInfo::Load(LPCWSTR pwszPath)
|
||||||
|
@ -545,18 +583,9 @@ CFileDefExt::InitFileAttr(HWND hwndDlg)
|
||||||
* structure for both the GetFileAttributesEx and FindFirstFile calls.
|
* structure for both the GetFileAttributesEx and FindFirstFile calls.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Success = GetFileAttributesExW(m_wszPath,
|
Success = GetFileAttributesExW(m_wszPath, GetFileExInfoStandard,
|
||||||
GetFileExInfoStandard,
|
|
||||||
(LPWIN32_FILE_ATTRIBUTE_DATA)&FileInfo);
|
(LPWIN32_FILE_ATTRIBUTE_DATA)&FileInfo);
|
||||||
if (!Success)
|
if (Success || (Success = SH32_GetFileFindData(m_wszPath, &FileInfo)) != FALSE)
|
||||||
{
|
|
||||||
HANDLE hFind = FindFirstFileW(m_wszPath, &FileInfo);
|
|
||||||
Success = (hFind != INVALID_HANDLE_VALUE);
|
|
||||||
if (Success)
|
|
||||||
FindClose(hFind);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Success)
|
|
||||||
{
|
{
|
||||||
/* Update attribute checkboxes */
|
/* Update attribute checkboxes */
|
||||||
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
|
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
|
||||||
|
@ -600,29 +629,11 @@ CFileDefExt::InitFileAttr(HWND hwndDlg)
|
||||||
|
|
||||||
if (m_bDir)
|
if (m_bDir)
|
||||||
{
|
{
|
||||||
/* For directories files have to be counted */
|
// For directories, files have to be counted
|
||||||
|
m_hWndDirStatsDlg = hwndDlg;
|
||||||
_CountFolderAndFilesData *data = static_cast<_CountFolderAndFilesData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_CountFolderAndFilesData)));
|
AddRef();
|
||||||
data->This = this;
|
if (!SHCreateThread(_CountFolderAndFilesThreadProc, this, 0, NULL))
|
||||||
data->pwszBuf = static_cast<LPWSTR>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR) * MAX_PATH));
|
Release();
|
||||||
data->hwndDlg = hwndDlg;
|
|
||||||
this->AddRef();
|
|
||||||
StringCchCopyW(data->pwszBuf, MAX_PATH, m_wszPath);
|
|
||||||
|
|
||||||
SHCreateThread(CFileDefExt::_CountFolderAndFilesThreadProc, data, NULL, NULL);
|
|
||||||
|
|
||||||
/* Update size field */
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14011, wszBuf);
|
|
||||||
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14012, wszBuf);
|
|
||||||
|
|
||||||
/* Display files and folders count */
|
|
||||||
WCHAR wszFormat[256];
|
|
||||||
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
|
|
||||||
StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
|
|
||||||
SetDlgItemTextW(hwndDlg, 14027, wszBuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide Advanced button. TODO: Implement advanced dialog and enable this button if filesystem supports compression or encryption */
|
/* Hide Advanced button. TODO: Implement advanced dialog and enable this button if filesystem supports compression or encryption */
|
||||||
|
@ -787,13 +798,280 @@ CFileDefExt::GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
pFileDefExt->InitGeneralPage(hwndDlg);
|
pFileDefExt->InitGeneralPage(hwndDlg);
|
||||||
return FALSE; // continue
|
return FALSE; // continue
|
||||||
}
|
}
|
||||||
default:
|
case WM_DESTROY:
|
||||||
|
InterlockedIncrement(&pFileDefExt->m_Destroyed);
|
||||||
|
break;
|
||||||
|
case WM_UPDATEDIRSTATS:
|
||||||
|
pFileDefExt->UpdateDirStatsResults();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct DIRTREESTATS
|
||||||
|
{
|
||||||
|
PDWORD pDirCount, pFileCount;
|
||||||
|
PULARGE_INTEGER pTotVirtSize, pTotPhysSize;
|
||||||
|
UINT nTick;
|
||||||
|
UINT fAttribSet, fAttribAll;
|
||||||
|
BOOL bMultipleTypes;
|
||||||
|
BOOL bDeepRecurse;
|
||||||
|
WCHAR szType[max(100, RTL_FIELD_SIZE(SHFILEINFOA, szTypeName))];
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
CFileDefExt::UpdateDirStatsResults()
|
||||||
|
{
|
||||||
|
WCHAR fmt[200], buf[200];
|
||||||
|
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, fmt, _countof(fmt));
|
||||||
|
wsprintfW(buf, fmt, m_cFiles, m_cFolders - (m_bMultifile ? 0 : 1));
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, m_bMultifile ? 14001 : 14027, buf);
|
||||||
|
|
||||||
|
if (SH_FormatFileSizeWithBytes(&m_DirSize, buf, _countof(buf)))
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, 14011, buf);
|
||||||
|
if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, buf, _countof(buf)))
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, 14012, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CFileDefExt::InitDirStats(struct DIRTREESTATS *pStats)
|
||||||
|
{
|
||||||
|
pStats->pDirCount = &m_cFolders;
|
||||||
|
pStats->pFileCount = &m_cFiles;
|
||||||
|
pStats->pTotVirtSize = &m_DirSize;
|
||||||
|
pStats->pTotPhysSize = &m_DirSizeOnDisc;
|
||||||
|
pStats->nTick = GetTickCount();
|
||||||
|
pStats->fAttribSet = ~0ul;
|
||||||
|
pStats->fAttribAll = 0;
|
||||||
|
pStats->bDeepRecurse = FALSE;
|
||||||
|
pStats->bMultipleTypes = !m_bMultifile; // Only the Multifile page wants to know
|
||||||
|
pStats->szType[0] = UNICODE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT
|
||||||
|
ProcessDirStatsItem(PCWSTR pszPath, DIRTREESTATS &Stats, WIN32_FIND_DATAW *pWFD)
|
||||||
|
{
|
||||||
|
UINT fAttrib;
|
||||||
|
ULARGE_INTEGER nVirtSize, nPhysSize;
|
||||||
|
if (pWFD && (pWFD->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
fAttrib = pWFD->dwFileAttributes;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fAttrib = GetFileStats(pszPath, &nVirtSize, &nPhysSize);
|
||||||
|
if (fAttrib == INVALID_FILE_ATTRIBUTES)
|
||||||
|
return fAttrib;
|
||||||
|
}
|
||||||
|
|
||||||
|
Stats.fAttribSet &= fAttrib;
|
||||||
|
Stats.fAttribAll |= fAttrib;
|
||||||
|
if (fAttrib & FILE_ATTRIBUTE_DIRECTORY)
|
||||||
|
{
|
||||||
|
(*Stats.pDirCount)++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*Stats.pFileCount)++;
|
||||||
|
Stats.pTotVirtSize->QuadPart += nVirtSize.QuadPart;
|
||||||
|
Stats.pTotPhysSize->QuadPart += nPhysSize.QuadPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Stats.bMultipleTypes)
|
||||||
|
{
|
||||||
|
SHFILEINFOW shfi;
|
||||||
|
if (!SHGetFileInfoW(pszPath, fAttrib, &shfi, sizeof(shfi),
|
||||||
|
SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES))
|
||||||
|
Stats.bMultipleTypes = TRUE;
|
||||||
|
else if (!Stats.szType[0])
|
||||||
|
wcscpy(Stats.szType, shfi.szTypeName);
|
||||||
|
else
|
||||||
|
Stats.bMultipleTypes = lstrcmpW(Stats.szType, shfi.szTypeName);
|
||||||
|
}
|
||||||
|
return fAttrib;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
CFileDefExt::WalkDirTree(PCWSTR pszBase, struct DIRTREESTATS *pStats, WIN32_FIND_DATAW *pWFD)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATAW wfd;
|
||||||
|
wfd.dwFileAttributes = ProcessDirStatsItem(pszBase, *pStats, pWFD);
|
||||||
|
if (wfd.dwFileAttributes == INVALID_FILE_ATTRIBUTES)
|
||||||
|
return FALSE;
|
||||||
|
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
SIZE_T cch = lstrlenW(pszBase);
|
||||||
|
PWSTR pszFull = (PWSTR)SHAlloc((cch + MAX_PATH) * sizeof(*pszFull));
|
||||||
|
if (!pszFull)
|
||||||
|
return FALSE;
|
||||||
|
PWSTR pszFile = pszFull + cch;
|
||||||
|
wcscpy(pszFull, pszBase);
|
||||||
|
wcscpy(pszFile++, L"\\*");
|
||||||
|
HANDLE hFind = FindFirstFileW(pszFull, &wfd);
|
||||||
|
if (hFind != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
for (; bSuccess && !IsDestroyed();)
|
||||||
|
{
|
||||||
|
UINT nTickNow = GetTickCount();
|
||||||
|
if (nTickNow - pStats->nTick >= 500)
|
||||||
|
{
|
||||||
|
pStats->nTick = nTickNow;
|
||||||
|
SendMessageW(m_hWndDirStatsDlg, WM_UPDATEDIRSTATS, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
wcscpy(pszFile, wfd.cFileName);
|
||||||
|
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
bSuccess = ProcessDirStatsItem(pszFull, *pStats, NULL);
|
||||||
|
}
|
||||||
|
else if (!PathIsDotOrDotDotW(wfd.cFileName))
|
||||||
|
{
|
||||||
|
bSuccess = WalkDirTree(pszFull, pStats, &wfd);
|
||||||
|
pStats->bDeepRecurse |= bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FindNextFileW(hFind, &wfd))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
FindClose(hFind);
|
||||||
|
}
|
||||||
|
SHFree(pszFull);
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CFileDefExt::InitMultifilePageThread()
|
||||||
|
{
|
||||||
|
DIRTREESTATS Stats;
|
||||||
|
InitDirStats(&Stats);
|
||||||
|
|
||||||
|
// MSDN says CFSTR_SHELLIDLIST and SHGDN_FORPARSING must be supported so that is what we use
|
||||||
|
for (SIZE_T i = 0; i < m_cidl; ++i)
|
||||||
|
{
|
||||||
|
PIDLIST_ABSOLUTE pidl = ILCombine(m_pidlFolder, m_pidls[i]);
|
||||||
|
if (!pidl)
|
||||||
|
return;
|
||||||
|
PWSTR pszAbsPath;
|
||||||
|
HRESULT hr = SHELL_DisplayNameOf(NULL, pidl, SHGDN_FORPARSING, &pszAbsPath);
|
||||||
|
ILFree(pidl);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return;
|
||||||
|
BOOL bSuccess = WalkDirTree(pszAbsPath, &Stats, NULL);
|
||||||
|
SHFree(pszAbsPath);
|
||||||
|
if (!bSuccess)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateDirStatsResults();
|
||||||
|
if (Stats.bMultipleTypes)
|
||||||
|
LoadStringW(shell32_hInstance, IDS_MULTIPLETYPES, Stats.szType, _countof(Stats.szType));
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, 14005, Stats.szType);
|
||||||
|
|
||||||
|
PWSTR pszDir = NULL;
|
||||||
|
HRESULT hr = E_FAIL;
|
||||||
|
if (!Stats.bDeepRecurse)
|
||||||
|
hr = SHELL_DisplayNameOf(NULL, m_pidlFolder, SHGDN_FORPARSING | SHGDN_FORADDRESSBAR, &pszDir);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, 14009, pszDir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LoadStringW(shell32_hInstance, IDS_VARIOUSFOLDERS, Stats.szType, _countof(Stats.szType));
|
||||||
|
SetDlgItemTextW(m_hWndDirStatsDlg, 14009, Stats.szType);
|
||||||
|
}
|
||||||
|
SHFree(pszDir);
|
||||||
|
|
||||||
|
#define SetMultifileDlgFileAttr(attr, id) do \
|
||||||
|
{ \
|
||||||
|
if (Stats.fAttribSet & (attr)) \
|
||||||
|
CheckDlgButton(m_hWndDirStatsDlg, (id), BST_CHECKED); \
|
||||||
|
else if (Stats.fAttribAll & (attr)) \
|
||||||
|
CheckDlgButton(m_hWndDirStatsDlg, (id), BST_INDETERMINATE); \
|
||||||
|
} while (0)
|
||||||
|
SetMultifileDlgFileAttr(FILE_ATTRIBUTE_READONLY, 14021);
|
||||||
|
SetMultifileDlgFileAttr(FILE_ATTRIBUTE_HIDDEN, 14022);
|
||||||
|
SetMultifileDlgFileAttr(FILE_ATTRIBUTE_ARCHIVE, 14023);
|
||||||
|
#undef SetMultifileDlgFileAttr
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CALLBACK
|
||||||
|
CFileDefExt::_InitializeMultifileThreadProc(LPVOID lpParameter)
|
||||||
|
{
|
||||||
|
CFileDefExt *pThis = static_cast<CFileDefExt*>(lpParameter);
|
||||||
|
pThis->InitMultifilePageThread();
|
||||||
|
return pThis->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CFileDefExt::InitMultifilePage(HWND hwndDlg)
|
||||||
|
{
|
||||||
|
m_hWndDirStatsDlg = hwndDlg;
|
||||||
|
HICON hIco = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_MULTIPLE_FILES));
|
||||||
|
SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIco, 0);
|
||||||
|
|
||||||
|
// We are lazy and just reuse the directory page so we must tweak some controls
|
||||||
|
HWND hCtrl = GetDlgItem(hwndDlg, 14001);
|
||||||
|
SetWindowLongPtrW(hCtrl, GWL_STYLE, GetWindowLongPtrW(GetDlgItem(hwndDlg, 14027), GWL_STYLE));
|
||||||
|
SetWindowLongPtrW(hCtrl, GWL_EXSTYLE, 0);
|
||||||
|
SendMessageW(hCtrl, EM_SETREADONLY, TRUE, 0);
|
||||||
|
SetDlgItemTextW(hwndDlg, 14005, NULL);
|
||||||
|
|
||||||
|
static const WORD idAttr[] = { 14021, 14022, 14023 };
|
||||||
|
for (SIZE_T i = 0; i < _countof(idAttr); ++i)
|
||||||
|
{
|
||||||
|
hCtrl = GetDlgItem(hwndDlg, idAttr[i]);
|
||||||
|
SendMessageW(hCtrl, BM_SETSTYLE, BS_AUTO3STATE, TRUE);
|
||||||
|
EnableWindow(hCtrl, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const WORD idUnused[] = { 14026, 14027, 14028, 14014, 14015 };
|
||||||
|
for (SIZE_T i = 0; i < _countof(idUnused); ++i)
|
||||||
|
DestroyWindow(GetDlgItem(hwndDlg, idUnused[i]));
|
||||||
|
|
||||||
|
if (!m_cidl)
|
||||||
|
return;
|
||||||
|
|
||||||
|
AddRef();
|
||||||
|
if (!SHCreateThread(_InitializeMultifileThreadProc, this, CTF_COINIT, NULL))
|
||||||
|
Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
*
|
||||||
|
* CFileDefExt::MultifilePageProc
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
INT_PTR CALLBACK
|
||||||
|
CFileDefExt::MultifilePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
{
|
||||||
|
LPPROPSHEETPAGEW ppsp = (LPPROPSHEETPAGEW)lParam;
|
||||||
|
if (ppsp == NULL || !ppsp->lParam)
|
||||||
|
break;
|
||||||
|
pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
|
||||||
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pFileDefExt);
|
||||||
|
pFileDefExt->InitMultifilePage(hwndDlg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_DESTROY:
|
||||||
|
InterlockedIncrement(&pFileDefExt->m_Destroyed);
|
||||||
|
break;
|
||||||
|
case WM_UPDATEDIRSTATS:
|
||||||
|
pFileDefExt->UpdateDirStatsResults();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
*
|
*
|
||||||
* CFileDefExt::InitVersionPage [Internal]
|
* CFileDefExt::InitVersionPage [Internal]
|
||||||
|
@ -957,12 +1235,6 @@ CFileDefExt::VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_DESTROY:
|
|
||||||
break;
|
|
||||||
case PSM_QUERYSIBLINGS:
|
|
||||||
return FALSE; // continue
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1216,7 +1488,7 @@ BOOL CFileDefExt::OnFolderCustApply(HWND hwndDlg)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
CFileDefExt::CFileDefExt():
|
CFileDefExt::CFileDefExt():
|
||||||
m_bDir(FALSE), m_cFiles(0), m_cFolders(0)
|
m_bDir(FALSE), m_bMultifile(FALSE), m_cFiles(0), m_cFolders(0)
|
||||||
{
|
{
|
||||||
m_wszPath[0] = L'\0';
|
m_wszPath[0] = L'\0';
|
||||||
m_DirSize.QuadPart = 0ull;
|
m_DirSize.QuadPart = 0ull;
|
||||||
|
@ -1230,7 +1502,8 @@ CFileDefExt::CFileDefExt():
|
||||||
|
|
||||||
CFileDefExt::~CFileDefExt()
|
CFileDefExt::~CFileDefExt()
|
||||||
{
|
{
|
||||||
|
_ILFreeaPidl(m_pidls, m_cidl);
|
||||||
|
ILFree(m_pidlFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
|
@ -1245,6 +1518,19 @@ CFileDefExt::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pDataObj, HKE
|
||||||
if (!pDataObj)
|
if (!pDataObj)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
|
int count = DataObject_GetHIDACount(pDataObj);
|
||||||
|
m_bMultifile = count > 1;
|
||||||
|
if (m_bMultifile)
|
||||||
|
{
|
||||||
|
CDataObjectHIDA cida(pDataObj);
|
||||||
|
if (SUCCEEDED(cida.hr()))
|
||||||
|
{
|
||||||
|
m_pidls = _ILCopyCidaToaPidl(&m_pidlFolder, cida);
|
||||||
|
if (m_pidls)
|
||||||
|
m_cidl = cida->cidl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
format.cfFormat = CF_HDROP;
|
format.cfFormat = CF_HDROP;
|
||||||
format.ptd = NULL;
|
format.ptd = NULL;
|
||||||
format.dwAspect = DVASPECT_CONTENT;
|
format.dwAspect = DVASPECT_CONTENT;
|
||||||
|
@ -1265,8 +1551,8 @@ CFileDefExt::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pDataObj, HKE
|
||||||
ReleaseStgMedium(&stgm);
|
ReleaseStgMedium(&stgm);
|
||||||
|
|
||||||
TRACE("File properties %ls\n", m_wszPath);
|
TRACE("File properties %ls\n", m_wszPath);
|
||||||
m_bDir = PathIsDirectoryW(m_wszPath) ? TRUE : FALSE;
|
m_bDir = !m_bMultifile && PathIsDirectoryW(m_wszPath);
|
||||||
if (!m_bDir)
|
if (!m_bDir && !m_bMultifile)
|
||||||
m_VerInfo.Load(m_wszPath);
|
m_VerInfo.Load(m_wszPath);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -1297,9 +1583,10 @@ HRESULT WINAPI
|
||||||
CFileDefExt::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
|
CFileDefExt::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HPROPSHEETPAGE hPage;
|
HPROPSHEETPAGE hPage;
|
||||||
WORD wResId = m_bDir ? IDD_FOLDER_PROPERTIES : IDD_FILE_PROPERTIES;
|
WORD wResId = (m_bDir || m_bMultifile) ? IDD_FOLDER_PROPERTIES : IDD_FILE_PROPERTIES;
|
||||||
|
DLGPROC pfnFirstPage = m_bMultifile ? MultifilePageProc : GeneralPageProc;
|
||||||
|
|
||||||
hPage = SH_CreatePropertySheetPageEx(wResId, GeneralPageProc, (LPARAM)this, NULL,
|
hPage = SH_CreatePropertySheetPageEx(wResId, pfnFirstPage, (LPARAM)this, NULL,
|
||||||
&PropSheetPageLifetimeCallback<CFileDefExt>);
|
&PropSheetPageLifetimeCallback<CFileDefExt>);
|
||||||
HRESULT hr = AddPropSheetPage(hPage, pfnAddPage, lParam);
|
HRESULT hr = AddPropSheetPage(hPage, pfnAddPage, lParam);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
@ -1307,6 +1594,9 @@ CFileDefExt::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
|
||||||
else
|
else
|
||||||
AddRef(); // For PropSheetPageLifetimeCallback
|
AddRef(); // For PropSheetPageLifetimeCallback
|
||||||
|
|
||||||
|
if (m_bMultifile)
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
if (!m_bDir && GetFileVersionInfoSizeW(m_wszPath, NULL))
|
if (!m_bDir && GetFileVersionInfoSizeW(m_wszPath, NULL))
|
||||||
{
|
{
|
||||||
hPage = SH_CreatePropertySheetPage(IDD_FILE_VERSION,
|
hPage = SH_CreatePropertySheetPage(IDD_FILE_VERSION,
|
||||||
|
@ -1335,127 +1625,19 @@ CFileDefExt::ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPAR
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI
|
void
|
||||||
CFileDefExt::SetSite(IUnknown *punk)
|
CFileDefExt::CountFolderAndFiles()
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
DIRTREESTATS Stats;
|
||||||
return E_NOTIMPL;
|
InitDirStats(&Stats);
|
||||||
|
WalkDirTree(m_wszPath, &Stats, NULL);
|
||||||
|
UpdateDirStatsResults();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI
|
DWORD CALLBACK
|
||||||
CFileDefExt::GetSite(REFIID iid, void **ppvSite)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return E_NOTIMPL;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI
|
|
||||||
CFileDefExt::_CountFolderAndFilesThreadProc(LPVOID lpParameter)
|
CFileDefExt::_CountFolderAndFilesThreadProc(LPVOID lpParameter)
|
||||||
{
|
{
|
||||||
_CountFolderAndFilesData *data = static_cast<_CountFolderAndFilesData*>(lpParameter);
|
CFileDefExt *pThis = static_cast<CFileDefExt*>(lpParameter);
|
||||||
DWORD ticks = 0;
|
pThis->CountFolderAndFiles();
|
||||||
data->This->CountFolderAndFiles(data->hwndDlg, data->pwszBuf, &ticks);
|
return pThis->Release();
|
||||||
|
|
||||||
//Release the CFileDefExt and data object holds in the copying thread.
|
|
||||||
data->This->Release();
|
|
||||||
HeapFree(GetProcessHeap(), 0, data->pwszBuf);
|
|
||||||
HeapFree(GetProcessHeap(), 0, data);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
CFileDefExt::CountFolderAndFiles(HWND hwndDlg, LPCWSTR pwszBuf, DWORD *ticks)
|
|
||||||
{
|
|
||||||
CString sBuf = pwszBuf;
|
|
||||||
sBuf += L"\\" ;
|
|
||||||
CString sSearch = sBuf;
|
|
||||||
sSearch += L"*" ;
|
|
||||||
CString sFileName;
|
|
||||||
|
|
||||||
WIN32_FIND_DATAW wfd;
|
|
||||||
HANDLE hFind = FindFirstFileW(sSearch, &wfd);
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
ERR("FindFirstFileW %ls failed\n", sSearch.GetString());
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL root = FALSE;
|
|
||||||
if (*ticks == 0) {
|
|
||||||
*ticks = GetTickCount();
|
|
||||||
root = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sFileName = sBuf;
|
|
||||||
sFileName += wfd.cFileName;
|
|
||||||
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
||||||
{
|
|
||||||
/* Don't process "." and ".." items */
|
|
||||||
if (!wcscmp(wfd.cFileName, L".") || !wcscmp(wfd.cFileName, L".."))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
++m_cFolders;
|
|
||||||
|
|
||||||
CountFolderAndFiles(hwndDlg, sFileName, ticks);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_cFiles++;
|
|
||||||
|
|
||||||
ULARGE_INTEGER FileSize;
|
|
||||||
FileSize.u.LowPart = wfd.nFileSizeLow;
|
|
||||||
FileSize.u.HighPart = wfd.nFileSizeHigh;
|
|
||||||
m_DirSize.QuadPart += FileSize.QuadPart;
|
|
||||||
// Calculate size on disc
|
|
||||||
if (!GetPhysicalFileSize(sFileName.GetString(), &FileSize))
|
|
||||||
ERR("GetPhysicalFileSize failed for %ls\n", sFileName.GetString());
|
|
||||||
m_DirSizeOnDisc.QuadPart += FileSize.QuadPart;
|
|
||||||
}
|
|
||||||
if (GetTickCount() - *ticks > (DWORD) 300)
|
|
||||||
{
|
|
||||||
/* FIXME Using IsWindow is generally ill advised */
|
|
||||||
if (IsWindow(hwndDlg))
|
|
||||||
{
|
|
||||||
WCHAR wszBuf[100];
|
|
||||||
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14011, wszBuf);
|
|
||||||
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14012, wszBuf);
|
|
||||||
|
|
||||||
/* Display files and folders count */
|
|
||||||
WCHAR wszFormat[100];
|
|
||||||
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
|
|
||||||
StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
|
|
||||||
SetDlgItemTextW(hwndDlg, 14027, wszBuf);
|
|
||||||
*ticks = GetTickCount();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while(FindNextFileW(hFind, &wfd));
|
|
||||||
|
|
||||||
if (root && IsWindow(hwndDlg))
|
|
||||||
{
|
|
||||||
WCHAR wszBuf[100];
|
|
||||||
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14011, wszBuf);
|
|
||||||
|
|
||||||
if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
|
|
||||||
SetDlgItemTextW(hwndDlg, 14012, wszBuf);
|
|
||||||
|
|
||||||
/* Display files and folders count */
|
|
||||||
WCHAR wszFormat[100];
|
|
||||||
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
|
|
||||||
StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
|
|
||||||
SetDlgItemTextW(hwndDlg, 14027, wszBuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
FindClose(hFind);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ class CFileDefExt :
|
||||||
public IShellExtInit,
|
public IShellExtInit,
|
||||||
public IContextMenu,
|
public IContextMenu,
|
||||||
public IShellPropSheetExt,
|
public IShellPropSheetExt,
|
||||||
public IObjectWithSite
|
public CObjectWithSiteBase
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
VOID InitOpensWithField(HWND hwndDlg);
|
VOID InitOpensWithField(HWND hwndDlg);
|
||||||
|
@ -72,21 +72,37 @@ private:
|
||||||
BOOL AddVersionString(HWND hwndDlg, LPCWSTR pwszName);
|
BOOL AddVersionString(HWND hwndDlg, LPCWSTR pwszName);
|
||||||
BOOL InitVersionPage(HWND hwndDlg);
|
BOOL InitVersionPage(HWND hwndDlg);
|
||||||
BOOL InitFolderCustomizePage(HWND hwndDlg);
|
BOOL InitFolderCustomizePage(HWND hwndDlg);
|
||||||
|
void InitMultifilePage(HWND hwndDlg);
|
||||||
|
void InitMultifilePageThread();
|
||||||
|
void CountFolderAndFiles();
|
||||||
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
static INT_PTR CALLBACK VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
static INT_PTR CALLBACK VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
static INT_PTR CALLBACK FolderCustomizePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
static INT_PTR CALLBACK FolderCustomizePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
BOOL CountFolderAndFiles(HWND hwndDlg, LPCWSTR pwszBuf, LPDWORD ticks);
|
static INT_PTR CALLBACK MultifilePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
WCHAR m_wszPath[MAX_PATH];
|
WCHAR m_wszPath[MAX_PATH];
|
||||||
CFileVersionInfo m_VerInfo;
|
CFileVersionInfo m_VerInfo;
|
||||||
BOOL m_bDir;
|
BOOL m_bDir;
|
||||||
|
BOOL m_bMultifile;
|
||||||
|
|
||||||
DWORD m_cFiles;
|
LPITEMIDLIST m_pidlFolder = NULL;
|
||||||
|
LPITEMIDLIST *m_pidls = NULL;
|
||||||
|
UINT m_cidl = 0;
|
||||||
|
DWORD m_cFiles;
|
||||||
DWORD m_cFolders;
|
DWORD m_cFolders;
|
||||||
ULARGE_INTEGER m_DirSize;
|
ULARGE_INTEGER m_DirSize;
|
||||||
ULARGE_INTEGER m_DirSizeOnDisc;
|
ULARGE_INTEGER m_DirSizeOnDisc;
|
||||||
|
enum { WM_UPDATEDIRSTATS = WM_APP };
|
||||||
|
HWND m_hWndDirStatsDlg;
|
||||||
|
void InitDirStats(struct DIRTREESTATS *pStats);
|
||||||
|
BOOL WalkDirTree(PCWSTR pszPath, struct DIRTREESTATS *pStats, WIN32_FIND_DATAW *pWFD);
|
||||||
|
void UpdateDirStatsResults();
|
||||||
|
|
||||||
|
LONG volatile m_Destroyed = 0;
|
||||||
|
BOOL IsDestroyed() const { return m_Destroyed; }
|
||||||
|
|
||||||
static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter);
|
static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter);
|
||||||
|
static DWORD WINAPI _InitializeMultifileThreadProc(LPVOID lpParameter);
|
||||||
|
|
||||||
// FolderCustomize
|
// FolderCustomize
|
||||||
WCHAR m_szFolderIconPath[MAX_PATH];
|
WCHAR m_szFolderIconPath[MAX_PATH];
|
||||||
|
@ -116,10 +132,6 @@ public:
|
||||||
STDMETHOD(AddPages)(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) override;
|
STDMETHOD(AddPages)(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) override;
|
||||||
STDMETHOD(ReplacePage)(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam) override;
|
STDMETHOD(ReplacePage)(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam) override;
|
||||||
|
|
||||||
// IObjectWithSite
|
|
||||||
STDMETHOD(SetSite)(IUnknown *punk) override;
|
|
||||||
STDMETHOD(GetSite)(REFIID iid, void **ppvSite) override;
|
|
||||||
|
|
||||||
DECLARE_REGISTRY_RESOURCEID(IDR_FILEDEFEXT)
|
DECLARE_REGISTRY_RESOURCEID(IDR_FILEDEFEXT)
|
||||||
DECLARE_NOT_AGGREGATABLE(CFileDefExt)
|
DECLARE_NOT_AGGREGATABLE(CFileDefExt)
|
||||||
|
|
||||||
|
|
|
@ -176,8 +176,7 @@ SHELL32_ShowFilesystemItemPropertiesDialogAsync(IDataObject *pDO)
|
||||||
pClsid = &CLSID_ShellFileDefExt;
|
pClsid = &CLSID_ShellFileDefExt;
|
||||||
InitFunc = FSFolderItemPropDialogInitCallback;
|
InitFunc = FSFolderItemPropDialogInitCallback;
|
||||||
}
|
}
|
||||||
ShellPropSheetDialog Dialog;
|
return ShellPropSheetDialog().ShowAsync(pClsid, pDO, InitFunc, InitString);
|
||||||
return Dialog.ShowAsync(pClsid, pDO, InitFunc, InitString);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
|
@ -185,11 +184,7 @@ SHELL32_ShowFilesystemItemsPropertiesDialogAsync(HWND hOwner, IDataObject *pDO)
|
||||||
{
|
{
|
||||||
if (DataObject_GetHIDACount(pDO) == 1)
|
if (DataObject_GetHIDACount(pDO) == 1)
|
||||||
return SHELL32_ShowFilesystemItemPropertiesDialogAsync(pDO);
|
return SHELL32_ShowFilesystemItemPropertiesDialogAsync(pDO);
|
||||||
|
return SHMultiFileProperties(pDO, 0);
|
||||||
ERR("SHMultiFileProperties is not implemented yet\n");
|
|
||||||
HRESULT hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
|
|
||||||
SHELL_ErrorBox(hOwner, hr);
|
|
||||||
return hr; // TODO: return SHMultiFileProperties(pDO, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
|
@ -197,8 +192,7 @@ SHELL32_ShowShellExtensionProperties(const CLSID *pClsid, IDataObject *pDO)
|
||||||
{
|
{
|
||||||
WCHAR ClassBuf[6 + 38 + 1] = L"CLSID\\";
|
WCHAR ClassBuf[6 + 38 + 1] = L"CLSID\\";
|
||||||
StringFromGUID2(*pClsid, ClassBuf + 6, 38 + 1);
|
StringFromGUID2(*pClsid, ClassBuf + 6, 38 + 1);
|
||||||
ShellPropSheetDialog Dialog;
|
return ShellPropSheetDialog().ShowAsync(NULL, pDO, ClassPropDialogInitCallback, ClassBuf);
|
||||||
return Dialog.ShowAsync(NULL, pDO, ClassPropDialogInitCallback, ClassBuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
|
@ -220,3 +214,16 @@ SHELL_ShowItemIDListProperties(LPCITEMIDLIST pidl)
|
||||||
};
|
};
|
||||||
return ShellExecuteExA(&sei) ? S_OK : HResultFromWin32(GetLastError());
|
return ShellExecuteExA(&sei) ? S_OK : HResultFromWin32(GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SHMultiFileProperties [SHELL32.716]
|
||||||
|
*/
|
||||||
|
EXTERN_C HRESULT
|
||||||
|
WINAPI
|
||||||
|
SHMultiFileProperties(IDataObject *pDataObject, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
if (DataObject_GetHIDACount(pDataObject) == 1)
|
||||||
|
return SHELL32_ShowFilesystemItemPropertiesDialogAsync(pDataObject);
|
||||||
|
|
||||||
|
return ShellPropSheetDialog().ShowAsync(&CLSID_ShellFileDefExt, pDataObject, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
|
@ -1049,7 +1049,15 @@ HRESULT WINAPI CDesktopFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IData
|
||||||
enum { IDC_PROPERTIES };
|
enum { IDC_PROPERTIES };
|
||||||
if (uMsg == DFM_INVOKECOMMAND && wParam == (pdtobj ? DFM_CMD_PROPERTIES : IDC_PROPERTIES))
|
if (uMsg == DFM_INVOKECOMMAND && wParam == (pdtobj ? DFM_CMD_PROPERTIES : IDC_PROPERTIES))
|
||||||
{
|
{
|
||||||
return SHELL_ExecuteControlPanelCPL(hwndOwner, L"desk.cpl") ? S_OK : E_FAIL;
|
if (pdtobj)
|
||||||
|
{
|
||||||
|
PIDLIST_ABSOLUTE pidl = SHELL_DataObject_ILCloneFullItem(pdtobj, 0);
|
||||||
|
BOOL bIsSelf = _ILIsDesktop(pidl); // Context menu on Desktop item in the shell tree?
|
||||||
|
ILFree(pidl);
|
||||||
|
if (!bIsSelf)
|
||||||
|
return SHELL32_ShowPropertiesDialog(pdtobj); // File selection
|
||||||
|
}
|
||||||
|
return SHELL_ExecuteControlPanelCPL(hwndOwner, L"desk.cpl") ? S_OK : E_FAIL; // Background
|
||||||
}
|
}
|
||||||
else if (uMsg == DFM_MERGECONTEXTMENU && !pdtobj) // Add Properties item when called for directory background
|
else if (uMsg == DFM_MERGECONTEXTMENU && !pdtobj) // Add Properties item when called for directory background
|
||||||
{
|
{
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Разпечатване"
|
IDS_PRINT_VERB "Разпечатване"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u файла, %u папки"
|
IDS_FILE_FOLDER "%u файла, %u папки"
|
||||||
|
|
||||||
IDS_PRINTERS "Печатачи"
|
IDS_PRINTERS "Печатачи"
|
||||||
IDS_FONTS "Шрифтове"
|
IDS_FONTS "Шрифтове"
|
||||||
IDS_INSTALLNEWFONT "Слагане на нов шрифт..."
|
IDS_INSTALLNEWFONT "Слагане на нов шрифт..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -984,7 +984,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Tisknout"
|
IDS_PRINT_VERB "Tisknout"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u souborů, %u složek"
|
IDS_FILE_FOLDER "%u souborů, %u složek"
|
||||||
|
|
||||||
IDS_PRINTERS "Tiskárny"
|
IDS_PRINTERS "Tiskárny"
|
||||||
IDS_FONTS "Písma"
|
IDS_FONTS "Písma"
|
||||||
IDS_INSTALLNEWFONT "Nainstalovat nové písmo..."
|
IDS_INSTALLNEWFONT "Nainstalovat nové písmo..."
|
||||||
|
|
|
@ -235,7 +235,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -983,7 +983,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -977,7 +977,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Drucken"
|
IDS_PRINT_VERB "Drucken"
|
||||||
IDS_CMD_VERB "Cmd hier"
|
IDS_CMD_VERB "Cmd hier"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Dateien, %u Ordner"
|
IDS_FILE_FOLDER "%u Dateien, %u Ordner"
|
||||||
|
|
||||||
IDS_PRINTERS "Drucker"
|
IDS_PRINTERS "Drucker"
|
||||||
IDS_FONTS "Schriftarten"
|
IDS_FONTS "Schriftarten"
|
||||||
IDS_INSTALLNEWFONT "Neue Schriftart installieren..."
|
IDS_INSTALLNEWFONT "Neue Schriftart installieren..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10 //FIXME: Reminder to myself when overhauling that dlg: In this line we will just keep "Type:" (nothing after it) and in the next line we do keep the type in the CONTROL name. Is shown! Harmonize all the left-column 55 width IDD_FOLDER_PROPERTIES (which is too large) with the all 45 width in IDD_FILE_PROPERTIES. The 170 width in right-column is non-negotiable! Increase both dlgs heights to restore vertical arrangement of the Attributes like on 2k3sp2. Make all the Attributes 70 wide each. That will also unbreak the "Advanced"-buttons.
|
LTEXT "Type:", 14004, 8, 40, 55, 10 //FIXME: Reminder to myself when overhauling that dlg: In the next line we do keep the type in the CONTROL name. Is shown! Harmonize all the left-column 55 width IDD_FOLDER_PROPERTIES (which is too large) with the all 45 width in IDD_FILE_PROPERTIES. The 170 width in right-column is non-negotiable! Increase both dlgs heights to restore vertical arrangement of the Attributes like on 2k3sp2. Make all the Attributes 70 wide each. That will also unbreak the "Advanced"-buttons.
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -985,7 +985,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Imprimir"
|
IDS_PRINT_VERB "Imprimir"
|
||||||
IDS_CMD_VERB "Abrir en Línea de Comandos"
|
IDS_CMD_VERB "Abrir en Línea de Comandos"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u archivos, %u carpetas"
|
IDS_FILE_FOLDER "%u archivos, %u carpetas"
|
||||||
|
|
||||||
IDS_PRINTERS "Impresoras"
|
IDS_PRINTERS "Impresoras"
|
||||||
IDS_FONTS "Fuentes"
|
IDS_FONTS "Fuentes"
|
||||||
IDS_INSTALLNEWFONT "Instalar fuente..."
|
IDS_INSTALLNEWFONT "Instalar fuente..."
|
||||||
|
|
|
@ -983,7 +983,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Prindi"
|
IDS_PRINT_VERB "Prindi"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Faili, %u Kausta"
|
IDS_FILE_FOLDER "%u Faili, %u Kausta"
|
||||||
|
|
||||||
IDS_PRINTERS "Printerid"
|
IDS_PRINTERS "Printerid"
|
||||||
IDS_FONTS "Fondid"
|
IDS_FONTS "Fondid"
|
||||||
IDS_INSTALLNEWFONT "Paigalda uus font..."
|
IDS_INSTALLNEWFONT "Paigalda uus font..."
|
||||||
|
|
|
@ -981,7 +981,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Inprimatu"
|
IDS_PRINT_VERB "Inprimatu"
|
||||||
IDS_CMD_VERB "Ireki terminalan"
|
IDS_CMD_VERB "Ireki terminalan"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u fitxategiak, %u karpetak"
|
IDS_FILE_FOLDER "%u fitxategiak, %u karpetak"
|
||||||
|
|
||||||
IDS_PRINTERS "Imprimagailuak"
|
IDS_PRINTERS "Imprimagailuak"
|
||||||
IDS_FONTS "Letra-tipo"
|
IDS_FONTS "Letra-tipo"
|
||||||
IDS_INSTALLNEWFONT "Letra-tipo instalatu..."
|
IDS_INSTALLNEWFONT "Letra-tipo instalatu..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Imprimer"
|
IDS_PRINT_VERB "Imprimer"
|
||||||
IDS_CMD_VERB "Ouvrir l'invite de commandes"
|
IDS_CMD_VERB "Ouvrir l'invite de commandes"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u fichiers, %u répertoires"
|
IDS_FILE_FOLDER "%u fichiers, %u répertoires"
|
||||||
|
|
||||||
IDS_PRINTERS "Imprimantes"
|
IDS_PRINTERS "Imprimantes"
|
||||||
IDS_FONTS "Polices"
|
IDS_FONTS "Polices"
|
||||||
IDS_INSTALLNEWFONT "Installer une nouvelle police..."
|
IDS_INSTALLNEWFONT "Installer une nouvelle police..."
|
||||||
|
|
|
@ -983,7 +983,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "הדפס"
|
IDS_PRINT_VERB "הדפס"
|
||||||
IDS_CMD_VERB "פתח בשורת הפקודה"
|
IDS_CMD_VERB "פתח בשורת הפקודה"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u קבצים, %u תיקיות"
|
IDS_FILE_FOLDER "%u קבצים, %u תיקיות"
|
||||||
|
|
||||||
IDS_PRINTERS "מדפסות"
|
IDS_PRINTERS "מדפסות"
|
||||||
IDS_FONTS "גופנים"
|
IDS_FONTS "גופנים"
|
||||||
IDS_INSTALLNEWFONT "התקנת גופן חדש..."
|
IDS_INSTALLNEWFONT "התקנת גופן חדש..."
|
||||||
|
|
|
@ -978,7 +978,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "प्रिंट"
|
IDS_PRINT_VERB "प्रिंट"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u फ़ाइलें, %u फ़ोल्डर"
|
IDS_FILE_FOLDER "%u फ़ाइलें, %u फ़ोल्डर"
|
||||||
|
|
||||||
IDS_PRINTERS "प्रिंटर"
|
IDS_PRINTERS "प्रिंटर"
|
||||||
IDS_FONTS "फोंट्स"
|
IDS_FONTS "फोंट्स"
|
||||||
IDS_INSTALLNEWFONT "नया फ़ॉन्ट इन्स्टॉल करें..."
|
IDS_INSTALLNEWFONT "नया फ़ॉन्ट इन्स्टॉल करें..."
|
||||||
|
|
|
@ -975,7 +975,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Nyomtatás"
|
IDS_PRINT_VERB "Nyomtatás"
|
||||||
IDS_CMD_VERB "Parancssor indítása innen"
|
IDS_CMD_VERB "Parancssor indítása innen"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u fájl, %u mappa"
|
IDS_FILE_FOLDER "%u fájl, %u mappa"
|
||||||
|
|
||||||
IDS_PRINTERS "Nyomtatók"
|
IDS_PRINTERS "Nyomtatók"
|
||||||
IDS_FONTS "Betűtípusok"
|
IDS_FONTS "Betűtípusok"
|
||||||
IDS_INSTALLNEWFONT "Új betűtípus telepítése..."
|
IDS_INSTALLNEWFONT "Új betűtípus telepítése..."
|
||||||
|
|
|
@ -973,7 +973,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Cetak"
|
IDS_PRINT_VERB "Cetak"
|
||||||
IDS_CMD_VERB "Perintah Cepat di sini"
|
IDS_CMD_VERB "Perintah Cepat di sini"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Berkas, %u Folder"
|
IDS_FILE_FOLDER "%u Berkas, %u Folder"
|
||||||
|
|
||||||
IDS_PRINTERS "Printer"
|
IDS_PRINTERS "Printer"
|
||||||
IDS_FONTS "Fon"
|
IDS_FONTS "Fon"
|
||||||
IDS_INSTALLNEWFONT "Memasang fon baru..."
|
IDS_INSTALLNEWFONT "Memasang fon baru..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Stampa"
|
IDS_PRINT_VERB "Stampa"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u File, %u Cartelle"
|
IDS_FILE_FOLDER "%u File, %u Cartelle"
|
||||||
|
|
||||||
IDS_PRINTERS "Stampanti"
|
IDS_PRINTERS "Stampanti"
|
||||||
IDS_FONTS "Font"
|
IDS_FONTS "Font"
|
||||||
IDS_INSTALLNEWFONT "Installazione nuovi Font..."
|
IDS_INSTALLNEWFONT "Installazione nuovi Font..."
|
||||||
|
|
|
@ -973,7 +973,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "印刷"
|
IDS_PRINT_VERB "印刷"
|
||||||
IDS_CMD_VERB "ここでコマンドプロンプトを開く"
|
IDS_CMD_VERB "ここでコマンドプロンプトを開く"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u 個のファイル、 %u 個のフォルダ"
|
IDS_FILE_FOLDER "%u 個のファイル、 %u 個のフォルダ"
|
||||||
|
|
||||||
IDS_PRINTERS "プリンタ"
|
IDS_PRINTERS "プリンタ"
|
||||||
IDS_FONTS "フォント"
|
IDS_FONTS "フォント"
|
||||||
IDS_INSTALLNEWFONT "新しいフォントのインストール..."
|
IDS_INSTALLNEWFONT "新しいフォントのインストール..."
|
||||||
|
|
|
@ -983,7 +983,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Skriv ut"
|
IDS_PRINT_VERB "Skriv ut"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u filer, %u mapper"
|
IDS_FILE_FOLDER "%u filer, %u mapper"
|
||||||
|
|
||||||
IDS_PRINTERS "Skrivere"
|
IDS_PRINTERS "Skrivere"
|
||||||
IDS_FONTS "Skrifttyper"
|
IDS_FONTS "Skrifttyper"
|
||||||
IDS_INSTALLNEWFONT "Installere nye skrifttyper..."
|
IDS_INSTALLNEWFONT "Installere nye skrifttyper..."
|
||||||
|
|
|
@ -985,7 +985,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Drukuj"
|
IDS_PRINT_VERB "Drukuj"
|
||||||
IDS_CMD_VERB "&Otwórz wiersz polecenia tutaj"
|
IDS_CMD_VERB "&Otwórz wiersz polecenia tutaj"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Plików, %u Katalogów"
|
IDS_FILE_FOLDER "%u Plików, %u Katalogów"
|
||||||
|
|
||||||
IDS_PRINTERS "Drukarki"
|
IDS_PRINTERS "Drukarki"
|
||||||
IDS_FONTS "Czcionki"
|
IDS_FONTS "Czcionki"
|
||||||
IDS_INSTALLNEWFONT "Zainstaluj nową czcionkę..."
|
IDS_INSTALLNEWFONT "Zainstaluj nową czcionkę..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Imprimir"
|
IDS_PRINT_VERB "Imprimir"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Arquivos, %u Pastas"
|
IDS_FILE_FOLDER "%u Arquivos, %u Pastas"
|
||||||
|
|
||||||
IDS_PRINTERS "Impressoras"
|
IDS_PRINTERS "Impressoras"
|
||||||
IDS_FONTS "Fontes"
|
IDS_FONTS "Fontes"
|
||||||
IDS_INSTALLNEWFONT "Instalar Nova Fonte..."
|
IDS_INSTALLNEWFONT "Instalar Nova Fonte..."
|
||||||
|
|
|
@ -985,7 +985,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Imprimir"
|
IDS_PRINT_VERB "Imprimir"
|
||||||
IDS_CMD_VERB "Linha de Comandos aqui"
|
IDS_CMD_VERB "Linha de Comandos aqui"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Ficheiros, %u Pastas"
|
IDS_FILE_FOLDER "%u Ficheiros, %u Pastas"
|
||||||
|
|
||||||
IDS_PRINTERS "Impressoras"
|
IDS_PRINTERS "Impressoras"
|
||||||
IDS_FONTS "Tipos de letra"
|
IDS_FONTS "Tipos de letra"
|
||||||
IDS_INSTALLNEWFONT "Instalar novo tipo de letra..."
|
IDS_INSTALLNEWFONT "Instalar novo tipo de letra..."
|
||||||
|
|
|
@ -984,7 +984,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Imprimare"
|
IDS_PRINT_VERB "Imprimare"
|
||||||
IDS_CMD_VERB "Deschidere Panou de control aici"
|
IDS_CMD_VERB "Deschidere Panou de control aici"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u fişiere, %u foldere"
|
IDS_FILE_FOLDER "%u fişiere, %u foldere"
|
||||||
|
|
||||||
IDS_PRINTERS "Imprimante"
|
IDS_PRINTERS "Imprimante"
|
||||||
IDS_FONTS "Fonturi"
|
IDS_FONTS "Fonturi"
|
||||||
IDS_INSTALLNEWFONT "Instalare font nou…"
|
IDS_INSTALLNEWFONT "Instalare font nou…"
|
||||||
|
|
|
@ -985,7 +985,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Печать"
|
IDS_PRINT_VERB "Печать"
|
||||||
IDS_CMD_VERB "Командная строка"
|
IDS_CMD_VERB "Командная строка"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u файлов, %u папок"
|
IDS_FILE_FOLDER "%u файлов, %u папок"
|
||||||
|
|
||||||
IDS_PRINTERS "Принтеры"
|
IDS_PRINTERS "Принтеры"
|
||||||
IDS_FONTS "Шрифты"
|
IDS_FONTS "Шрифты"
|
||||||
IDS_INSTALLNEWFONT "Установить новый шрифт..."
|
IDS_INSTALLNEWFONT "Установить новый шрифт..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Tlačiť"
|
IDS_PRINT_VERB "Tlačiť"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "súbory: %u, priečinky: %u"
|
IDS_FILE_FOLDER "súbory: %u, priečinky: %u"
|
||||||
|
|
||||||
IDS_PRINTERS "Tlačiarne"
|
IDS_PRINTERS "Tlačiarne"
|
||||||
IDS_FONTS "Písma"
|
IDS_FONTS "Písma"
|
||||||
IDS_INSTALLNEWFONT "&Nainštalovať nové písmo..."
|
IDS_INSTALLNEWFONT "&Nainštalovať nové písmo..."
|
||||||
|
|
|
@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE
|
||||||
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT
|
||||||
LTEXT "Type of file:", 14004, 8, 40, 55, 10
|
LTEXT "Type:", 14004, 8, 40, 55, 10
|
||||||
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10
|
||||||
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
|
||||||
LTEXT "Location:", 14008, 8, 56, 55, 10
|
LTEXT "Location:", 14008, 8, 56, 55, 10
|
||||||
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Print"
|
IDS_PRINT_VERB "Print"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Files, %u Folders"
|
IDS_FILE_FOLDER "%u Files, %u Folders"
|
||||||
|
|
||||||
IDS_PRINTERS "Printers"
|
IDS_PRINTERS "Printers"
|
||||||
IDS_FONTS "Fonts"
|
IDS_FONTS "Fonts"
|
||||||
IDS_INSTALLNEWFONT "Install New Font..."
|
IDS_INSTALLNEWFONT "Install New Font..."
|
||||||
|
|
|
@ -983,7 +983,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Printo"
|
IDS_PRINT_VERB "Printo"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Dokumenta, %u Dosje"
|
IDS_FILE_FOLDER "%u Dokumenta, %u Dosje"
|
||||||
|
|
||||||
IDS_PRINTERS "Printera"
|
IDS_PRINTERS "Printera"
|
||||||
IDS_FONTS "Fonte"
|
IDS_FONTS "Fonte"
|
||||||
IDS_INSTALLNEWFONT "Instalo Fonte të Ri..."
|
IDS_INSTALLNEWFONT "Instalo Fonte të Ri..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Skriv ut"
|
IDS_PRINT_VERB "Skriv ut"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u filer, %u mappar"
|
IDS_FILE_FOLDER "%u filer, %u mappar"
|
||||||
|
|
||||||
IDS_PRINTERS "Skrivare"
|
IDS_PRINTERS "Skrivare"
|
||||||
IDS_FONTS "Teckensnitt"
|
IDS_FONTS "Teckensnitt"
|
||||||
IDS_INSTALLNEWFONT "Installera nytt teckensnitt..."
|
IDS_INSTALLNEWFONT "Installera nytt teckensnitt..."
|
||||||
|
|
|
@ -985,7 +985,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Yazdır"
|
IDS_PRINT_VERB "Yazdır"
|
||||||
IDS_CMD_VERB "Burada komut istemi aç"
|
IDS_CMD_VERB "Burada komut istemi aç"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u Dosya, %u Dizin"
|
IDS_FILE_FOLDER "%u Dosya, %u Dizin"
|
||||||
|
|
||||||
IDS_PRINTERS "Yazıcılar"
|
IDS_PRINTERS "Yazıcılar"
|
||||||
IDS_FONTS "Yazı Tipleri"
|
IDS_FONTS "Yazı Tipleri"
|
||||||
IDS_INSTALLNEWFONT "Yeni Yazı Tipi Yükle..."
|
IDS_INSTALLNEWFONT "Yeni Yazı Tipi Yükle..."
|
||||||
|
|
|
@ -976,7 +976,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "Друк"
|
IDS_PRINT_VERB "Друк"
|
||||||
IDS_CMD_VERB "Command Prompt here"
|
IDS_CMD_VERB "Command Prompt here"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u файлів, %u папок"
|
IDS_FILE_FOLDER "%u файлів, %u папок"
|
||||||
|
|
||||||
IDS_PRINTERS "Принтери"
|
IDS_PRINTERS "Принтери"
|
||||||
IDS_FONTS "Шрифти"
|
IDS_FONTS "Шрифти"
|
||||||
IDS_INSTALLNEWFONT "Інсталювати новий шрифт..."
|
IDS_INSTALLNEWFONT "Інсталювати новий шрифт..."
|
||||||
|
|
|
@ -986,7 +986,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "打印"
|
IDS_PRINT_VERB "打印"
|
||||||
IDS_CMD_VERB "在此打开命令提示符"
|
IDS_CMD_VERB "在此打开命令提示符"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u 个文件,%u 个文件夹"
|
IDS_FILE_FOLDER "%u 个文件,%u 个文件夹"
|
||||||
|
|
||||||
IDS_PRINTERS "打印机"
|
IDS_PRINTERS "打印机"
|
||||||
IDS_FONTS "字体"
|
IDS_FONTS "字体"
|
||||||
IDS_INSTALLNEWFONT "安装新字体..."
|
IDS_INSTALLNEWFONT "安装新字体..."
|
||||||
|
|
|
@ -984,7 +984,10 @@ BEGIN
|
||||||
IDS_PRINT_VERB "列印"
|
IDS_PRINT_VERB "列印"
|
||||||
IDS_CMD_VERB "在這裡開啟命令提示字元"
|
IDS_CMD_VERB "在這裡開啟命令提示字元"
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u 個檔案,%u 個檔案夾"
|
IDS_FILE_FOLDER "%u 個檔案,%u 個檔案夾"
|
||||||
|
|
||||||
IDS_PRINTERS "印表機"
|
IDS_PRINTERS "印表機"
|
||||||
IDS_FONTS "字型"
|
IDS_FONTS "字型"
|
||||||
IDS_INSTALLNEWFONT "安裝新字型..."
|
IDS_INSTALLNEWFONT "安裝新字型..."
|
||||||
|
|
|
@ -985,7 +985,11 @@ BEGIN
|
||||||
IDS_PRINT_VERB "列印"
|
IDS_PRINT_VERB "列印"
|
||||||
IDS_CMD_VERB "在這裡開啟命令提示字元"
|
IDS_CMD_VERB "在這裡開啟命令提示字元"
|
||||||
|
|
||||||
|
|
||||||
|
IDS_MULTIPLETYPES "Multiple Types"
|
||||||
|
IDS_VARIOUSFOLDERS "Various Folders"
|
||||||
IDS_FILE_FOLDER "%u 個檔案,%u 個資料夾"
|
IDS_FILE_FOLDER "%u 個檔案,%u 個資料夾"
|
||||||
|
|
||||||
IDS_PRINTERS "印表機"
|
IDS_PRINTERS "印表機"
|
||||||
IDS_FONTS "字型"
|
IDS_FONTS "字型"
|
||||||
IDS_INSTALLNEWFONT "安裝新字型..."
|
IDS_INSTALLNEWFONT "安裝新字型..."
|
||||||
|
|
|
@ -255,6 +255,13 @@ SHELL_GetUIObjectOfAbsoluteItem(
|
||||||
_In_ PCIDLIST_ABSOLUTE pidl,
|
_In_ PCIDLIST_ABSOLUTE pidl,
|
||||||
_In_ REFIID riid, _Out_ void **ppvObj);
|
_In_ REFIID riid, _Out_ void **ppvObj);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
SHELL_DisplayNameOf(
|
||||||
|
_In_opt_ IShellFolder *psf,
|
||||||
|
_In_ LPCITEMIDLIST pidl,
|
||||||
|
_In_opt_ UINT Flags,
|
||||||
|
_Out_ PWSTR *ppStr);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes);
|
SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes);
|
||||||
HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl);
|
HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl);
|
||||||
|
|
|
@ -262,6 +262,10 @@
|
||||||
#define IDS_SHORTCUT_RUN_MIN 4168
|
#define IDS_SHORTCUT_RUN_MIN 4168
|
||||||
#define IDS_SHORTCUT_RUN_MAX 4169
|
#define IDS_SHORTCUT_RUN_MAX 4169
|
||||||
|
|
||||||
|
/* FS property sheet */
|
||||||
|
#define IDS_MULTIPLETYPES 8705
|
||||||
|
#define IDS_VARIOUSFOLDERS 8709
|
||||||
|
|
||||||
#define IDS_MENU_EMPTY 34561
|
#define IDS_MENU_EMPTY 34561
|
||||||
|
|
||||||
/* Note: those strings are referenced from the registry */
|
/* Note: those strings are referenced from the registry */
|
||||||
|
|
|
@ -84,30 +84,6 @@ SHParseDarwinIDFromCacheW(LPCWSTR lpUnknown1, LPWSTR lpUnknown2)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Unimplemented
|
|
||||||
*/
|
|
||||||
EXTERN_C HRESULT
|
|
||||||
WINAPI
|
|
||||||
SHMultiFileProperties(IDataObject *pDataObject, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
FIXME("SHMultiFileProperties() stub\n");
|
|
||||||
|
|
||||||
// Temporary workaround to display a property sheet if possible
|
|
||||||
if (DataObject_GetHIDACount(pDataObject) == 1)
|
|
||||||
return SHELL32_ShowPropertiesDialog(pDataObject);
|
|
||||||
|
|
||||||
if (pDataObject)
|
|
||||||
{
|
|
||||||
HWND hWnd;
|
|
||||||
if (FAILED(IUnknown_GetWindow(pDataObject, &hWnd))) // Will probably not work but we have no other option
|
|
||||||
hWnd = NULL;
|
|
||||||
SHELL_ErrorBox(hWnd, HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED));
|
|
||||||
}
|
|
||||||
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unimplemented
|
* Unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -402,6 +402,29 @@ SHELL_GetUIObjectOfAbsoluteItem(
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
SHELL_DisplayNameOf(
|
||||||
|
_In_opt_ IShellFolder *psf,
|
||||||
|
_In_ LPCITEMIDLIST pidl,
|
||||||
|
_In_opt_ UINT Flags,
|
||||||
|
_Out_ PWSTR *ppStr)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
CComPtr<IShellFolder> psfRoot;
|
||||||
|
if (!psf)
|
||||||
|
{
|
||||||
|
PCUITEMID_CHILD pidlChild;
|
||||||
|
hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfRoot), &pidlChild);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
psf = psfRoot;
|
||||||
|
pidl = pidlChild;
|
||||||
|
}
|
||||||
|
STRRET sr;
|
||||||
|
hr = psf->GetDisplayNameOf((PCUITEMID_CHILD)pidl, Flags, &sr);
|
||||||
|
return SUCCEEDED(hr) ? StrRetToStrW(&sr, pidl, ppStr) : hr;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DisplayNameOfW [SHELL32.757] (Vista+)
|
* DisplayNameOfW [SHELL32.757] (Vista+)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <shlguid_undoc.h>
|
#include <shlguid_undoc.h>
|
||||||
#include <wine/debug.h>
|
#include <wine/debug.h>
|
||||||
#include <wine/unicode.h>
|
#include <wine/unicode.h>
|
||||||
|
#include <shellutils.h>
|
||||||
|
|
||||||
#include "pidl.h"
|
#include "pidl.h"
|
||||||
#include "shell32_main.h"
|
#include "shell32_main.h"
|
||||||
|
@ -2606,11 +2607,9 @@ DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
|
||||||
*/
|
*/
|
||||||
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
|
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
|
||||||
{
|
{
|
||||||
UINT i;
|
|
||||||
|
|
||||||
if (apidl)
|
if (apidl)
|
||||||
{
|
{
|
||||||
for (i = 0; i < cidl; i++)
|
for (UINT i = 0; i < cidl; i++)
|
||||||
SHFree(apidl[i]);
|
SHFree(apidl[i]);
|
||||||
SHFree(apidl);
|
SHFree(apidl);
|
||||||
}
|
}
|
||||||
|
@ -2623,17 +2622,21 @@ void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
|
||||||
*/
|
*/
|
||||||
PITEMID_CHILD* _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
|
PITEMID_CHILD* _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
|
||||||
{
|
{
|
||||||
UINT i;
|
|
||||||
PITEMID_CHILD *apidldest;
|
PITEMID_CHILD *apidldest;
|
||||||
|
|
||||||
if (!apidlsrc)
|
if (!apidlsrc)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
|
apidldest = SHAlloc(cidl * sizeof(PITEMID_CHILD));
|
||||||
|
for (UINT i = 0; i < cidl; i++)
|
||||||
for (i = 0; i < cidl; i++)
|
{
|
||||||
apidldest[i] = ILClone(apidlsrc[i]);
|
PITEMID_CHILD clone = ILClone(apidlsrc[i]);
|
||||||
|
if ((apidldest[i] = clone) == NULL)
|
||||||
|
{
|
||||||
|
_ILFreeaPidl(apidldest, i);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return apidldest;
|
return apidldest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2645,17 +2648,28 @@ PITEMID_CHILD* _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
|
||||||
LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
|
LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
|
||||||
{
|
{
|
||||||
UINT i;
|
UINT i;
|
||||||
LPITEMIDLIST *dst;
|
LPITEMIDLIST *dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
|
||||||
|
|
||||||
dst = SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
|
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (pidl)
|
|
||||||
*pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
|
|
||||||
|
|
||||||
for (i = 0; i < cida->cidl; i++)
|
for (i = 0; i < cida->cidl; i++)
|
||||||
dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
|
{
|
||||||
|
PITEMID_CHILD clone = ILClone(HIDA_GetPIDLItem(cida, i));
|
||||||
|
if ((dst[i] = clone) == NULL)
|
||||||
|
{
|
||||||
|
_ILFreeaPidl(dst, i);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pidl)
|
||||||
|
{
|
||||||
|
*pidl = ILClone(HIDA_GetPIDLFolder(cida));
|
||||||
|
if (!*pidl)
|
||||||
|
{
|
||||||
|
_ILFreeaPidl(dst, cida->cidl);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
|
@ -652,9 +652,6 @@ public:
|
||||||
return m_pUnkSite ? m_pUnkSite->QueryInterface(riid, ppvSite) : E_FAIL;
|
return m_pUnkSite ? m_pUnkSite->QueryInterface(riid, ppvSite) : E_FAIL;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
#define S_LESSTHAN 0xffff
|
#define S_LESSTHAN 0xffff
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue