Предыдущий раздел | Оглавление | Следующий раздел |
ЛАБОРАТОРНАЯ РАБОТА № 1
Функции получения системной информации
Цель работы: Получение практических навыков по программированию в Win32 API с использованием аппаратных и системных функций.
Методические указания к выполнению лабораторной работы
Основные Win32 API-функции получения системной информации перечислены ниже:
- GetComputerName
- GetSystemMetrics
- GetWindowsDirectoty
- GetKeyboardTyре
- GetTempPath
- SetСоmрuterName
- GetSysColor
- GetUserName
- SetSysColors
- CecSystemDirectory
- GetVersion
- SystemParametersInfo
- GetSystemlnfo
- GetVersioriEx
- GetUserName
Подробное описание синтаксиса вышеуказанных API-функций приведено в [1].
Например, для определения имени компьютера используется следующая функция.
Функция GetComputerName используется для получения текущего имени компьютера. Связанная с ней SetСomputerName используется для присвоения имени компьютеру. Объявление в VC++ записывается таким образом:
BOOL GetComputerName(
LPTSTR IpBuffer, // Адрес буфера имени.
LPDWORD nSize // Размер буфера имени.
);
Далее приведено описание функции GetComputerName в Delphi (unit Windows):
function GetComputerName(lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall;
function GetComputerName; external kernel32 name 'GetComputerNameA';
Ниже приведен код соответствующей VB-декларации:
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" ( _
ByVal IpBuffer As String, _
nSize As Long _
) As Long
В соответствии с документацией, выполнение функции GetComputerName в Windows 9х завершится неудачей, если размер буфера входных данных меньше, чем величина константы MAX_COMPUTERNAME_LENGTH + 1. Эта константа определена в WINBASE.Н как
#define MAX_COMPUTERNAME_LENGTH 15
в Delphi (unit Windows):
MAX_COMPUTERNAME_LENGTH = 15;
в VB записывается таким образом:
Const MAX_COMPUTERNAME_LENGTH = 15
{ фрагмент на Delphi }
var Bufer : array [0..MAX_COMPUTERNAME_LENGTH+1] of char;
size : cardinal;
. . . . . .
size := SizeOf(Bufer);
GetComputerName(@Bufer,Size);
edit1.text:=bufer;
' фрагмент на VB
Public Function GetTheComputerName() As String
Dim s As String, Ing As Long
s = String(MAX_COMPUTERNAME_LENGTH + 1, 0)
Ing = GetComputerName(s, MAX_COMPUTERNAME_LENGTH)
GetTheComputerName = s
End Function
Задание для выполнения лабораторной работы
Разработать программу, обеспечивающую получение следующей системной информации:
- Имя компьютера, имя пользователя.
- Пути к системным каталогам Windows.
- Версия операционной системы.
- Системные метрики (3 системные метрики)
- Системные параметры (3 системных параметра):
- Системные цвета (определить цвет для символьных констант и изменить его на любой другой):
Вариант Параметр nIndex 1 COLOR_3DDKSHADOW, COLOR_BTNTEXT, COLOR_ACTIVECAPTION 2 COLOR_3DFACE, COLOR_CAPTIONTEXT, COLOR_BACKGROUND 3 COLOR_BTNFACE, COLOR_GRAYTEXT, COLOR_DESKTOP 4 COLOR_3DHILIGHT, COLOR_HIGHLIGHT, COLOR_ACTIVEBORDER 5 COLOR_3DHIGHLIGHT, COLOR_HIGHLIGHTTEXT, COLOR_WINDOWTEXT 6 COLOR_BTNHILIGHT, COLOR_INACTIVEBORDER, COLOR_WINDOW 7 COLOR_BTNHIGHLIGHT, COLOR_INACTIVECAPTION, COLOR_SCROLLBAR 8 COLOR_3DLIGHT, COLOR_INACTIVECAPTIONTEXT, COLOR_MENUTEXT 9 COLOR_3DSHADOW, COLOR_INFOBK, COLOR_MENU 10 COLOR_BTNSHADOW, COLOR_INFOTEXT, COLOR_CAPTIONTEXT 11 COLOR_ACTIVEBORDER, COLOR_MENU, COLOR_INACTIVEBORDER 12 COLOR_ACTIVECAPTION, COLOR_MENUTEXT, COLOR_BTNFACE 13 COLOR_APPWORKSPACE, COLOR_SCROLLBAR, COLOR_BTNTEXT 14 COLOR_BACKGROUND, COLOR_WINDOW, COLOR_INFOTEXT 15 COLOR_DESKTOP, COLOR_WINDOWTEXT, COLOR_INFOTEXT - Функции для работы со временем:
Вариант Название API-функции 1 GetSystemTime, GetTimeZonelnformation, EnumCalendarlnfo 2 GetLocalTime, GetTimeZonelnformation, EnuinDate Formats 3 GetSystemTime, GetTimeZonelnformation, EnumTimeFormats 4 GetLocalTime, GetTimeZonelnformation, GetMessageTime 5 GetSystemTime, GetTimeZonelnformation, GetSystemTimeAdjustment 6 GetLocalTime, GetTimeZonelnformation, GetTickCount 7 GetSystemTime, GetTimeZonelnformation, GetTimeFormat 8 GetLocalTime, GetTimeZonelnformation, SetSystemTime 9 GetSystemTime, GetTimeZonelnformation, SetLocalTime 10 GetLocalTime, GetTimeZonelnformation, SetSystemTimeAdjustment 11 GetSystemTime, GetTimeZonelnformation, SetTimeZonelnformation 12 GetLocalTime, GetTimeZonelnformation,SystemTimeToTzSpecificLocalTime 13 GetSystemTime, GetTimeZonelnformation, SetLocalTime 14 GetLocalTime, GetTimeZonelnformation, SetSystemTime 15 GetSystemTime, GetTimeZonelnformation, SetLocalTime - Дополнительные API-функции:
Вариант Название API-функции 1 ActivateKeyboardLayout, GetCurrencyFormat, GetLastError, OemToChar 2 CharToOem, GetCursor, GetLocaleInfo, OemToCharBuff 3 AnsiToOemBuff, GetCursorPos, GetNumberFormat, SetCaretPos 4 ClipCursor, GetDoubleClickTime, GetOEMCP, SetCursor 5 CreateCaret, GetEnvironmentStrings, GetQueueStatus, SetCursorPos 6 DestroyCaret, GetEnvironmentVariable, GetSystemDefaultLangID, SetDoubleClickTime 7 EnumSystemCodePages, GetInputState, GetLastError, SetKeyboardState 8 ExitWindowsEx, GetKBCodePage, GetSystemDefaultLCID, SetCaretBlinkTime 9 GetACP, GetKeyboardLayout, GetSystemPowerStatus, SetComputerName 10 GetAsyncKeyState, GetKeyboardLayoutList, GetTickCount, SetLocaleInfo 11 GetCaretBlinkTime, GetKeyboardLayoutName, GetLastError, SetSystemCursor 12 GetCaretPos, GetKeyboardState, GetUserDefaultLangID, SetSystemPowerState 13 GetClipCursor, GetKeyboardType, GetUserDefaultLCID, ShowCursor 14 GetCommandLine, GetKeyNameText, MessageBeep, SwapMouseButton 15 GetCPInfo, GetKeyState, GetLastError, UnloadKeyboardLayout
Видео выполнения работы
Ход выполнения лабораторной работы
- В соответствии с заданием определить необходимые системные функции;
- Для полученного ряда функций найти определения в зависимости от используемого языка программирования Поиск определений функций можно произвести на сайте pinvoke.net;
- Найденные декларации перенести в код проекта;
- Изучить описание необходимых функций, особенности их параметров и возвращаемых результатов Исчерпывающую информацию о системных функциях, системных структурах и т.д. можно получить на сайте msdn.microsoft.com;
- В соответствии с заданием реализовать системные функции.
Предыдущий раздел | Оглавление | Следующий раздел |