Using system;
Using system.Runtime.InteropServices;
Namespace getWindowsVersion
{
[Structlayout (layoutkind.sequential)]
Public Class OsversionInfo
{
Public int ost osversioninfosize;
Public int majorversion;
Public int minorversion;
Public int buildnumber;
Public int platformi;
[Marshalas (UnmanagedType.Byvaltstr, SIZECONST = 128)]]]
Public String VersionString;
}
[Structlayout (layoutkind.sequential)]
Public struct osversioninfo2
{
Public int ost osversioninfosize;
Public int majorversion;
Public int minorversion;
Public int buildnumber;
Public int platformi;
[Marshalas (UnmanagedType.Byvaltstr, SIZECONST = 128)]]]
Public String VersionString;
}
Public Class Libwrap
{
[DLLIMPORT ("kernel32")]]
Public Static Extern Bool GetversionEx ([In, Out] OsversionInfo OSVI);
[DLLIMPORT ("kernel32", entrypoint = "getversionex")]
Public Static Extern Bool GetversionEx2 (Ref OsversionInfo2 OSVI);
}
Public Class APP
{
Public static void main ()
{
Console.WriteLine ("/ NPassing OsversionInfo As Class);
OsversionInfo OSVI = New OsversionInfo ();
Osvi.osversionInfosize = Marshal.Sizeof (OSVI);
Libwrap.getversionEx (OSVI);
Console.writeline ("Class Size: {0} / Noperation System: {1} / NPACK: {2}", Osvi.osversionInfosize, OpsysName (Osvi.majorversion, Osvi.minorversion, Osvi.Versionstring);
Console.WriteLine ("{0}", OSVI.PLATFORMID);
Console.writeline ("/ NPassing OsversionInfo As Struct");
OsversionInfo2 OSVI2 = New OsversionInfo2 ();
Osvi2.osversionInfosize = Marshal.sizeof (OSVI2);
Libwrap.getversionEx2 (REF OSVI2);
Console.WriteLine ( "Static size: {0} / nOperation System: {1} / nPack: {2}", osvi2.OSVersionInfoSize, OpSysName (osvi2.MajorVersion, osvi2.MinorVersion, osvi2.PlatformId), osvi2.versionString); }
Public Static String OpsysName (int MajorVersion, int minorversion, int platformid)
{
String str_opn = string.format ("{0}. {1}", Majorversion, MinorVersion;
Switch (STR_OPN)
{
Case "4.0":
Return Win95_NT40 (PlatformID);
Case "4.10":
Return "Windows 98";
Case "4.90":
Return "Windows ME";
Case "3.51":
Return "Windows NT 3.51";
Case "5.0":
Return "Windwos 2000";
Case "5.1":
Return "WindWOS XP";
Case "5.2":
Return "Windows Server 2003 Family";
DEFAULT:
Return "this Windows Version is not distinguish!";
}
}
Public Static String Win95_NT40 (INT PlatformID)
{
Switch (PlatformID)
{
Case 1:
Return "Windows 95";
Case 2:
Return "Windows NT 4.0";
DEFAULT:
Return "this Windows Version is not distinguish!";
}
}
}
}