В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime.



BOOL GetFileTime(HANDLE hFile,

LPFILETIME lpCreationTime,

LPFILETIME lpLastAccessTime,

LPFILETIME lpLastWriteTime);

Перед вызовом данной функции, необходимо открыть файл, о значениях времени которого необходимо получить информацию. Функции GetFileTime передается дескриптор этого файла и указатели на три экземпляра структуры FILETIME, в которые будут записаны время создания (lpCreationTime), время последнего доступа (lpLastAccessTime) и время последней записи (lpLastWriteTime).

 

2) Установить время создания, последнего доступа или модификации файлов можно с помощью функции SetFileTime.

BOOL SetFileTime(HANDLE hFile,

const FILETIME *lpCreationTime,

const FILETIME *lpLastAccessTime,

const FILETIME *lpLastWriteTime):

В качестве входных параметров функция SetFileTime принимает указатели на три экземпляра структуры FILETIME и дескриптор файла. Экземпляры структур уже заполнены необходимыми значениями времени. В случае успешного завершения функция возвращает ненулевое значение в регистре ЕАХ.

 

3) В Win32 имеется функция GetFileInformationByHandle, с помощью которой можно получить все атрибуты файла:

BOOL GetFileInformationByHandle (HANDLE hFile,

LPBY_HANDLE_FILE_INFORMATION lpFileInformation);

На вход данной функции передается дескриптор файла, о котором необходимо получить информацию, и указатель на экземпляр структуры BY_HANDLE_FILE_INFORMATION, который заполняется этой функцией. В этой структуре сосредоточена вся информация о файле.


Пример 10: Разработать Win32 - консольное приложение с использованием функции GetFileInformationByHandle.

 

;---------------------------описание структур----------------------------

FILETIME struc

DwLowDateTime dd?;младшие 32 бита значения времени

DwHighDateTime dd?;старшие 32 бита значения времени

FILETIME ends

 

BY_HANDLE_FILE_INFORMATION struc

DwFileAttributes dd 0;атрибуты файла

 

struc

ftCreationTime_DwLowDateTime dd?; младшие 32 бита времени

; создания файла

ftCreationTimeDwHighDateTime dd?;старшие 32 бита времени создания

; файла

Ends

 

Struc

FtLastAccessTime_DwLowDateTime dd?; младшие 32 бита времени

; последнего доступа

FtLastAccessTime_DwHighDateTime dd?; старшие 32 бита времени

; последнего доступа

еnds

 

struc

ftLastWriteTime_DwLowDateTime dd?; младшие 32 бита времени

; последней записи

ftLastWnteTime_DwHighDateTime dd?;старшие 32 бита времени

; последней записи

ends

 

dwVolumeSerialNumber dd 0;серийный номер тома, на котором

; находится файл

nFileSizeHigh dd 0; старшие 32 бита размера файла

nFileSizeLow dd 0; младшие 32 бита размера файла

nNumberOfLinks dd 0; число ссылок на файл

nFileIndexHigh dd 0;старшие 32 бита идентификатора файла

nFileIndexLow dd 0; младшие 32 бита идентификатора файла

ends

 

.data

info BY_HANDLE_FILE_INFORMATION <>

TitleText db 'Получение информации о файле в Win32',0

lpBuf db "File1.txt",0

hFile dd 0

.code

;-------------------------------------Открываем файл--------------------

push 0

push 0

push OPEN_EXISTING; открыть существующий файл, если его нет –

; ошибка

push 0; защита файла не требуется

push FILE_SHARE_READ;разрешено совместное использование файла

; (по чтению)

push GENERIC_READ; разрешено чтение из файла

push offset lpBuf

call CreateFileA

сmp eax,0ffffffffh

je exit; если неуспех

mov hFile,eax; дескриптор файла

;---------------------------GetFileInformationByHandle

push offset info

push hFile

call GetFileInformationByHandle

cmp eax,0

jz exit; выход в случае неудачи

; результат смотрим в отладчике TD32.exe

 

 

Самостоятельно на практике: Вывести все атрибуты созданного текстового файла File1.txt на консоль.

 


Лекция №11. Работа с графикой на ассемблере. Функции BIOS. Видеопамять.

 

Современные видеоконтроллеры поддерживают разнообразные текстовые и графические режимы. Текстовые режимы различаются по разрешению (число отображаемых символов по горизонтали и вертикали) и цветовой палитре (монохромный или 16-цветный режим). Для графических режимов основным признаком классификации является количество одновременно отображаемых цветов и, соответственно, количество бит видеопамяти, отводимое на каждую точку (пиксел) изображения.

Различают следующие типы графических режимов:

– монохромный (1-битное кодирование);

– 16-цветный EGA/VGA (4-битное кодирование);

– 256-цветный SVGA (8-битное кодирование);

– HiColor (16-битное кодирование);

– TrueColor (24-битное / 32-битное кодирование).

 


Для работы с графическим адаптером, в BIOS используется прерывание INT 10h. Оно позволяет устанавливать графические режимы работы, выводить символы и графику. Выбор графического режима – Функция 0 (ah=0) прерывания INT 10h устанавливает видеорежим, который был указан в регистре AL.

Графические режимы

Режим Разрешение Количествоцветов
06h 640x200  
0Dh 320x200  
0Eh 640x200  
0Fh 640x350  
10h 640x350  
11h 640x480  
12h 640x480  
13h 320x200  
6Ah * 800x600  

Режим 6Ah утвержден VESA, но его поддерживают не все видео адаптеры

Существуют также дополнительные режимы, которые используются для SVGA и XGA адаптеров. Они устанавливаются вызовом VESA BIOS Extension (AX=4F02h INT 10h ).


Рисование точки

Функция 0Chпрерывания INT 10h.

Цвет – в AL;

Видеостраница – в BH;

КоординатаY – в DX;

КоординатаX – в CX.

 

Пример: нарисовать точку с цветом 1, с координатами X=50 и Y=20.

movah,0Ch; функция рисования точки moval,1; цвет точки movbh,0; видео страница movcx,50; координата X movdx,20; координата Y int10h; вызов прерывания BIOS

Функция 0Ch исполняется очень медленно, особенно при рисовании множества точек. Настоящие графические программы (такие как игры) записывают непосредственно в видеопамять, после того, как они рассчитали цвет и расположение точки.


Пример программы

Эта программа переключается в графический режим, рисует длинную линию, используя функцию 0Сh, затем ожидает нажатия клавиши и возвращается в прежний режим.

.model small.stack 100h.386Mode_6 = 6; 640 X 200, 2 colors Mode_13 = 0Dh; 320 X 200, 16 colors Mode_14 = 0Eh; 640 X 200, 16 colors Mode_15 = 0Fh; 640 X 350, 2 colors Mode_16 = 10h; 640 X 350, 16 colors Mode_17 = 11h; 640 X 480, 2 colors Mode_18 = 12h; 640 X 480, 16 colors Mode_19 = 13h; 320 X 200, 256 colors Mode_6A = 6Ah; 800 X 600, 16 colors. datasaveMode db; Сохранить текущий видео режим currentX dw 100; координата X currentY dw 100; координата Y color db 1; номер цвета; В 2 цветном режиме 1 = белый, в 16 цветном 1 = синий. code start: mov ax,@data mov ds,ax; Получить текущий видеорежим mov ah,0Fh int 10h mov saveMode,al; Переключиться в графический режим mov ah,0; установка видеорежима mov al,Mode_17; номер режима int 10h; Рисование прямой линии LineLength = 100 mov dx,currentY mov cx,LineLength; счетчик цикла L1: push cx mov ah,0Ch; рисование точки mov al,color; цвет точки mov bh,0; видео страница mov cx,currentX int 10h inc currentX ;inc color; используйте для разноцветной линии pop cx loop L1; Ожидаем нажатия клавиши mov ah,0 int 16h; Возврат в прежний видеорежим mov ah,0; установить видео режим mov al,saveMode; сохраненный видео режим int 10h; Выход из программы mov ax,4C00h int 21h end start

 


Обзор прерываний BIOS

Получение информации об оборудовании

INT 11h - Получить список оборудования.

В процессе инициализации тестовые модули, находящиеся в BIOS, динамически определяют состав аппаратного обеспечения машины и записывают конфигурацию системы в специально отведенную для этого ячейку памяти.

С помощью прерывания INT 11h, получают в регистре AX состав аппаратного обеспечения машины. Каждый бит в слове конфигурации отвечает за соответствующее устройство.



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 281; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.163.31 (0.01 с.)