[ros-diffs] [tkreuzer] 50367: [EXPLORER_NEW] Provide the ability to query version info (needed for task grouping). Patch by DavidErceg <dave_154 at hotmail.com> See issue #4386 for more details.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Jan 12 13:12:01 UTC 2011


Author: tkreuzer
Date: Wed Jan 12 13:12:00 2011
New Revision: 50367

URL: http://svn.reactos.org/svn/reactos?rev=50367&view=rev
Log:
[EXPLORER_NEW]
Provide the ability to query version info (needed for task
grouping).
Patch by DavidErceg <dave_154 at hotmail.com>

See issue #4386 for more details.

Modified:
    trunk/reactos/base/shell/explorer-new/explorer.c
    trunk/reactos/base/shell/explorer-new/explorer.rbuild

Modified: trunk/reactos/base/shell/explorer-new/explorer.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer-new/explorer.c?rev=50367&r1=50366&r2=50367&view=diff
==============================================================================
--- trunk/reactos/base/shell/explorer-new/explorer.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/explorer-new/explorer.c [iso-8859-1] Wed Jan 12 13:12:00 2011
@@ -26,6 +26,12 @@
 HKEY hkExplorer = NULL;
 DRAWCAPTEMP DrawCapTemp = NULL;
 
+typedef struct _LANGCODEPAGE
+{
+    WORD wLanguage;
+    WORD wCodePage;
+} LANGCODEPAGE, *PLANGCODEPAGE;
+
 /* undoc GUID */
 DEFINE_GUID(CLSID_RebarBandSite, 0xECD4FC4D, 0x521C, 0x11D0, 0xB7, 0x92, 0x00, 0xA0, 0xC9, 0x03, 0x12, 0xE1);
 
@@ -270,6 +276,80 @@
     return FALSE;
 }
 
+BOOL
+GetVersionInfoString(IN TCHAR *szFileName,
+                     IN TCHAR *szVersionInfo,
+                     OUT TCHAR *szBuffer,
+                     IN UINT cbBufLen)
+{
+    LPVOID lpData = NULL;
+    TCHAR szSubBlock[128];
+    TCHAR *lpszLocalBuf = NULL;
+    LANGID UserLangId;
+    PLANGCODEPAGE lpTranslate = NULL;
+    DWORD dwLen;
+    DWORD dwHandle;
+    UINT cbTranslate;
+    UINT cbLen;
+    BOOL bRet = FALSE;
+    unsigned int i;
+
+    dwLen = GetFileVersionInfoSize(szFileName,&dwHandle);
+
+    if (dwLen > 0)
+    {
+        lpData = HeapAlloc(hProcessHeap,0,dwLen);
+
+        if (lpData != NULL)
+        {
+            if (GetFileVersionInfo(szFileName,
+                                  0,
+                                  dwLen,
+                                  lpData) != 0)
+            {
+                UserLangId = GetUserDefaultLangID();
+
+                VerQueryValue(lpData,
+                    TEXT("\\VarFileInfo\\Translation"),
+                    (LPVOID *)&lpTranslate,
+                    &cbTranslate);
+
+                for (i = 0;i < (cbTranslate / sizeof(LANGCODEPAGE));i++)
+                {
+                    /* If the bottom eight bits of the language id's
+                    match, use this version information (since this
+                    means that the version information and the users
+                    default language are the same). */
+                    if ((lpTranslate[i].wLanguage & 0xFF) ==
+                        (UserLangId & 0xFF))
+                    {
+                        wnsprintf(szSubBlock,
+                            sizeof(szSubBlock) / sizeof(szSubBlock[0]),
+                            TEXT("\\StringFileInfo\\%04X%04X\\%s"),
+                            lpTranslate[i].wLanguage,
+                            lpTranslate[i].wCodePage,szVersionInfo);
+
+                        if (VerQueryValue(lpData,
+                            szSubBlock,
+                            (LPVOID *)&lpszLocalBuf,
+                            &cbLen) != 0)
+                        {
+                            wcsncpy(szBuffer,lpszLocalBuf,cbBufLen);
+
+                            bRet = TRUE;
+                            break;
+                        }
+                    }
+                }
+            }
+            HeapFree(hProcessHeap,0,lpData);
+            lpData = NULL;
+        }
+    }
+
+    return bRet;
+}
+
 INT WINAPI
 _tWinMain(IN HINSTANCE hInstance,
           IN HINSTANCE hPrevInstance,

Modified: trunk/reactos/base/shell/explorer-new/explorer.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer-new/explorer.rbuild?rev=50367&r1=50366&r2=50367&view=diff
==============================================================================
--- trunk/reactos/base/shell/explorer-new/explorer.rbuild [iso-8859-1] (original)
+++ trunk/reactos/base/shell/explorer-new/explorer.rbuild [iso-8859-1] Wed Jan 12 13:12:00 2011
@@ -12,6 +12,7 @@
 	<library>shell32</library>
 	<library>shlwapi</library>
 	<library>uuid</library>
+	<library>version</library>
 	<pch>precomp.h</pch>
 	<file>desktop.c</file>
 	<file>dragdrop.c</file>




More information about the Ros-diffs mailing list