Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2011, 11:32   #1
-Deadly-
 
Регистрация: 11.09.2011
Сообщений: 3
По умолчанию Получить версию через WinAPI.

Нужно получить версию Windows, используя WinAPI, а конкретно функцию GetVersionEx. Функция принимает структуру OSVERSIONINFOEX и в нее же пишет результат.

Структуру и вызов WinAPI функции сделал так:

Код:
    [StructLayout(LayoutKind.Sequential)]
    public class OSVersionInfo
    {
        public uint dwOSVersionInfoSize;
        public uint dwMajorVersion;
        public uint dwMinorVersion;
        public uint dwBuildNumber;
        public uint dwPlatformId;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public String szCSDVersion;
    }
 
    class Kernel
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern bool GetVersionEx([In, Out] OSVersionInfo info);
    }
Далее пытаюсь вывести билд в консоль, но получаю 0.
Код:
    class Program
    {
        static void Main(string[] args)
        {
            OSVersionInfo version = new OSVersionInfo();
            version.dwOSVersionInfoSize = (uint) Marshal.SizeOf(version);
            Kernel.GetVersionEx(version);
 
            Console.WriteLine(version.dwBuildNumber);
            Console.ReadKey();
        }
    }
Готовый проект с этим кодом во вложении.
Вложения
Тип файла: rar api.rar (26.5 Кб, 9 просмотров)
-Deadly- вне форума Ответить с цитированием
Старый 11.09.2011, 12:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://www.codeproject.com/KB/system...oducttype.aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.09.2011, 12:26   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

и че, неужели
Код:
sizeof(OSVersionInfo) == sizeof(OSVERSIONINFOEX)
?
f.hump вне форума Ответить с цитированием
Старый 11.09.2011, 14:15   #4
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

А не проще ли использовать System.Environment.OSVersion?
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить список DSN средствами WinApi fedakdenis Win Api 1 14.10.2010 11:59
Получить версию винды в Windows 7 abyss_by Win Api 1 27.09.2009 01:19
Изменение свойств кнопки через WinAPI Никки Win Api 12 20.09.2009 15:01
Как на WinApi получить все дочерние окна приложения? Wadimka Работа с сетью в Delphi 8 27.05.2009 14:25
работа с компонентами через WinApi user_jasser Win Api 17 17.11.2008 22:11