Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.236.219] |
|
Сообщ.
#1
,
|
|
|
Использование таймера в консольной программе Использование WinAPI-функции SetTimer не обязательно требует наличия окна. Можно просто указать адрес процедуры, а затем запустить цикл GetMessage. Чтобы завершить работу приложения, необходимо послать ему сообщение WM_QUIT. Как видите, всё элементарно, и говорить здесь больше не о чем Хотите пример? Пожалуйста! ; ml /c /coff /Ic:\masm32\include contimer.asm ; link /subsystem:console /libpath:c:\masm32\lib contimer.obj .586P .MODEL Flat,StdCall OPTION CASEMAP:NONE INCLUDE WINDOWS.INC INCLUDE KERNEL32.INC INCLUDE USER32.INC INCLUDELIB KERNEL32.LIB INCLUDELIB USER32.LIB .DATA String db '.' ; Строка для вывода Counter db 10 ; Счётчик (кол-во запусков TimerProc) lpMsg MSG <> ; Буфер для сообщения TimerID dd ? ; Идентификатор таймера hConOut dd ? ; Дескриптор стандартного вывода Result dd ? ; Кол-во записанных байт через WriteConsole .CODE ; Процедура, запускаемая по таймеру TimerProc proc hWnd, uMsg, idEvent, dwTime: DWORD ; Выводим в стандартный вывод строку invoke WriteConsole, hConOut, addr String, sizeof String, addr Result, NULL dec Counter ; Уменьшаем счётчик jnz @@NoKill ; Если счётчик = 0, то удаляем таймер и посылаем WM_QUIT invoke KillTimer, NULL, TimerID invoke PostQuitMessage @@NoKill: ret ; Выходим из процедуры TimerProc endp ;----------------------------------------------------------------------------; ; Начало основной программы ; ;----------------------------------------------------------------------------; Start: ; Получаем дескриптор стандартного вывода и сохраняем его invoke GetStdHandle, STD_OUTPUT_HANDLE mov hConOut, eax ; Устанавливаем таймер invoke SetTimer, NULL, 0, 200, addr TimerProc mov TimerID,eax @@Repeat: ; Запускаем цикл GetMessage invoke GetMessage, addr lpMsg, NULL, 0, 0 or eax,eax jz @@Exit ; Выходим из цикла, если получено WM_QUIT invoke TranslateMessage, addr lpMsg invoke DispatchMessage, addr lpMsg jmp @@Repeat @@Exit: ; Выходим из программы invoke ExitProcess, NULL END Start |