Сайт для программистов

пятница, 9 мая 2008 г.

Узнать редакцию Vista

В каждой новой операционной системе появляются новые функции. Не стала исключением и Windows Vista. Как вы, вероятно, знаете, Vista поставляется в нескольких редакциях: Home Basic, Home Premium, Business и так далее. Чтобы узнать, какая версия используется у пользователя, можно воспользоваться двумя способами. Первый способ - использовать WMI (свойство OperatingSystemSKU из класса Win32_OperatingSystem). Пример использования этого свойства можно найти в справочнике по WMI.
Но нас интересует пример на C#. Для этой цели нам подойдет новая функция Windows API GetProductInfo, которая появилась в Windows Vista. Описание этой функции я поместил в справочник по функциям Windows API для .NET Framework, а здесь приведу небольшой пример использования в функции в проекте на C#:

[DllImport("kernel32.dll")]
public static extern bool GetProductInfo(
int dwOSMajorVersion,
int dwOSMinorVersion,
int dwSpMajorVersion,
int dwSpMinorVersion,
out uint pdwReturnedProductType);
// констанды для pdwReturnedProductType
public const uint PRODUCT_BUSINESS = 0x00000006; // Business
public const uint PRODUCT_ENTERPRISE = 0x00000004; // Enterprise
public const uint PRODUCT_HOME_BASIC = 0x00000002; // Home Basic
public const uint PRODUCT_HOME_PREMIUM = 0x00000003; // Home Premium
public const uint PRODUCT_ULTIMATE = 0x00000001; // Ultimate
public const uint PRODUCT_UNDEFINED = 0x00000000;


int majorVersion = Environment.OSVersion.Version.Major;
int minorVersion = Environment.OSVersion.Version.Minor;
int spMajorVersion = Environment.OSVersion.Version.MajorRevision;
int spMinorVersion = Environment.OSVersion.Version.MinorRevision;
// Vista GerProductInfo
uint edition = PRODUCT_UNDEFINED;
if (GetProductInfo(
majorVersion,
minorVersion,
spMajorVersion,
spMinorVersion,
out edition))
{
switch (edition)
{
case PRODUCT_ENTERPRISE:
textBox1.Text += " Enterprise";
break;
case PRODUCT_ULTIMATE:
textBox1.Text += " Ultimate";
break;
case PRODUCT_BUSINESS:
textBox1.Text += " Business";
break;
case PRODUCT_HOME_PREMIUM:
textBox1.Text += " Home Preminum";
break;
case PRODUCT_HOME_BASIC:
textBox1.Text += " Home Basic";
break;
default:
textBox1.Text += " Unknown";
break;
}
}


Программисты, которые по-прежнему работают на Visual Basic 6.0, также не будут забыты. Я постараюсь включить эту фунцию в справочник по функциям Windows API для Visual Basic 6.0.
Всех с праздником Победы!
И счастливого вам программирования!

Комментариев нет: