- •1. Поняття ос, її призначення та функції.
- •1. Понятие операционной системы. Назначение, состав и функции операционных систем.
- •2. Історія розвитку ос. Класифікація сучасних ос.
- •3. Основные принципы построения ос.
- •4. Операционные оболочки.
- •5. Драйверы и утилиты.
- •6. Процессы. Определение процесса. Классификация процессов ос.
- •4. Функциональные компоненты ос. Общая характеристика
- •7. Ресурсы. Определение ресурса. Классификация ресурсов ос.
- •3. Функціональні компоненти ос.
- •5. Требования к современным ос
- •4. Ядро ос. Привілейований режим і режим користувача. Системний виклик.
- •Рхитектура ос
- •Ядро и вспомогательные модули ос
- •Ядро в привилегированном режиме
- •Микроядерная архитектура
- •Тенденции в структурном построении ос
- •Монолитные системы
- •Многоуровневые системы
- •6. Ос та її оточення. Взаємодія ос і апаратного забезпечення. Засоби апаратної підтримки ос
- •Взаимодействие с аппаратным обеспечением
- •По сфере применения[править | править вики-текст]
- •Содержание
- •Описание и использование интерфейсов[править | править вики-текст]
- •Интерфейсы и абстрактные классы[править | править вики-текст]
- •Множественное наследование и реализация интерфейсов[править | править вики-текст]
- •8. Особливості архітектури Windows. Компоненти режиму ядра. Компоненти режиму користувача. Архитектура Windows nt
- •Режим пользователя[править | править вики-текст]
- •Режим ядра[править | править вики-текст]
- •9. Процеси і потоки в сучасних ос. Складові елементи процесів і потоків. Багатопотоковість. Стани процесів і потоків. Поток выполнения
- •Отличие от процессов[править | править вики-текст]
- •Многопоточность[править | править вики-текст]
- •10. Інтерфейс Windows api. Версії Windows api. Категорії функцій Windows api.
- •Содержание
- •Общие сведения[править | править вики-текст]
- •Содержание
- •Api как средство интеграции приложений[править | править вики-текст]
- •Сигнатура функции[править | править вики-текст]
- •Семантика функции[править | править вики-текст]
- •Api операционных систем. Проблемы, связанные с многообразием api[править | править вики-текст]
- •Структура security_attributes
- •Возвращаемые значения
- •Замечания
- •Содержание
- •Общие сведения[править | править вики-текст]
- •Секреты многопоточности: изучаем модульное тестирование в сфере мобильного программинга
- •Объект ядра Событие
- •Объект ядра Мьютекс
- •Пример работы Mutex
- •Объект ядра Семафор (semaphore)
- •Критические секции
- •Атомарные операции
- •Заключение
- •15. Потоки. Функція CreateThread. Завершення потоку. Зміна класу пріоритету процесу. Установка відносного пріоритету потоку.
- •17. Робота з файлами, каталогами і дисками в Win32. Отримання інформації про диски, вільний простір.
- •18. Функція CreateFile та її параметри. Функция CreateFile
- •Коммуникационные ресурсы
- •19. Функції Windows api для пошуку файлів. Применение функций Windows api
- •Функции LoadKeyboardLayout и UnloadKeyboardLayout
- •Функция GetLocalTime
- •Функция GetTickCount
- •Функция GlobalMemoryStatus
- •Функция Sleep
- •Функции для работы с guid
- •Функция ShellExecute
- •Функция shFileOperation
- •20. Функції Windows api для читання даних з файлу та запису в файл. Синхронні і асинхронні операції з файлами. Функции api для работы с консолью
- •Использование русского языка в консоли с помощью api
- •Чтение/запись данных в консоль/файл
- •Установка заголовка окна консоли
- •Установка цвета символов и фона в консоли
- •Установка позиции курсора
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 передаётся по ссылке.
