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/openwithmenu.cpp?rev=54770&r1=54769&r2=54770&view=diff
==============================================================================
--- 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);
     }


Reply via email to