Author: rharabien
Date: Tue Jan 10 16:53:46 2012
New Revision: 54904
URL:
http://svn.reactos.org/svn/reactos?rev=54904&view=rev
Log:
[SHELL32]
- Make File Properties code safer and better
- Change version information when it user selects item in listbox (in previous version
user had to double click)
- Show filename only in Open With dialog. Part of patch by EDIJS (#6772)
Modified:
trunk/reactos/dll/win32/shell32/fprop.cpp
trunk/reactos/dll/win32/shell32/openwithmenu.cpp
Modified: trunk/reactos/dll/win32/shell32/fprop.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/fprop.cp…
==============================================================================
--- trunk/reactos/dll/win32/shell32/fprop.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/fprop.cpp [iso-8859-1] Tue Jan 10 16:53:46 2012
@@ -32,7 +32,8 @@
EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT
max_iface, IDataObject *pDataObj);
-static LONG SH_GetAssociatedApplication(WCHAR *pwszFileExt, WCHAR *pwszAssocApp)
+static LONG
+SH_GetAssociatedApplication(WCHAR *pwszFileExt, WCHAR *pwszAssocApp)
{
WCHAR wszBuf[MAX_PATH] = {0};
LONG result;
@@ -59,7 +60,8 @@
return result;
}
-static LONG SH_FileGeneralOpensWith(HWND hwndDlg, WCHAR *fileext)
+static LONG
+SH_FileGeneralOpensWith(HWND hwndDlg, WCHAR *fileext)
{
LONG result;
WCHAR wAppName[MAX_PATH] = {0};
@@ -89,7 +91,8 @@
*
*/
-LPWSTR SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf)
+LPWSTR
+SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf)
{
NUMBERFMTW nf;
WCHAR szNumber[24];
@@ -234,7 +237,7 @@
* find executable name from registry, retrieve description from executable
*/
-BOOL
+static BOOL
SH_FileGeneralSetFileType(HWND hwndDlg, WCHAR *filext)
{
WCHAR name[MAX_PATH];
@@ -356,7 +359,7 @@
* formats a given LPFILETIME struct into readable user format
*/
-BOOL
+static BOOL
SHFileGeneralGetFileTimeString(LPFILETIME lpFileTime, WCHAR *lpResult)
{
FILETIME ft;
@@ -385,7 +388,7 @@
*
*/
-BOOL
+static BOOL
SH_FileGeneralSetText(HWND hwndDlg, WCHAR *lpstr)
{
int flength;
@@ -433,7 +436,7 @@
*
*/
-BOOL
+static BOOL
SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR *lpfilename, PULARGE_INTEGER
lpfilesize)
{
BOOL result;
@@ -514,19 +517,20 @@
*
*/
-BOOL
-SH_FileVersionQuerySetText(HWND hwndDlg, DWORD dlgId, LPVOID pInfo, WCHAR *text, WCHAR
**resptr)
-{
- UINT reslen;
-
- if (hwndDlg == NULL || resptr == NULL || text == NULL)
- return FALSE;
-
- if (VerQueryValueW(pInfo, text, (LPVOID *)resptr, &reslen))
+static BOOL
+SH_FileVersionQuerySetText(HWND hwndDlg, DWORD idCtrl, LPVOID pInfo, LPCWSTR pwszProp)
+{
+ UINT cbResult;
+ WCHAR *pwszResult = NULL;
+
+ if (hwndDlg == NULL || pwszProp == NULL)
+ return FALSE;
+
+ if (VerQueryValueW(pInfo, pwszProp, (LPVOID *)&pwszResult, &cbResult))
{
/* file description property */
- TRACE("%s :: %s\n", debugstr_w(text), debugstr_w(*resptr));
- SetDlgItemTextW(hwndDlg, dlgId, *resptr);
+ TRACE("%s :: %s\n", debugstr_w(pwszProp), debugstr_w(pwszResult));
+ SetDlgItemTextW(hwndDlg, idCtrl, pwszResult);
return TRUE;
}
@@ -541,7 +545,7 @@
*
*/
-BOOL
+static BOOL
SH_FileVersionQuerySetListText(HWND hwndDlg, LPVOID pInfo, LPCWSTR pwszProp, WORD wLang,
WORD wCode)
{
HWND hDlgCtrl;
@@ -576,86 +580,82 @@
* sets all file version properties in dialog
*/
-BOOL
+static BOOL
SH_FileVersionInitialize(HWND hwndDlg, LPCWSTR pwszFilename)
{
LPVOID pBuf;
- DWORD versize;
- DWORD handle;
- LPVOID info = NULL;
- UINT infolen;
+ DWORD cbBuf;
+ VS_FIXEDFILEINFO *pInfo = NULL;
+ UINT cBytes;
WCHAR buff[256];
HWND hDlgCtrl;
- WORD lang = 0;
- WORD code = 0;
- LPLANGANDCODEPAGE lplangcode;
- WCHAR *str;
+ WORD wLang = 0, wCode = 0;
+ LPLANGANDCODEPAGE lpLangCode;
if (pwszFilename == 0)
return FALSE;
- if (!(versize = GetFileVersionInfoSizeW(pwszFilename, &handle)))
+ if (!(cbBuf = GetFileVersionInfoSizeW(pwszFilename, NULL)))
{
WARN("GetFileVersionInfoSize failed\n");
return FALSE;
}
- if (!(pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, versize)))
- {
- WARN("HeapAlloc failed bytes %x\n", versize);
- return FALSE;
- }
-
- if (!GetFileVersionInfoW(pwszFilename, handle, versize, pBuf))
+ if (!(pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbBuf)))
+ {
+ WARN("HeapAlloc failed bytes %x\n", cbBuf);
+ return FALSE;
+ }
+
+ if (!GetFileVersionInfoW(pwszFilename, 0, cbBuf, pBuf))
{
HeapFree(GetProcessHeap(), 0, pBuf);
return FALSE;
}
- if (VerQueryValueW(pBuf, L"\\", &info, &infolen))
- {
- VS_FIXEDFILEINFO *inf = (VS_FIXEDFILEINFO *)info;
- swprintf(buff, L"%u.%u.%u.%u", HIWORD(inf->dwFileVersionMS),
- LOWORD(inf->dwFileVersionMS),
- HIWORD(inf->dwFileVersionLS),
- LOWORD(inf->dwFileVersionLS));
- TRACE("MS %x LS %x res %s \n", inf->dwFileVersionMS,
inf->dwFileVersionLS, debugstr_w(buff));
+ if (VerQueryValueW(pBuf, L"\\", (PVOID*)&pInfo, &cBytes))
+ {
+ swprintf(buff, L"%u.%u.%u.%u", HIWORD(pInfo->dwFileVersionMS),
+ LOWORD(pInfo->dwFileVersionMS),
+ HIWORD(pInfo->dwFileVersionLS),
+ LOWORD(pInfo->dwFileVersionLS));
+ TRACE("MS %x LS %x res %s \n", pInfo->dwFileVersionMS,
pInfo->dwFileVersionLS, debugstr_w(buff));
SetDlgItemTextW(hwndDlg, 14001, buff);
}
- if (VerQueryValueW(pBuf, L"VarFileInfo\\Translation", (LPVOID
*)&lplangcode, &infolen))
+ if (VerQueryValueW(pBuf, L"VarFileInfo\\Translation", (LPVOID
*)&lpLangCode, &cBytes))
{
/* FIXME find language from current locale / if not available,
* default to english
* for now default to first available language
*/
- lang = lplangcode->lang;
- code = lplangcode->code;
- }
-
- swprintf(buff, L"\\StringFileInfo\\%04x%04x\\FileDescription", lang,
code);
- SH_FileVersionQuerySetText(hwndDlg, 14003, pBuf, buff, &str);
-
- swprintf(buff, L"\\StringFileInfo\\%04x%04x\\LegalCopyright", lang, code);
- SH_FileVersionQuerySetText(hwndDlg, 14005, pBuf, buff, &str);
+ wLang = lpLangCode->lang;
+ wCode = lpLangCode->code;
+ }
+
+ swprintf(buff, L"\\StringFileInfo\\%04x%04x\\FileDescription", wLang,
wCode);
+ SH_FileVersionQuerySetText(hwndDlg, 14003, pBuf, buff);
+
+ swprintf(buff, L"\\StringFileInfo\\%04x%04x\\LegalCopyright", wLang,
wCode);
+ SH_FileVersionQuerySetText(hwndDlg, 14005, pBuf, buff);
/* listbox properties */
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"CompanyName", lang, code);
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"FileVersion", lang, code);
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"InternalName", lang,
code);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"CompanyName", wLang,
wCode);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"FileVersion", wLang,
wCode);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"InternalName", wLang,
wCode);
/* FIXME insert language identifier */
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"OriginalFilename", lang,
code);
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductName", lang, code);
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductVersion", lang,
code);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"OriginalFilename", wLang,
wCode);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductName", wLang,
wCode);
+ SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductVersion", wLang,
wCode);
SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pBuf);
/* select first item */
hDlgCtrl = GetDlgItem(hwndDlg, 14009);
SendMessageW(hDlgCtrl, LB_SETCURSEL, 0, 0);
- str = (WCHAR *) SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL);
- SetDlgItemTextW(hwndDlg, 14010, str);
+ LPCWSTR pwszText = (WCHAR *)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0,
(LPARAM)NULL);
+ SetDlgItemTextW(hwndDlg, 14010, pwszText);
return TRUE;
}
@@ -667,64 +667,55 @@
* wnd proc of 'Version' property sheet page
*/
-INT_PTR
-CALLBACK
+INT_PTR CALLBACK
SH_FileVersionDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
- LPPROPSHEETPAGE ppsp;
- WCHAR *lpstr;
- LPVOID buf;
-
switch (uMsg)
{
case WM_INITDIALOG:
- ppsp = (LPPROPSHEETPAGE)lParam;
+ {
+ LPPROPSHEETPAGE ppsp = (LPPROPSHEETPAGE)lParam;
if (ppsp == NULL)
break;
TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg,
lParam, ppsp->lParam);
- lpstr = (WCHAR *)ppsp->lParam;
-
- if (lpstr == NULL)
+ LPCWSTR pwszFilename = (LPCWSTR)ppsp->lParam;
+
+ if (pwszFilename == NULL)
break;
- return SH_FileVersionInitialize(hwndDlg, lpstr);
-
+ return SH_FileVersionInitialize(hwndDlg, pwszFilename);
+ }
case WM_COMMAND:
- if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_DBLCLK)
+ if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_SELCHANGE)
{
- HWND hDlgCtrl;
- LRESULT lresult;
- WCHAR *str;
-
- hDlgCtrl = GetDlgItem(hwndDlg, 14009);
- lresult = SendMessageW(hDlgCtrl, LB_GETCURSEL, (WPARAM)NULL,
(LPARAM)NULL);
-
- if (lresult == LB_ERR)
+ HWND hDlgCtrl = (HWND)lParam;
+
+ LRESULT Index = SendMessageW(hDlgCtrl, LB_GETCURSEL, (WPARAM)NULL,
(LPARAM)NULL);
+ if (Index == LB_ERR)
break;
- str = (WCHAR *)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)lresult,
(LPARAM)NULL);
-
- if (str == NULL)
+ LPCWSTR pwszData = (LPCWSTR)SendMessageW(hDlgCtrl, LB_GETITEMDATA,
(WPARAM)Index, (LPARAM)NULL);
+ if (pwszData == NULL)
break;
- TRACE("hDlgCtrl %x string %s \n", hDlgCtrl, debugstr_w(str));
- SetDlgItemTextW(hwndDlg, 14010, str);
+ TRACE("hDlgCtrl %x string %s\n", hDlgCtrl,
debugstr_w(pwszData));
+ SetDlgItemTextW(hwndDlg, 14010, pwszData);
return TRUE;
}
break;
-
case WM_DESTROY:
- buf = (LPVOID) GetWindowLongPtr(hwndDlg, DWL_USER);
- HeapFree(GetProcessHeap(), 0, buf);
+ {
+ LPVOID pBuf = (LPVOID)GetWindowLongPtr(hwndDlg, DWL_USER);
+ HeapFree(GetProcessHeap(), 0, pBuf);
break;
-
+ }
default:
break;
}
@@ -740,48 +731,45 @@
*
*/
-INT_PTR
-CALLBACK
+INT_PTR CALLBACK
SH_FileGeneralDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
- LPPROPSHEETPAGEW ppsp;
- WCHAR *lpstr;
-
switch (uMsg)
{
case WM_INITDIALOG:
- ppsp = (LPPROPSHEETPAGEW)lParam;
+ {
+ LPPROPSHEETPAGEW ppsp = (LPPROPSHEETPAGEW)lParam;
if (ppsp == NULL)
break;
TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg,
lParam, ppsp->lParam);
- lpstr = (WCHAR *)ppsp->lParam;
-
- if (lpstr == NULL)
+ WCHAR *pwszFilename = (WCHAR *)ppsp->lParam;
+
+ if (pwszFilename == NULL)
{
ERR("no filename\n");
break;
}
/* set general text properties filename filelocation and icon */
- SH_FileGeneralSetText(hwndDlg, lpstr);
+ SH_FileGeneralSetText(hwndDlg, pwszFilename);
/* enumerate file extension from registry and application which opens it */
- SH_FileGeneralSetFileType(hwndDlg, wcsrchr(lpstr, L'.'));
+ SH_FileGeneralSetFileType(hwndDlg, wcsrchr(pwszFilename, L'.'));
/* set opens with */
- SH_FileGeneralOpensWith(hwndDlg, wcsrchr(lpstr, L'.'));
+ SH_FileGeneralOpensWith(hwndDlg, wcsrchr(pwszFilename, L'.'));
/* set file time create/modfied/accessed */
- SH_FileGeneralSetFileSizeTime(hwndDlg, lpstr, NULL);
+ SH_FileGeneralSetFileSizeTime(hwndDlg, pwszFilename, NULL);
return TRUE;
-
+ }
default:
break;
}
@@ -789,8 +777,7 @@
return FALSE;
}
-BOOL
-CALLBACK
+static BOOL CALLBACK
AddShellPropSheetExCallback(HPROPSHEETPAGE hPage, LPARAM lParam)
{
PROPSHEETHEADERW *pInfo = (PROPSHEETHEADERW *)lParam;
@@ -804,48 +791,33 @@
return FALSE;
}
-int
-EnumPropSheetExt(LPWSTR wFileName, PROPSHEETHEADERW *pInfo, int NumPages, HPSXA *phpsxa,
IDataObject *pDataObj)
-{
- WCHAR szName[MAX_PATH] = { 0 };
- WCHAR *pOffset;
- UINT Length;
+static int
+EnumPropSheetExt(LPCWSTR pwszPath, PROPSHEETHEADERW *pInfo, int NumPages, HPSXA *phpsxa,
IDataObject *pDataObj)
+{
+ WCHAR wszName[MAX_PATH];
+ WCHAR *pwszExt;
+ UINT cchPath;
DWORD dwName;
int Pages;
CLSID clsid;
- pOffset = wcsrchr(wFileName, L'.');
-
- if (!pOffset)
- {
- Length = wcslen(szName);
-
- if (Length + 6 > sizeof(szName) / sizeof(szName[0]))
- return 0;
-
- if (CLSIDFromString(wFileName, &clsid) == NOERROR)
- {
- wcscpy(szName, L"CLSID\\");
- wcscpy(&szName[6], wFileName);
- }
+ pwszExt = PathFindExtensionW(pwszPath);
+
+ if (!pwszExt[0])
+ {
+ cchPath = wcslen(pwszPath);
+
+ if (CLSIDFromString(pwszPath, &clsid) == NOERROR)
+ StringCbPrintfW(wszName, sizeof(wszName), L"CLSID\\%s", pwszPath);
else
- {
- wcscpy(szName, wFileName);
- }
+ StringCbCopyW(wszName, sizeof(wszName), pwszPath);
}
else
- {
- Length = wcslen(pOffset);
-
- if (Length >= sizeof(szName) / sizeof(szName[0]))
- return 0;
-
- wcscpy(szName, pOffset);
- }
-
- TRACE("EnumPropSheetExt szName %s\n", debugstr_w(szName));
-
- phpsxa[0] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages,
pDataObj);
+ StringCbCopyW(wszName, sizeof(wszName), pwszExt);
+
+ TRACE("EnumPropSheetExt wszName %s\n", debugstr_w(wszName));
+
+ phpsxa[0] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, wszName, NumPages,
pDataObj);
Pages = SHAddFromPropSheetExtArray(phpsxa[0], AddShellPropSheetExCallback,
(LPARAM)pInfo);
phpsxa[1] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"*", NumPages -
Pages, pDataObj);
@@ -853,16 +825,15 @@
phpsxa[2] = NULL;
- if (pOffset)
+ if (pwszExt)
{
/* try to load property sheet handlers from prog id key */
- dwName = sizeof(szName);
-
- if (RegGetValueW(HKEY_CLASSES_ROOT, pOffset, NULL, RRF_RT_REG_SZ, NULL, szName,
&dwName) == ERROR_SUCCESS)
+ dwName = sizeof(wszName);
+
+ if (RegGetValueW(HKEY_CLASSES_ROOT, pwszExt, L"", RRF_RT_REG_SZ, NULL,
wszName, &dwName) == ERROR_SUCCESS)
{
- TRACE("EnumPropSheetExt szName %s, pOffset %s\n",
debugstr_w(szName), debugstr_w(pOffset));
- szName[(sizeof(szName) / sizeof(WCHAR)) - 1] = L'\0';
- phpsxa[2] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages -
Pages, pDataObj);
+ TRACE("EnumPropSheetExt wszName %s, pwszExt %s\n",
debugstr_w(wszName), debugstr_w(pwszExt));
+ phpsxa[2] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, wszName, NumPages
- Pages, pDataObj);
Pages += SHAddFromPropSheetExtArray(phpsxa[2], AddShellPropSheetExCallback,
(LPARAM)pInfo);
}
}
@@ -876,7 +847,7 @@
*
* called from ShellExecuteExW32
*
- * pwszPath contains (quoted) path of folder/file
+ * pwszPath contains path of folder/file
*
* TODO: provide button change application type if file has registered type
* make filename field editable and apply changes to filename on close
@@ -885,93 +856,63 @@
BOOL
SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST
*apidl)
{
- PROPSHEETHEADERW Info;
+ HRESULT hr;
HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE];
- WCHAR wFileName[MAX_PATH];
- DWORD dwHandle = 0;
- WCHAR *pFileName;
- HPSXA hpsxa[3];
- INT_PTR res;
- CComPtr<IDataObject> pDataObj;
- HRESULT hResult;
- DWORD wLength;
+ HPSXA hpsxa[3] = {};
TRACE("SH_ShowPropertiesDialog entered filename %s\n",
debugstr_w(pwszPath));
- if (pwszPath == NULL)
- return FALSE;
-
- if (!wcslen(pwszPath))
+ if (pwszPath == NULL || !wcslen(pwszPath))
return FALSE;
memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE);
- if (pwszPath[0] == L'"')
- {
- /* remove quotes from pwszPath */
- LPCWSTR src = pwszPath + 1;
- LPWSTR dst = wFileName;
-
- while (*src && *src != L'"')
- *dst++ = *src++;
-
- *dst = L'\0';
- }
- else
- {
- wcscpy(wFileName, pwszPath);
- }
+ /* Make a copy of path */
+ WCHAR wszPath[MAX_PATH];
+ StringCbCopyW(wszPath, sizeof(wszPath), pwszPath);
//
// get length
//
- wLength = wcslen(wFileName);
- if (wFileName[wLength-1] == L'\\' && wLength > 3)
+ INT cchPath = wcslen(wszPath);
+ if (cchPath > 3 && wszPath[cchPath-1] == L'\\')
{
//
// remove trailing \\ at the end of path
//
- wFileName[wLength-1] = L'\0';
- }
-
- if (PathIsRootW(wFileName))
- {
- return SH_ShowDriveProperties(wFileName, pidlFolder, apidl);
- }
-
- if (PathIsDirectoryW(wFileName))
- {
- return SH_ShowFolderProperties(wFileName, pidlFolder, apidl);
- }
-
-
- pFileName = wcsrchr(wFileName, L'\\');
-
- if (!pFileName)
- pFileName = wFileName;
- else
- pFileName++;
-
+ wszPath[cchPath-1] = L'\0';
+ }
+
+ if (PathIsRootW(wszPath))
+ return SH_ShowDriveProperties(wszPath, pidlFolder, apidl);
+
+ if (PathIsDirectoryW(wszPath))
+ return SH_ShowFolderProperties(wszPath, pidlFolder, apidl);
+
+ LPCWSTR pwszFilename = PathFindFileNameW(wszPath);
+
+ PROPSHEETHEADERW Info;
memset(&Info, 0x0, sizeof(PROPSHEETHEADERW));
Info.dwSize = sizeof(PROPSHEETHEADERW);
Info.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE;
Info.phpage = hppages;
- Info.pszCaption = pFileName;
+ Info.pszCaption = pwszFilename;
hppages[Info.nPages] =
SH_CreatePropertySheetPage("SHELL_FILE_GENERAL_DLG",
SH_FileGeneralDlgProc,
- (LPARAM)wFileName,
+ (LPARAM)wszPath,
NULL);
if (hppages[Info.nPages])
Info.nPages++;
- hResult = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID
*)&pDataObj);
-
- if (hResult == S_OK)
- {
- if (!EnumPropSheetExt(wFileName, &Info, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa,
pDataObj))
+ CComPtr<IDataObject> pDataObj;
+ hr = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID
*)&pDataObj);
+
+ if (hr == S_OK)
+ {
+ if (!EnumPropSheetExt(wszPath, &Info, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa,
pDataObj))
{
hpsxa[0] = NULL;
hpsxa[1] = NULL;
@@ -979,20 +920,20 @@
}
}
- if (GetFileVersionInfoSizeW(pwszPath, &dwHandle))
+ if (GetFileVersionInfoSizeW(wszPath, NULL))
{
hppages[Info.nPages] =
SH_CreatePropertySheetPage("SHELL_FILE_VERSION_DLG",
SH_FileVersionDlgProc,
- (LPARAM)wFileName,
+ (LPARAM)wszPath,
NULL);
if (hppages[Info.nPages])
Info.nPages++;
}
- res = PropertySheetW(&Info);
-
- if (hResult == S_OK)
+ INT_PTR res = PropertySheetW(&Info);
+
+ if (hr == S_OK)
{
SHDestroyPropSheetExtArray(hpsxa[0]);
SHDestroyPropSheetExtArray(hpsxa[1]);
Modified: trunk/reactos/dll/win32/shell32/openwithmenu.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/openwith…
==============================================================================
--- trunk/reactos/dll/win32/shell32/openwithmenu.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/openwithmenu.cpp [iso-8859-1] Tue Jan 10 16:53:46
2012
@@ -909,7 +909,7 @@
/* Add filename to label */
cchBuf = GetDlgItemTextW(hwnd, 14001, wszBuf, _countof(wszBuf));
- StringCchCopyW(wszBuf + cchBuf, _countof(wszBuf) - cchBuf,
m_pInfo->pcszFile);
+ StringCchCopyW(wszBuf + cchBuf, _countof(wszBuf) - cchBuf,
PathFindFileNameW(m_pInfo->pcszFile));
SetDlgItemTextW(hwnd, 14001, wszBuf);
/* Load applications from registry */