g
to.
._sleep_ alarm Turbo Delphi L ite - to__«ileep_atafm
.bdspfoj
B
le Ed
it Search
yiew
Project gun £omoonent look v^
lndow
Help
Æ dP.Bj.-t3 Ü г ©
structure
Ç
X
В-ІЗ Procedures
: -фз CreateWaitab
ieT
imerW
' -фи
DateT
imeToF
ileT
ime
; ф
і F
ileT
imeToDateT
ime
•■ф
а
SetWaitab
leT
imer
B Ü3 Variab
les/Constants
d
lit
ф
INFIN
ITE
! ф mus
ik
I
ф
s
ignal
: :•••# tm
r
^ tm
r2
# wnd
é - Ü Uses
c
lasses
■Щ
mmsystem
sysutils
w
indows
Запуска-
ем
спя-
щий режим.
Таким
образом,
уже можем сфор-
мировать основные
требования к наше-
му будильнику:
1
ВОЗМОЖ-
■ ность рабо-
ты при активации
аппаратных тайме-
ров пробуждения.
2
ВОЗМОЖ-
■ ность зада-
ния пользователем
времени пробуж-
дения, длительнос-
ти воспроизведе-
ния и имени меди-
афайла для воспроизведения.
3
Реализация приложения на WinAPI в виде
■ консольной утилиты с поддержкой парамет-
ров командной строки.
Пишем программу
И
так, приступим к основной задаче. Для рабо-
ты нам понадобится следующая бесплатная
IDE среда разработки - TurboDelphi-Lite Portable
(флешечная версия
w w w .andyaska.com /?act= dow n-
load& m ode=detail& id=34).
Ввиду ограниченности места в журнале рассмот-
рим только основные моменты реализации. Преж-
де всего, запустим IDE среду Delphi и создадим
пустой проект
( р и с . 8 ).
Разработку осуществим на
WinAPI в консоли без всяких форм.
ВВР
Ш
ІЛ ІІІІ
»■il
s k i
= І . і в А
!?й fej to_*ep_al.
? X
// 2000
мс
= 2000 * 10‘-3 / 200 *
10*-9
= 2000 * 20
//
положительные значения = абсолютному времени
// отрицательные
=
относительное
tmr := 10000 * strcointdef(paramstr(1), 1000);
//
длительность будильника
dlit:- strtointdef(paramstr(
2
),
1000
);
//
мелодия будильника
musik:= paramstr(3);
//
создем таймер, работающий в ждущем режиме-
wnd: = CreateWaitabieTimerW(nil, true, 'SLEEP-ALARM
')
//
устанавливаем длительность таймера-
//tmc2:= DateTimeToFileTlraeOs
SetWaitableTimer(wnd, tmr, 0, nil, nil, true);
signal:= WaitForSingleObject(wnd, INFINITE);
Activate ▼
Fte
@ ProjectGroupl
|p to sleep_aiarm
«
4
:>
//
воспроизводим заданную мелодию-
MCISendString(PChar('play 1
+ musik),
sleep(dlit)
nil, 0, 0)
Р ис. 8. IDE ср е д а
TurboDelphi-Lite
\
HK Too
l Palette
*> TfcS* *
■B
Delphi Projects
I Jp Data Modu
le
i ^ Frame
| Q Form
! ; H| Thread
Ob
ject
'j
0
Component
H Un
it
j §§ Contro
l Panel,
)
;yl| Service
J3 Dual list box
? X
Упорядочить значки ►
Обновить
Вставить
Вставить
ярлык
TFNTimerAPCRoutine;
IpArgToCompletionRoutine: Pointer
fResume: BOOL): BOOL; stdcall;
external ‘kernel32.dll’
name ‘SetWaitableTimer’;
const INFINITE =
$FFFFFFFF;
var no, musik: string;
wnd: hwnd;
tm r: TLargelnteger;
tmr2: TFileTime;
signal, dlit: integer;
begin
/ / считываем и проверяем первый параметр ко-
мандной строки
iJlsVN Checkout.
..
^SfTorto
lseSVN
Свойства
О Оапку
8
BP**
Р ис. 10. С озда н и е
нового ярлыка на
р а бочем столе
Создадим приложение, которое будет вести от-
счет времени до пробуждения согласно нашему ал-
горитму. Код приложения-будильника будет мини-
малистичным и простым:
program to_sleep_alarm;
{$APPTYPE CONSOLE}
uses windows, sysutils, classes, mmsystem;
function CreateWaitableTimerW(lpTimerAttributes:
PSecurityAttributes;
bManualReset: BOOL;
IpTimerName: PWideChar):
THandle; stdcall;
external ‘kernel32.dll’ name
‘CreateWaitabieTimerW’;
function
SetWaitableTimerfhTimer:
THandle;
var IpDueTime:
TLargelnteger;
IPeriod: Longint;
pfnCompletionRoutine:
no:= paramstr(1);
if no=” then exit;
if no=’?’ or no=’h’ then begin
writeln(‘=== HELP console SLEEP-AU\RM===’);
writelnf‘Startup options:’);
writeln(‘to_sleep_alarm
[timer]
[duration_musik]
[path_musik]’);
writeln(‘Timer, ms:’);
writeln(‘negative values = relative time’);
writeln(‘positive values = absolute time’);
writeln(‘The remaining
parameters:’);
writeln(‘- duration_musik,
ms (default 1000)’);
writeln(‘- path_musik, MCI
MP3/WAV/OGG (default cur-
rent dir)’);
exit
end;
/ / время будильника из 1 -
предыдущая страница 29 Компьютер 2014 02 читать онлайн следующая страница 31 Компьютер 2014 02 читать онлайн Домой Выключить/включить текст