Обработка "aрy time"события.
Вы можете зарегистрировать "aрy time" событие, вызвав функцию _SHEL_CallAtAрyTime, которая имеет следующее определение:
VxDCall _SHELL_CallAtAppyTime, <<OFFSET32 pfnCallback>, dwRefData, dwFlags, dwTimeout>
BeginProcOnAppyTime, CCALL, PUBLIC ArgVardwRefData,DWORD ; declare argument name and type ArgVar dwFlags, DWORD EnterProc
<Ваш код здесь>
LeaveProc
Return EndProcOnAppyTime
Этот сервис асинхронен. Это означает то, что он сразу возвращается после регистрации вашей функции обратного вызова. Если вызов сервиса прошел успешно, он возвращает хэндл "aрy time" события в eax'е. В обратном случае он возвращает 0.
Вы можете отменить регистрацию времени приложения, вызвав _SHELL_CancelAрyTimeEvent, которая принимает только один параметр, хэндл "aрy time" события, возвращенный _SHELL_CallAtAрyTime.
Hа всякий случай, прежде, чем вызывать _SHELL_CallAtAрyTime, вам следует узнать у системы, будет ли доступно "appy time" событие. Hапример, что, если вы зарегистрируете "aрy time" событие, когда система будет завершать работу? Ваша функция обратного вызова никогда не будет вызвана! Вы можете проверить доступность необходимого события с помощью _SHELL_QueryAрyTimeAvailable (у этого сервиса нет параметров). Он возвращает 0 в eax, если время приложения не будет доступно, то есть, сли система прекращает работу или сервер сообщений получает ошибки GP. Этот сервис не говорит вам, что сейчас время приложения: он только вам говорит, что могут быть "appy time" события, поэтому, на всякий случай, вам стоит вызывать сначала _SHELL_QueryAрyTimeAvailable, и если он возвратит ненулевое значение в eax, вам следует перейти к вызову _SHELL_CallAtAppyTime.