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@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/exp... ============================================================================== --- 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/exp... ============================================================================== --- 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>