Лабораторная работа №1-1
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 2021
Лабораторная работа №1
Цель работы. Получение практических навыков по программированию в Win32 API с использованием аппаратных и системных функций. Ознакомиться с теоретическим материалом.
Вариант №9
Листинг кода:
// Объявление API-функции.
[DllImport("winmm.dll", EntryPoint = "sndPlaySound")]
public static extern long PlaySound(string fileName, long flags);
//Определение имени ПК
[DllImport("kernel32.dll")]
static extern unsafe bool GetComputerName(byte* lpBuffer, long* nSize);
//Определение имени пользователя
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool GetUserName(System.Text.StringBuilder sb, ref Int32 length);
//Определение системной директории
[DllImport("kernel32.dll")]
static extern GraphicsUnit GetSystemDirectory([Out] StringBuilder lpBuffer, uint uSize);
// Определение версии ОС
[DllImport("kernel32.dll")]
static extern bool GetVersionEx(ref OSVERSIONINFO osvi);
//Определение метрики ПК
[DllImport("user32.dll")]
static extern int GetSystemMetrics(SystemMetric smIndex);
//Системные настройки
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref uint pvParam, uint fWinIni);
//Системные цвета
[DllImport("user32.dll")]
static extern uint GetSysColor(int nIndex);
//Системная дата
[DllImport("kernel32.dll")]
static extern void GetSystemTime(out SYSTEMTIME lpSystemTime);
//Цвет рабочего стола
[DllImport("user32.dll")]
static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues);
private unsafe void button1_Click(object sender, EventArgs e)
{
//определение имени ПК
byte[] buffor = new byte[512];
long sizeNameComputer = buffor.Length;
long* pSize = &sizeNameComputer;
fixed (byte* pBuffor = buffor)
{
GetComputerName(pBuffor, pSize);
}
System.Text.Encoding textEnc = new System.Text.ASCIIEncoding();
label1.Text = "Имя ПК: " + textEnc.GetString(buffor);
//Определение имени пользователя
StringBuilder BufferUserName = new StringBuilder(512);
int sizeUserName = 512;
GetUserName(BufferUserName, ref sizeUserName);
label2.Text = "Имя пользователя: " + BufferUserName;
//Определение системной директории
StringBuilder sbSystemDir = new StringBuilder(256);
uint sizePathSystemDir = 256;
GetSystemDirectory(sbSystemDir, sizePathSystemDir);
label3.Text = "Системная директория: " + sbSystemDir;
//Определение версии ОС
OSVERSIONINFO osVersionInfo = new OSVERSIONINFO();
osVersionInfo.dwOSVersionInfoSize = (uint)Marshal.SizeOf(osVersionInfo);
GetVersionEx(ref osVersionInfo);
label4.Text = "Версия ОС: " + osVersionInfo.dwBuildNumber;
//Определение метрики ПК
switch (GetSystemMetrics(SystemMetric.SM_CLEANBOOT))
{
case 0:
label5.Text = "Тип загрузки: " + "Normal boot";
break;
case 1:
label5.Text = "Тип загрузки: " + "Fail safe boot";
break;
case 2:
label5.Text = "Тип загрузки: " + "Fail safe boot with networking";
break;
}
//Разрешение экрана
label6.Text = "Разрешение монитора: " + GetSystemMetrics(SystemMetric.SM_CXSCREEN)
+ "x" + GetSystemMetrics(SystemMetric.SM_CYSCREEN);
//Системные настройки
StringBuilder pathWallpaper = new StringBuilder(1024);
const uint SPI_GETDESKWALLPAPER = 0x0073;
SystemParametersInfo(SPI_GETDESKWALLPAPER, 1024, pathWallpaper, 0);
label7.Text = "Путь к картинке для рабочего стола: " + pathWallpaper;
//Контрастность
const uint SPI_GETFONTSMOOTHINGCONTRAST = 0x200C;
uint contrast = 0;
SystemParametersInfo(SPI_GETFONTSMOOTHINGCONTRAST, 0, ref contrast, 0);
label8.Text = "Контрастность: " + contrast;
//Системные цвета
const int COLOR_3DSHADOW = 1;
int color1 = Convert.ToInt32(GetSysColor(COLOR_3DSHADOW));
Color color = Color.FromArgb(color1 & 0xFF, (color1 & 0xFF) >> 8, (color1 & 0xFF0000) >> 16);
label9.Text = "Цвет рабочего стола: " + "R = " + color.R + ", G = " + color.G + " , B = " + color.B;
//Узнаем время
SYSTEMTIME myTime;
GetSystemTime(out myTime);
label10.Text = "Дата: " + myTime.Day + "/" + myTime.Month + "/" + myTime.Year;
}
private void Form1_Load(object sender, EventArgs e)
{
// Проигрывание звука.
(new System.Media.SoundPlayer(@"C:\Users\LANVIN\source\repos\API_function\API_function\Resources\song.wav")).PlayLooping();
}
private void button2_Click(object sender, EventArgs e)
{
//Меняем цвет фона рабочего стола
const int COLOR_DESKTOP = 1;
Color inColor = Color.FromArgb(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text));
int[] elements = { COLOR_DESKTOP };
int[] colors = { System.Drawing.ColorTranslator.ToWin32(inColor) };
SetSysColors(elements.Length, elements, colors);
}
}
}
Фото: