Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Получить версию Windows через WinAPI.


Автор: Deadly0 11.9.2011, 10:47
Нужно получить версию Windows, используя WinAPI, а конкретно функцию http://msdn.microsoft.com/en-us/library/ms724451(v=VS.85).aspx. Функция принимает структуру http://msdn.microsoft.com/en-us/library/ms724833(v=VS.85).aspxи в нее же пишет результат.

Структуру и вызов 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();
        }
    }


Готовый проект с этим кодом во вложении.

Автор: Deadly0 11.9.2011, 12:26
Ошибка оказалась в кодировке. Нужно было указать ANSI.

Код

[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)