Курсовая работа (т): Работе с таймером в условиях WinAPI

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

; [EBP+8]; HWND

WNDPROC PROC

PUSH EBP

MOV EBP,ESP

PUSH EBX

PUSH ESI

PUSH EDI

;-----------------

CMP DWORD PTR [EBP+0CH],WM_CLOSE

JNE L1

; здесь реакция на закрытие окна

; удалить таймер 1

PUSH 1; идентификатор таймера

PUSH DWORD PTR [EBP+08H]

CALL KillTimer@8

; удалить таймер 2

PUSH 2; идентификатор таймера

PUSH DWORD PTR [EBP+08H]

CALL KillTimer@8

PUSH 0

PUSH DWORD PTR [EBP+08H]

CALL EndDialog@8

JMP FINISH

L1:

CMP DWORD PTR [EBP+0CH], WM_INITDIALOG

JNE L2

; здесь начальная инициализация

; установить таймер 1

PUSH 0; параметр = NULL

PUSH 1000; интервал 1 с.

PUSH 1; идентификатор таймера

PUSH DWORD PTR [EBP+08H]

CALL SetTimer@16

; установить таймер 2

PUSH OFFSET TIMPROC; параметр = NULL

PUSH 500; интервал 0.5 с.

PUSH 2; идентификатор таймера

PUSH DWORD PTR [EBP+08H]

CALL SetTimer@16

JMP FINISH

L2:

CMP DWORD PTR [EBP+0CH],WM_TIMER

JNE FINISH

; отправить строку в окно

PUSH OFFSET STRCOPY

PUSH 0

PUSH WM_SETTEXT

PUSH 1; идентификатор элемента

PUSH DWORD PTR [EBP+08H]

CALL SendDlgItemMessageA@20

FINISH:

POP EDI

POP ESI

POP EBX

POP EBP

MOV EAX,0

RET 16

WNDPROC ENDP

;--------------------------------

;процедура таймера

; расположение параметров в стеке

; [EBP+014Н]; LPARAM - промежуток запуска Windows

; [EBP+10Н]; WAPARAM - идентификатор таймера

; [EBP+0CH]; WM_TIMER

; [EBP+8]; HWND

TIMPROC PROC

PUSH EBP

MOV EBP,ESP

; получить локальное время

PUSH OFFSET DATA

CALL GetLocalTime@4

; получить строку для вывода даты и времени

MOVZX EAX,DATA.sec

PUSH EAX

MOVZX EAX,DATA.min

PUSH EAX

MOVZX EAX,DATA.hour

PUSH EAX

MOVZX EAX,DATA.year

PUSH EAX

MOVZX EAX,DATA.month

PUSH EAX

MOVZX EAX,DATA.day

PUSH EAX

PUSH OFFSET TIM

PUSH OFFSET STRCOPY

CALL wsprintfA

; восстановить стек

ADD ESP,32

RET 16

TIMPROC ENDP

_TEXT ENDS

END START

Результат выполнения программы

Результат выполнения программы показан на рисунке 1.

Рисунок 1 - Результат выполнения программы

таймер windows winapi

Выводы

В процессе выполнения курсовой работы были получены теоретические сведения о таймерах Windows, для реализации программы было изучено 32-битное программирование, освоены такие программы, как MASM32(основной компилятор), MASM Builder(графическая оболочка MASM32), ResEdit(редактор ресурсов), OllyDBG(отладчик от стороннего разработчика). На основе полученных знаний с целью их закрепления была написана программа, выполняющая следующие основные действия:

·   Выключение компьютера по нажатию на кнопку

·   Перезагрузка компьютера по нажатию на кнопку

·   Выключение компьютера по таймеру

·   Перезагрузка компьютера по таймеру

·   Вывод текущей даты и времени

·   Вывод оставшегося времени до перезагрузки/выключения

·   Отображение сведений о программе