У меня есть код, который пытается проверить, работает ли мое приложение с установленными темами. Вот код C #:
internal class NativeMethods
{
[DllImport("comctl32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern uint DllGetVersion(ref DLLVERSIONINFO pdvi);
[StructLayout(LayoutKind.Sequential)]
internal struct DLLVERSIONINFO
{
public uint cbSize;
public uint dwMajorVersion;
public uint dwMinorVersion;
public uint dwBuildNumber;
public uint dwPlatformID;
}
internal static bool IsThemed()
{
bool retval = false;
if ((Environment.OSVersion.Version.Major >= 5 &&
Environment.OSVersion.Version.Minor >= 1) ||
Environment.OSVersion.Version.Major > 5)
{
bool appThemed = NativeMethods.IsAppThemed();
bool themeActive = NativeMethods.IsThemeActive();
if (appThemed && themeActive)
{
DLLVERSIONINFO dvi = new DLLVERSIONINFO();
dvi.cbSize = (uint)Marshal.SizeOf(dvi);
NativeMethods.DllGetVersion(ref dvi);
retval = (dvi.dwMajorVersion >= 6);
}
}
}
Этот код отлично подходит для моих нужд в Windows XP, 2003 и Vista. Однако, когда я пытаюсь сделать это под Windows 7, где я запускаю Aero, вызов DllGetVersion возвращает значение меньше 6. Когда я отлаживаю свое приложение и смотрю номер версии comctl32 в отладчике (окно модулей), он показывает номер версии больше 6 загружен. Почему мой код возвращает другое число?
Спасибо
Notre