[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.

svn path=/trunk/; revision=50367
This commit is contained in:
Timo Kreuzer 2011-01-12 13:12:00 +00:00
parent fceaa9ff48
commit 33579181bb
2 changed files with 81 additions and 0 deletions

View file

@ -26,6 +26,12 @@ HANDLE hProcessHeap;
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 @@ SetShellReadyEvent(IN LPCTSTR lpEventName)
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,

View file

@ -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>