Лабораторная работа №3
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 2021
Лабораторная работа №3
Цель работы: получение практических навыков по использованию Win32 API для исследования памяти Windows
Листинг кода:
Форма 1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lab3
{
public partial class Form1 : Form
{
public struct MEMORYSTATUS
{
public UInt32 dwLength;
public UInt32 dwMemoryLoad;
public UInt32 dwTotalPhys;
public UInt32 dwAvailPhys;
public UInt32 dwTotalPageFile;
public UInt32 dwAvailPageFile;
public UInt32 dwTotalVirtual;
public UInt32 dwAvailVirtual;
}
[DllImport("kernel32.dll")]
public static extern void GlobalMemoryStatus(ref MEMORYSTATUS lpBuffer);
public Form1()
{
InitializeComponent();
ShowMemory();
}
public void ShowMemory()
{
MEMORYSTATUS memStatus = new MEMORYSTATUS();
GlobalMemoryStatus(ref memStatus);
//выводим инфу физической памяти
label1.Text = ((memStatus.dwTotalPhys / 1024).ToString());
label2.Text = ((memStatus.dwAvailPhys / 1024).ToString());
label3.Text = (memStatus.dwMemoryLoad.ToString());
//выводим инфу о виртуальной памяти
label4.Text = ((memStatus.dwTotalVirtual / 1024).ToString());
label5.Text = ((memStatus.dwAvailVirtual / 1024).ToString());
label6.Text = ((((memStatus.dwTotalVirtual / 1024) - (memStatus.dwAvailVirtual / 1024)) * 100 / (memStatus.dwTotalVirtual / 1024)).ToString());
//выводим инфу о файле подкачке
label7.Text = ((memStatus.dwTotalPageFile / 1024).ToString());
label8.Text = ((memStatus.dwAvailPageFile / 1024).ToString());
label9.Text = ((((memStatus.dwTotalPageFile / 1024) - (memStatus.dwAvailPageFile / 1024)) * 100 / (memStatus.dwTotalPageFile / 1024)).ToString());
//данные в диаграмме
chart1.Titles.Add("Физическая память");
chart1.Series["Series1"].Points.AddXY(memStatus.dwMemoryLoad.ToString() + "% Загрузка", memStatus.dwMemoryLoad.ToString());
chart1.Series["Series1"].Points.AddXY((100 - memStatus.dwMemoryLoad).ToString() + "% Доступно", (100 - memStatus.dwMemoryLoad).ToString());
chart2.Titles.Add("Виртуальная память");
uint res = (((memStatus.dwTotalVirtual / 1024) - (memStatus.dwAvailVirtual / 1024)) * 100 / (memStatus.dwTotalVirtual / 1024));
chart2.Series["Series1"].Points.AddXY(res.ToString() + "% Загрузка", res.ToString());
chart2.Series["Series1"].Points.AddXY((100 - res).ToString() + "% Доступно", (100 - res).ToString());
chart3.Titles.Add("Файл подкачки");
uint res2 = (((memStatus.dwTotalPageFile / 1024) - (memStatus.dwAvailPageFile / 1024)) * 100 / (memStatus.dwTotalPageFile / 1024));
chart3.Series["Series1"].Points.AddXY(res2.ToString() + "% Загрузка", res2.ToString());
chart3.Series["Series1"].Points.AddXY((100 - res2).ToString() + "% Доступно", (100 - res2).ToString());
}
private void button1_Click_1(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Show();
}
}
}
Форма 2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lab3
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
ProcessList();
}
private void ProcessList()
{
int i = 0;
foreach (Process process in Process.GetProcesses())
{
dataGridView1.Rows.Add(i, process.ProcessName, process.Id, process.VirtualMemorySize64 / 1024);
i++;
}
label2.Text = i.ToString();
}
}
}
Фото результат: