Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответ - Екзаменаційні питання з курсу ОС.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

19. Функції Windows api для пошуку файлів. Применение функций Windows api

1

1

Автор: Вячеслав Клепинин ИФ Гортис, Санкт-Петербург

В этом разделе вы познакомитесь с некоторыми полезными Windows API функциями. Для каждой функции сначала приводится её прототип на Си, а затем - объявление на Visual FoxPro и примеры использования.

Функции LoadKeyboardLayout и UnloadKeyboardLayout

Функция LoadKeyboardLayout из библиотеки User32.dll загружает новую языковую раскладку клавиатуры. Вот её прототип:

HKL LoadKeyboardLayout(

LPCTSTR pwszKLID, // Наименование загружаемой языковой раскладки

UINT Flags // Флаг

);

Объявление функции в Visual FoxPro:

DECLARE Long LoadKeyboardLayout IN WIN32API String KLID, Long Flags

Функция возвращает дескриптор раскладки клавиатуры (32-х разрядное целое) или ноль в случае ошибки.

Передаваемый функции параметр KLID определяет язык раскладки клавиатуры. Вот некоторые допустимые значения параметра:

Параметр KLID

Описание

 "00000407"

 Немецкий (стандартный)

 "00000409"

 Английский (США)

 "0000040C"

 Французский (стандартный)

 "0000040D"

 Финский

 "00000410"

 Итальянский

 "00000415"

 Польский

 "00000419"

 Русский

 "00000422"

 Украинский

 "00000423"

 Белорусский

 "00000425"

 Эстонский

 "00000426"

 Латвийский

 "00000427"

 Литовский

Второй параметр, Flags,  указывает, как будет загружаться раскладка клавиатуры. Для приложений на Visual FoxPro его значение всегда равно единице.

Для удаления клавиатурной раскладки используется функция UnloadKeyboardLayout. Она так же находится в библиотеке User32.dll. Вот её прототип:

BOOL UnloadKeyboardLayout(

HKL hkl // Дескриптор раскладки клавиатуры

);

Объявление функции в Visual FoxPro:

DECLARE Long UnloadKeyboardLayout IN WIN32API Long hkl

Передаваемый функции параметр hkl - дескриптор выгружаемой клавиатурной раскладки. Функция возвращает отличное от нуля значение при успешном выполнении или ноль в случае ошибки.

В следующем примере загружается раскладка клавиатуры для немецкого языка:

HKL = LoadKeyboardLayout("00000407", 1)

В следующем примере показано, как удалить существующую раскладку клавиатуры:

UnloadKeyboardLayout(HKL)

  

Функция GetLocalTime

Функция GetLocalTime из библиотеки Kernel32.dll возвращает текущие дату и время в формате UTC (Universal Time Coordinated). Вот её прототип:

VOID GetLocalTime(

LPSYSTEMTIME lpSystemTime // Адрес структуры SystemTime

);

Тип данных LPSYSTEMTIME - это указатель на структуру SystemTime:

typedef struct _SYSTEMTIME {

WORD wYear; // Год

WORD wMonth; // Месяц

WORD wDayOfWeek; // День недели

WORD wDay; // День месяца

WORD wHour; // Часы

WORD wMinute; // Минуты

WORD wSecond; // Секунды

WORD wMilliseconds; // Миллисекунды

} SYSTEMTIME;

Как видите, все поля структуры - это 16-ти разрядные целые числа. Месяцы нумеруются начиная с единицы, то есть для января wMonth=1 и так далее. Номера дней недели начинаются с нуля, то есть для воскресенья wDayOfWeek=0, для понедельника wDayOfWeek=1, и так далее.

Функция GetLocalTime не возвращает никаких значений. Вот её объявление в Visual FoxPro:

DECLARE GetSystemTime IN WIN32API String @ SystemTime

В следующем примере показан код функции LocalTime. Функция получает массив, переустанавливает его размер и заполняет его элементы значениями даты и времени:

FUNCTION LocalTime

PARAMETERS taTimeArray

EXTERNAL ARRAY taTimeArray

DIMENSION taTimeArray[8]

DECLARE GetLocalTime IN WIN32API String @

LOCAL lcSystemTime && Для структуры SYSTEMTIME

lcSystemTime = REPLICATE(CHR(0), 16) && Размечаем память для структуры

GetLocalTime(@lcSystemTime) && Заполняем поля структуры

* Заполняем переданный функции массив значениями полей структуры

taTimeArray[1] = CTOBIN(LEFT(lcSystemTime,2), '2RS') && Год

taTimeArray[2] = CTOBIN(SUBSTR(lcSystemTime,3,2), '2RS') && Месяц

taTimeArray[3] = CTOBIN(SUBSTR(lcSystemTime,5,2), '2RS') && День недели

taTimeArray[4] = CTOBIN(SUBSTR(lcSystemTime,7,2), '2RS') && День месяца

taTimeArray[5] = CTOBIN(SUBSTR(lcSystemTime,9,2), '2RS') && Часы

taTimeArray[6] = CTOBIN(SUBSTR(lcSystemTime,11,2), '2RS') && Минуты

taTimeArray[7] = CTOBIN(SUBSTR(lcSystemTime,13,2), '2RS') && Секунды

taTimeArray[8] = CTOBIN(SUBSTR(lcSystemTime,15,2), '2RS') && Миллисекунды

RETURN

ENDFUNC

Пример вызова функции LocalTime из вашего приложения:

LOCAL laTime[1], laDayOfWeek[7], laMonth[12], lcResult

laDayOfWeek[1] = 'воскресенье'

laDayOfWeek[2] = 'понедельник'

laDayOfWeek[3] = 'вторник'

laDayOfWeek[4] = 'среда'

laDayOfWeek[5] = 'четверг'

laDayOfWeek[6] = 'пятница'

laDayOfWeek[7] = 'суббота'

laMonth[1] = 'января'

laMonth[2] = 'февраля'

laMonth[3] = 'марта'

laMonth[4] = 'апреля'

laMonth[5] = 'мая'

laMonth[6] = 'июня'

laMonth[7] = 'июля'

laMonth[8] = 'августа'

laMonth[9] = 'сентября'

laMonth[10] = 'октября'

laMonth[11] = 'ноября'

laMonth[12] = 'декабря'

= LocalTime(@laTime)

lcResult = 'Сейчас ' + STR(laTime[4],2) + ' ' + laMonth[laTime[2]] + ;

STR(laTime[1],4) + ' года, ' + laDayOfWeek[laTime[3]+1] + CHR(13) + ;

LTRIM(STR(laTime[5])) + ' час ' + LTRIM(STR(laTime[6])) + ' мин'

= MESSAGEBOX(lcResult)

Обратите внимание: массив laTime передаётся по ссылке.