ساخت یک برنامه شبیه CPU Meter در سی شارپ
امروز قصد داریم یک مطلب در مورد برنامه نویسی در گویا آی تی داشته باشیم و این بار سراغ یکی از پرطرفدارترین زبان های برنامه نویسی دنیا یعنی سی شارپ آمده ایم .
اگه تا به حال از ویندوزهای ویستا یا 7 استفاده کرده باشید ، احتمالا گجت کارآمد CPU Meter را امتحان کرده اید . این گجت میزان استفاده از پردازنده و رم سیستم را نشان میدهد .
اگر تابحال از این گجت استفاده نکرده اید ، میتوانید به طریق زیر از این گجت استفاده کنید :
1- ابتدا در Desktop خود راست کلیک کرده و گزینه Gadgets را انتخاب کنید .
سپس از صفحه باز شده گزینه CPU Meter را انتخاب کرده و روی آن دابل کلیک کنید تا به Desktop شما اضافه شود .
مشاهده میکنید که این گجت به Desktop شما اضافه شده و میزان استفاده از پردازنده و رم سیستم را به شما نشان میدهد .
در ادامه ما نیز قصد داریم تا با استفاده از زبان برنامه نویسی سی شارپ مشابه چنین کاری را که ویندوز انجام میدهد ، انجام دهیم . البته نه به زیبایی که ویندوز این کار را انجام میدهد ولی باز هم قابل قبول است .
ابتدا یک پروژه سی شارپ باز کنید و نامش رو CPU and RAM Using بگذارید .
اشیا زیر را به فرم خود اضافه کنید و مقادیر آنها را نیز طبق مطالب ذیل تغییر دهید :
1- ProgressBar
Name = prgs_CPU_Using
Value = 0
2- Label
شما باید دو عدد Label روی فرم قرار دهید و خاصیت های تکست آنها را به ترتیب زیر تغییر دهید .
خاصیت Text لیبل اول را برابر با ” میزان مصرف پردازنده ” و خاصیت Text لیبل دوم را برابر با ” میزان حافظه قابل استفاده ” قرار دهید .
AutoSize = False
RightToLeft = Yes
3- PictureBox
Name = pic_Chip
Size Mode = AutoSize
در پایان مقاله ، فایل سورس پروژه قرار داده شده است . اکنون سه عدد PictureBox به فرم خود اضافه کرده و اندازه آنها را به اندازه یک مربع کوچک کنید . و سپس خاصیت visible هرسه را برابر با False قرار دهید . در همان فولدر مربوط به پروژه سه تصویر با فرمت PNG قرار دارند که شما باید این سه تصویر را به PictureBox ها اضافه کنید تا در مواقع مورد نظر از آنها استفاده کنیم . پس روی PictureBox های موجود در فرم کلیک کنید . سپس از قسمت مربوط به خواص اشیا روی قسمت مشخص شده در تصویر زیر کلیک کنید تا بتوانیم عکس ها را اضافه کنیم .
پس از این با صفحه Select Resource مواجه خواهید شد . در اینجا باید با کلیک بروی دکمه Import ، تصاویری را که عرض کردم به پروژه خود اضافه کنید .
برای PictureBox اول تصویر Chip.png را اضافه کنید .
برای PictureBox دوم تصویر Chip_Exc.png و برای PictureBox سوم هم تصویر Chip_crit.png را اضافه کنید .
اکنون یک PictureBox بزرگ میماند که PictureBox اصلی ماست . در این Picturebox هم تصویر Chip.png را لود کنید .
در پایان دکمه OK را کلیک کنید .
4- Timer
Enabled = True
Interval = 1000
پس از انجام این مراحل ، اکنون باید فرم شما شبیه تصویر زیر باشد :
حالا به یکی از مهمترین قسمت های ساخت برنامه رسیدم . درست است ، قسمت کد نویسی برنامه .
در اینجا ما تمامی اطلاعات را از سیستم دریافت کرده و به صورتی که خودمان میخواهیم ، به کاربر نشان خواهیم داد .
وارد قسمت کد نویسی شوید .
ابتدا بایستی فضای نام System.Diagnostics را برای پروژه تان تعریف کنید . پس در بالاترین قسمت محیط کد نویسی ، کد زیر را وارد میکنیم .
using System.Diagnostics;
سپس باید یک object از کلاس PreformanceCounter که در فضای نام System.Diagnostics قرار دارد ، تعریف کنیم . پس کد زیر را در قسمت شروع کلاس Form1 ، وارد میکنیم .
PerformanceCounter CPU_Using = new PerformanceCounter();
PerformanceCounter RAM_Using = new PerformanceCounter();
توضیح دو خط بالا :
در دو خط بالا ما دو object از کلاس PreformanceCounter تعریف کردیم . یکی برای پردازنده و دیگری برای رم .
اکنون باید کدهایی که وظیفه استخراج اطلاعات از سیستم دارند را در قسمت کد نویسی وارد کنیم .
به دلیل اینکه این اطلاعات بایستی در بازه های زمانی خاص به روز شوند ، ما کدهای اصلی را در رویداد Tick مربوط به تایمر خود وارد میکنیم .
ابتدا برای بدست آودن میزان استفاده از پردازنده :
//#####################################################################
//# Get CPU Using.
CPU_Using.CategoryName = “Processor”;
CPU_Using.CounterName = “% Processor Time”;
CPU_Using.InstanceName = “_Total”;
//============================================
double Rounded_CPU_Usage;
Rounded_CPU_Usage = Math.Round(CPU_Using.NextValue());
label1.Text = “میزان مصرف پردازنده : ” + Rounded_CPU_Usage + ” % “;
prgs_CPU_Using.Value = (int) Rounded_CPU_Usage;
//=============================================
if (Rounded_CPU_Usage >= 0 && Rounded_CPU_Usage <= 45)
{
pic_Chip.Image = pic_Chip_Normal.Image;
}
else if (Rounded_CPU_Usage >= 46 && Rounded_CPU_Usage <= 74)
{
pic_Chip.Image = pic_Chip_Exclamation.Image;
}
else if (Rounded_CPU_Usage >= 75 && Rounded_CPU_Usage <= 100)
{
pic_Chip.Image = pic_Chip_Critical.Image;
}
//#####################################################################
توضیح :
دو خط اول توضیحات است .
خط سوم : طبقه بندی قطعه های سیستم است که ما در آن Processor را انتخاب کرده ایم که به پردازنده سیستم اشاره دارد .
خط چهارم : در اینجا ما مشخص کرده ایم که میخواهیم میزان مشغول بودن پردازنده را بدست بیاوریم .
خط پنجم : مجموع مقادیر را بدست می آوریم .
خط هفتم : یک متغیر از نوع double تعریف کرده ایم .
خط هشتم : مقدار بدست آمده را روند کرده و به متغییر میفرستیم .
خط نهم : نمایش میزان استفاده از پردازنده با استفاده از لیبل .
خط دهم : نمایش میزان استفاده از پردازنده با بهره گیری از نوار پیشرفت ( ProgressBar ) بر حسب درصد .
خط دوازدهم تا بیست و سوم : در اینجا ما یک دستور شرطی استفاده کرده ایم که اگر میزان استفاده از پردازنده بین 0 تا 45 درصد بود حالت Normal برای پردازنده نمایش داده شود ( همان تصویر تراشه که حالت عادی دارد و در Picturebox اول وجود دارد در Picturebox اصلی نمایش داده خواهد شد ) . در غیر این صورت اگر میزان استفاده بین 46 تا 74 درصد بود ، حالت اخطاری نمایش داده شود ( همان تراشه زرد رنگ در Picturebox دوم ) و در نهایت اگر میزان استفاده بین 75 تا 100 درصد بود حالت غیر عادی نمایان شود ( همان تراشه قرمز رنگ Picturebox سوم ) .
اما اکنون به قسمت محاسبه میزان استفاده از رم سیستم میرسیم .
کد زیر را در یک خط پایین تر از کدهای مربوط به محاسبه میزان استفاده از پردازنده وارد کنید .
//#####################################################################
//# Get RAM Using.
RAM_Using.CategoryName = “Memory”;
RAM_Using.CounterName = “Available MBytes”;
label2.Text = “میزان حافظه قابل استفاده : ” + RAM_Using.NextValue().ToString() + ” مگابایت “;
//#####################################################################
خط سوم : به قطعه رم اشاره شده است .
خط چهارم : میزان حافظه قابل استفاده بر حسب مگابایت محاسبه خواهد شد .
خط پنجم : نمایش مقدار بدست آماده در لیبل .
توجه داشته باشید که تمامی کدهایی که در مقاله وجود دارند پس از کپی کردن آنها در ویژوال استدیو ، درست خواهند شد و نامنظمی در آنها دیده نمیشود .
در اینجا نیز 3 عدد اسکرین شات از 3 حالت مختلف برنامه برای شما خواهیم گذاشت :
سورس برنامه را نیز میتوانید از اینجا دریافت کنید .
قابل ذکر است که این برنامه در ویندوز XP نیز کار میکند .
ممنون علیرضا جان
عالی بود…
خواهش میکنم مهدی جون . نظر لطف شماست .
سلام ، خیلی خوب بود .
اگه امکان داره بازم از این برنامه ها بزارید یا اگر سایت یا وبلاگی دارید معرفی کنید .
ممنون
سلام امید جون .
خوشحال که از این برنامه خوشت اومده . انشالله بازم از این برنامه های میزارم . فعلا هم فقط در گویا آی تی فعالیت میکنم . سایت و وبلاگ شخصی ندارم .
موفق باشی ………….
ممنون
ایده جالبی بود اما اگه این یه تیکه کد رو اینجوری می نوشتی فکر کنم بهتر باشه.
if (Rounded_CPU_Usage >= 0 && Rounded_CPU_Usage = 46 && Rounded_CPU_Usage = 75 && Rounded_CPU_Usage <= 100)
picChip.Image = CPU_and_RAM_Meter.Properties.Resources.Chip_Crit;
سلام حمید جون .
آره این طوری هم که شما لطف فرمودید و نوشتید ، میشه .
تشکر از لطف شما ………….
سلام عزیزم کارت خیلی عالی بود
دوست دارم مثل شما بتونم حرفه ای کار کنم
اما نیاز به یه انگیزه مثل تو دارم
اگه مقاله ای یا آموزشی داری اگه ممکنه برام بفرست
دوست دارم بیشتر ازت چیز یاد بگیرم تا سورس برنامه هات رو کپی کنم می فهمی که؟
مرسی واقعا کارات عالیه
راستی هم استانی هم هستیم مهدی از آباده
سلام مهدی جان . خواهش میکنم عزیز .
نه بابا حرفه ای چیه 😀 . این برنامه ای که نوشتم خیلی سادست .
ببین مهدی جان اگه میخای برنامه نویسی رو به صورت حرفه ای انجام بدی ، بهت پیشنهاد میکنم توی فروم های برنامه نویسی عضو بشی . من خودم توی برنامه نویس عضو بودم و واقعا چیزای زیادی از اونجا یاد گرفتم . واسه پرسش و پاسخ سریع هم میتونی از سایت stackoverflow کمک بگیری که واقعا بعضی مواقع جواب ها رو چند ثانیه بعد از پرسش ، بهت میدن .
من خودم برنامه نویسی رو به صورت تفریحی انجام میدادم و الان حدود یک ساله که کنار گذاشتمش . میتونی به همین فرومی که عرض کردم بری و اونجا افراد زیاد با دانشی بسیار زیادتر از من هستن که کمکت میکنن مهدی جان .
چاکر همه هم استانی ها هم هستیم 😀
موفق باشی رفیق ………
آقا مرسی.