بدست آوردن اطلاعات سیستم با #C
برنامه بدست آوردن اطلاعات سیستم، سیستم عامل و حافظه با استفاده از kernel32
using System;
using System.Runtime.InteropServices;
namespace SystemInfo
{
class Program
{
public struct SYSTEM_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
public struct MEMORY_STATUS
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
public struct OS_VERSION_INFO
{
public Int32 dwOSVersionInfoSize;
public Int32 dwMajorVersion;
public Int32 dwMinorVersion;
public Int32 dwBuildNumber;
public Int32 dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public String szCSDVersion;
}
[DllImport(“kernel32”)]
static extern bool GetVersionEx(ref OS_VERSION_INFO lpVersionInfo);
[DllImport(“kernel32”)]
static extern void GetSystemInfo(ref SYSTEM_INFO pSI);
[DllImport(“kernel32”)]
static extern void GlobalMemoryStatus(ref MEMORY_STATUS buf);
static void Main()
{
const int MB = 1048576;//MEGABYTE
string osName = “Unknown”;
OS_VERSION_INFO info = new OS_VERSION_INFO();
info.dwOSVersionInfoSize = Marshal.SizeOf(info);
if (!GetVersionEx(ref info))
Console.WriteLine(“GetVersion failed”);
switch (info.dwMajorVersion + “.” + info.dwMinorVersion)
{
case “6.1”:
osName = “Win 7”;
break;
case “6.0”:
osName = “Win Vista”;
break;
case “5.2”:
osName = “Win 2003”;
break;
case “5.1”:
osName = “Win XP”;
break;
case “5.0”:
osName = “Win 2000”;
break;
case “4.0”:
osName = “Win NT 4.0”;
break;
}
Console.WriteLine(“OS Name: {0}”, osName);
Console.WriteLine(“Version: {0}.{1}.{2}”,
info.dwMajorVersion, info.dwMinorVersion, info.dwBuildNumber);
Console.Write(“\n”);
SYSTEM_INFO pSI = new SYSTEM_INFO();
GetSystemInfo(ref pSI);
MEMORY_STATUS memSt = new MEMORY_STATUS();
GlobalMemoryStatus(ref memSt);
Console.WriteLine(“Number Of Processors: {0}”,
pSI.dwNumberOfProcessors);
Console.WriteLine(“Application Address: {0} to {1}\n”,
pSI.lpMinimumApplicationAddress / MB,
pSI.lpMaximumApplicationAddress / MB);
Console.WriteLine(“Physical Memory: {0}:{1} (available:total)”,
memSt.dwAvailPhys / MB, memSt.dwTotalPhys / MB);
Console.WriteLine(“Virtual Memory: {0}:{1} (available:total)\n”,
memSt.dwAvailVirtual / MB, memSt.dwTotalVirtual / MB);
Console.WriteLine(“Press a key to exit… “);
Console.ReadLine();
}
}
}
تعریف ساختارها
در این برنامه در خطوط ۸ تا ۴۳ سه ساختار را که در فراخوانی توابع API این برنامه مورد نیاز میباشند، تعریف میکنیم، به فیلدهای هر یک از این سه ساختار که اطلاعاتی از سیستم را نگهداری خواهند کرد توجه کنید.
تعریف متغیرها
درتابع Main مقدار ثابت MB را به منظور تبدیل بایت به مگابایت و سپس متغیرهای مورد نیاز برای به دست آوردن نسخه سیستم عامل را تعریف میکنیم، در خط ۶۰ به کمک متد SizeOf از کلاس Marshal اندازه ساختار شی info را محاسبه کرده و در فیلد dwOSVersionInfoSize از همان شیٔ قرار میدهیم.
اطلاعات نسخه ویندوز
در خط ۶۲ توسط تابع GetVersionEx مشخصات ویندوز را به دست میآوریم، اگر این تابع درست عمل کند مقدار true برمیگرداند، در غیر این صورت یک پیام خطا در خروجی چاپ میکنیم، توجه کنید که نوع پارامتر تابع ارجاعی است، به این معنی که تغییرات و بخشی از خروجی تابع بر روی پارامتر ارسالی اثر کرده و به برنامه ما بازمیگردد، در انتها نیز نسخه عددی ویندوز را در یک عبارت switch به نام آن تبدیل و چاپ میکنیم.
اطلاعات سیستم و حافظه
در خط ۹۸ توسط تابع GetSystemInfo مشخصات سیستم را در پارامتر ارجاعی (بازگشتی) این تابع یعنی pSI قرار داده و به همین ترتیب در خط ۱۰۱ به کمک تابع GlobalMemoryStatus مشخصات حافظه را به دست میآوریم، در انتها نیز مقادیر مربوط به تعداد پردازنده، فضای آدرسدهی برنامهها، اطلاعات حافظه و اطلاعات حافظه مجازی را چاپ میکنیم.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.