Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

ЛАБОРАТОРНАЯ РАБОТА № 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
    

Задание для выполнения лабораторной работы

Разработать программу, обеспечивающую получение следующей системной информации:

  1. Имя компьютера, имя пользователя.
  2. Пути к системным каталогам Windows.
  3. Версия операционной системы.
  4. Системные метрики (3 системные метрики)
  5. Системные параметры (3 системных параметра):
  6. Системные цвета (определить цвет для символьных констант и изменить его на любой другой):
    Вариант Параметр 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
  7. Функции для работы со временем:
    Вариант Название 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
  8. Дополнительные 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

Видео выполнения работы

Ход выполнения лабораторной работы

  1. В соответствии с заданием определить необходимые системные функции;
  2. Для полученного ряда функций найти определения в зависимости от используемого языка программирования
  3. Поиск определений функций можно произвести на сайте pinvoke.net;
  4. Найденные декларации перенести в код проекта;
  5. Изучить описание необходимых функций, особенности их параметров и возвращаемых результатов
  6. Исчерпывающую информацию о системных функциях, системных структурах и т.д. можно получить на сайте msdn.microsoft.com;
  7. В соответствии с заданием реализовать системные функции.
Предыдущий раздел Оглавление Следующий раздел