using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;


namespace MemoryDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            #if DEBUG
                MinimizeBox = false;
            #else       
                MinimizeBox = true;
            #endif
        }

        [DllImport("CoreDll.dll")]
        public static extern void GlobalMemoryStatus
        (
            ref MEMORYSTATUS lpBuffer
        );

        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;
        }

        private void butMemory_Click(object sender, EventArgs e)
        {
            // Вызываем функцию GlobalMemoryStatus
            // для вычисления памяти
            MEMORYSTATUS memStatus = new MEMORYSTATUS();
            GlobalMemoryStatus(ref memStatus);

            // Строим сообщение для вывода на экран
            StringBuilder MemoryInfo = new StringBuilder();
            MemoryInfo.Append("Процент использования памяти: "
                + memStatus.dwMemoryLoad.ToString() + "\n");
            MemoryInfo.Append("Общий объем физической памяти: "
                + memStatus.dwTotalPhys.ToString() + "\n");
            MemoryInfo.Append("Объем доступной физической памяти: "
                + memStatus.dwAvailPhys.ToString() + "\n");
            MemoryInfo.Append("Размер файла подкачки: "
                + memStatus.dwTotalPageFile.ToString() + "\n");
            MemoryInfo.Append("Доступный объем в файле подкачки: "
                + memStatus.dwAvailPageFile.ToString() + "\n");
            MemoryInfo.Append("Общий объем виртуальной памяти: "
                + memStatus.dwTotalVirtual.ToString() + "\n");
            MemoryInfo.Append("Объем доступной виртуальной памяти: "
                + memStatus.dwAvailVirtual.ToString() + "\n");

            // Выводим информацию на экран
            MessageBox.Show(MemoryInfo.ToString());
        }
    }
}