Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3

.docx
Скачиваний:
14
Добавлен:
22.05.2021
Размер:
151.53 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА

Лабораторная работа

Бишкек 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();

}

}

}

Фото результат: