Author: rharabien
Date: Tue Dec 27 21:58:55 2011
New Revision: 54770
URL:
http://svn.reactos.org/svn/reactos?rev=54770&view=rev
Log:
[SHELL32]
- Use file description in version block instead of filename for application name in Open
With menu
Modified:
trunk/reactos/dll/win32/shell32/openwithmenu.cpp
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 Dec 27 21:58:55
2011
@@ -47,8 +47,8 @@
typedef struct
{
HICON hIcon;
- WCHAR szAppName[MAX_PATH];
- WCHAR szManufacturer[MANUFACTURER_NAME_SIZE];
+ WCHAR wszAppPath[MAX_PATH];
+ WCHAR wszManufacturer[MANUFACTURER_NAME_SIZE];
} OPEN_ITEM_CONTEXT, *POPEN_ITEM_CONTEXT;
typedef struct _LANGANDCODEPAGE_
@@ -522,10 +522,10 @@
/* Build the command line. Don't use applcation name as first parameter of
CreateProcessW, because it have to be an absolute path. */
- StringCbPrintfW(wszBuf, sizeof(wszBuf), L"\"%s\"
\"%s\"", pItemContext->szAppName, pwszPath);
+ StringCbPrintfW(wszBuf, sizeof(wszBuf), L"\"%s\"
\"%s\"", pItemContext->wszAppPath, pwszPath);
/* Start the application now */
- TRACE("AppName %ls Path %ls\n", pItemContext->szAppName, pwszPath);
+ TRACE("AppName %ls Path %ls\n", pItemContext->wszAppPath, pwszPath);
if (CreateProcessW(NULL, wszBuf, NULL, NULL, FALSE, 0, NULL, NULL, &si,
&pi))
{
CloseHandle(pi.hThread);
@@ -595,12 +595,12 @@
OPENASINFO *poainfo = (OPENASINFO*)GetWindowLongPtr(hwndDlg,
DWLP_USER);
/* store settings in HKCU path */
- StoreNewSettings(poainfo->pcszFile,
pItemContext->szAppName);
+ StoreNewSettings(poainfo->pcszFile,
pItemContext->wszAppPath);
if (SendDlgItemMessage(hwndDlg, 14003, BM_GETCHECK, 0, 0) ==
BST_CHECKED)
{
/* set programm as default handler */
- SetProgramAsDefaultHandler(poainfo->pcszFile,
pItemContext->szAppName);
+ SetProgramAsDefaultHandler(poainfo->pcszFile,
pItemContext->wszAppPath);
}
if (poainfo->oaifInFlags & OAIF_EXEC)
@@ -668,10 +668,10 @@
/* paint manufacturer description */
cyOffset += mt.tmHeight + 2;
preColor = SetTextColor(lpdis->hDC, RGB(192, 192, 192));
- if (pItemContext->szManufacturer[0])
- TextOutW(lpdis->hDC, 45, cyOffset,
pItemContext->szManufacturer, wcslen(pItemContext->szManufacturer));
+ if (pItemContext->wszManufacturer[0])
+ TextOutW(lpdis->hDC, 45, cyOffset,
pItemContext->wszManufacturer, wcslen(pItemContext->wszManufacturer));
else
- TextOutW(lpdis->hDC, 45, cyOffset, pItemContext->szAppName,
wcslen(pItemContext->szAppName));
+ TextOutW(lpdis->hDC, 45, cyOffset,
pItemContext->wszAppPath, wcslen(pItemContext->wszAppPath));
SetTextColor(lpdis->hDC, preColor);
SetBkColor(lpdis->hDC, preBkColor);
break;
@@ -747,8 +747,8 @@
return E_NOTIMPL;
}
-VOID
-GetManufacturer(LPCWSTR pwszAppName, POPEN_ITEM_CONTEXT pContext)
+static VOID
+LoadFileInfo(LPCWSTR pwszAppPath, POPEN_ITEM_CONTEXT pContext, LPWSTR pwszAppName,
unsigned cchAppName)
{
UINT cbSize;
LPVOID pBuf;
@@ -758,10 +758,10 @@
WCHAR *pResult;
/* Clear manufacturer */
- pContext->szManufacturer[0] = 0;
+ pContext->wszManufacturer[0] = 0;
/* query version info size */
- cbSize = GetFileVersionInfoSizeW(pwszAppName, NULL);
+ cbSize = GetFileVersionInfoSizeW(pwszAppPath, NULL);
if (!cbSize)
return;
@@ -771,7 +771,7 @@
return;
/* query version info */
- if(!GetFileVersionInfoW(pwszAppName, 0, cbSize, pBuf))
+ if(!GetFileVersionInfoW(pwszAppPath, 0, cbSize, pBuf))
{
HeapFree(GetProcessHeap(), 0, pBuf);
return;
@@ -788,38 +788,34 @@
wCode = lpLangCode->code;
}
+ /* Query name */
+ swprintf(wszBuf, L"\\StringFileInfo\\%04x%04x\\FileDescription", wLang,
wCode);
+ if (VerQueryValueW(pBuf, wszBuf, (LPVOID *)&pResult, &cbSize))
+ StringCchCopyNW(pwszAppName, cchAppName, pResult, cbSize);
+
/* Query manufacturer */
swprintf(wszBuf, L"\\StringFileInfo\\%04x%04x\\CompanyName", wLang,
wCode);
if (VerQueryValueW(pBuf, wszBuf, (LPVOID *)&pResult, &cbSize))
- StringCbCopyNW(pContext->szManufacturer, sizeof(pContext->szManufacturer),
pResult, cbSize);
+ StringCbCopyNW(pContext->wszManufacturer,
sizeof(pContext->wszManufacturer), pResult, cbSize);
HeapFree(GetProcessHeap(), 0, pBuf);
}
static VOID
-InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, LPCWSTR pwszAppName)
+InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, LPCWSTR pwszAppPath)
{
POPEN_ITEM_CONTEXT pItemContext;
- WCHAR *pwszExt;
- WCHAR wszFileName[_MAX_FNAME];
-
+ WCHAR wszAppName[256];
+
+ /* Allocate new item context */
pItemContext = (OPEN_ITEM_CONTEXT *)HeapAlloc(GetProcessHeap(), 0,
sizeof(OPEN_ITEM_CONTEXT));
if (!pItemContext)
return;
/* Store app path and icon */
- wcscpy(pItemContext->szAppName, pwszAppName);
- pItemContext->hIcon = ExtractIconW(shell32_hInstance, pwszAppName, 0);
- pItemContext->szManufacturer[0] = 0;
-
- /* Extract path name */
- _wsplitpath(pwszAppName, NULL, NULL, wszFileName, NULL);
-
- /* Build application name from filename. FIXME: do it properly */
- pwszExt = wcsrchr(wszFileName, '.');
- if (pwszExt)
- pwszExt[0] = L'\0';
- wszFileName[0] = towupper(wszFileName[0]);
+ wcscpy(pItemContext->wszAppPath, pwszAppPath);
+ pItemContext->hIcon = ExtractIconW(shell32_hInstance, pwszAppPath, 0);
+ LoadFileInfo(pwszAppPath, pItemContext, wszAppName, _countof(wszAppName));
/* Add item to the list */
if (pContext->bMenu)
@@ -832,8 +828,8 @@
mii.fType = MFT_STRING; //MFT_OWNERDRAW;
mii.fState = MFS_ENABLED;
mii.wID = pContext->idCmd;
- mii.dwTypeData = wszFileName;
- mii.cch = wcslen(wszFileName);
+ mii.dwTypeData = wszAppName;
+ mii.cch = wcslen(wszAppName);
mii.dwItemData = (ULONG_PTR)pItemContext;
mii.hbmpChecked = mii.hbmpUnchecked = IconToBitmap(pItemContext->hIcon);
@@ -844,9 +840,7 @@
{
LRESULT Index;
- /* get manufacturer */
- GetManufacturer(pwszAppName, pItemContext);
- Index = SendMessageW(pContext->hDlgCtrl, LB_ADDSTRING, 0,
(LPARAM)wszFileName);
+ Index = SendMessageW(pContext->hDlgCtrl, LB_ADDSTRING, 0,
(LPARAM)wszAppName);
if (Index != LB_ERR)
SendMessageW(pContext->hDlgCtrl, LB_SETITEMDATA, Index,
(LPARAM)pItemContext);
}