mirror of
https://github.com/reactos/reactos.git
synced 2024-08-30 07:08:19 +00:00
77 lines
2.2 KiB
C
77 lines
2.2 KiB
C
/*
|
|
* PROJECT: ReactOS Applications
|
|
* LICENSE: LGPL - See COPYING in the top level directory
|
|
* FILE: base/applications/msconfig_new/comctl32ex/comctl32supp.c
|
|
* PURPOSE: Common Controls helper functions.
|
|
* COPYRIGHT: Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
|
|
HRESULT GetComCtl32Version(OUT PDWORD pdwMajor, OUT PDWORD pdwMinor, OUT PDWORD pdwBuild)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
HINSTANCE hDll;
|
|
DLLGETVERSIONPROC pDllGetVersion;
|
|
DLLVERSIONINFO dvi;
|
|
|
|
*pdwMajor = 0;
|
|
*pdwMinor = 0;
|
|
*pdwBuild = 0;
|
|
|
|
/*
|
|
* WARNING! DISCLAIMER!
|
|
*
|
|
* This method of retrieving a handle to an already loaded comctl32.dll
|
|
* is known to not be reliable in case the program is using SxS, or if
|
|
* this code is used from inside a DLL.
|
|
*/
|
|
|
|
/*
|
|
* See: https://msdn.microsoft.com/en-us/library/windows/desktop/hh298349(v=vs.85).aspx
|
|
* and: http://www.geoffchappell.com/studies/windows/shell/comctl32/history/
|
|
* for the possible version values to be returned.
|
|
*/
|
|
|
|
/* Get a handle to comctl32.dll that must already be loaded */
|
|
hDll = GetModuleHandleW(L"comctl32.dll"); // NOTE: We must not call FreeLibrary on the returned handle!
|
|
if (!hDll) return E_FAIL;
|
|
|
|
pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hDll, "DllGetVersion");
|
|
if (pDllGetVersion)
|
|
{
|
|
ZeroMemory(&dvi, sizeof(dvi));
|
|
dvi.cbSize = sizeof(dvi);
|
|
|
|
hr = (*pDllGetVersion)(&dvi);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
*pdwMajor = dvi.dwMajorVersion;
|
|
*pdwMinor = dvi.dwMinorVersion;
|
|
*pdwBuild = dvi.dwBuildNumber;
|
|
|
|
#if 0
|
|
// #include "stringutils.h"
|
|
|
|
LPWSTR strVersion =
|
|
FormatString(L"ComCtl32 version %d.%d, Build %d, Platform %d",
|
|
dvi.dwMajorVersion, dvi.dwMinorVersion, dvi.dwBuildNumber, dvi.dwPlatformID);
|
|
MessageBoxW(NULL, strVersion, L"ComCtl32 version", MB_OK);
|
|
MemFree(strVersion);
|
|
#endif
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
* If GetProcAddress failed, the DLL is a version
|
|
* previous to the one shipped with IE 3.x.
|
|
*/
|
|
*pdwMajor = 4;
|
|
*pdwMinor = 0;
|
|
*pdwBuild = 0;
|
|
}
|
|
|
|
return hr;
|
|
}
|