Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Время   Найти похожие ветки 

 
Steep ©   (2007-02-23 12:21) [0]

Как лучше всего сделать будильник?
т.е. я хочу на определенное время повесить событие
неужели просто в таймере каждую секунду сверять время?
Или есть лучшие способы Которые меньше жрут систему?
Например как-нить через системный таймер?


 
Palladin ©   (2007-02-23 12:27) [1]

Timer1.Interval:=сколько надо - сколько сейчас


 
tytus ©   (2007-02-23 12:29) [2]

Я делел так через системную ловушку SetWinEventHook.
Ненужно никаких dll, как в SetWindowHookEx...
Напиши конкретно, какое событие тебе надо., а я сейчас откопаю код...


 
Steep ©   (2007-02-23 12:34) [3]

ну например я хотел сделать для себя простенький будильник.
т.е. в определенное время должен заорать mp3 фаил


 
Steep ©   (2007-02-23 12:38) [4]

Timer1.Interval:=сколько надо - сколько сейчас

интересно...
А если комп вырубят и снова врубят
Просто пересчитывать таймер?


 
tytus ©   (2007-02-23 12:39) [5]

private
HookID:integer;

implementation

function SetShellHook(Activate:BOOL):BOOL;stdcall;export;
begin
Result:=false;
if Activate then
begin
 MainFm.HookID:=SetWinEventHook(EVENT_OBJECT_CREATE,EVENT_OBJECT_VALUECHANGE,
 0,@ShellProc,0,0,WINEVENT_OUTOFCONTEXT or WINEVENT_SKIPOWNTHREAD);
 Result:=(MainFm.HookID<>0);
end else begin
 if MainFm.HookID<>0 then Result:=UnhookWinEvent(MainFm.HookID);
 end;
end;

function ShellProc(hWinEventHook:integer;event:DWORD;hwnd:HWND;idObject:ULONG;
 idChild:ULONG;dwEventThread:DWORD;dwmsEventTime:DWORD):boolean;stdcall;
var
 WndName,WndClass:string;
 buf:PChar;
begin
if (not(idObject=$FFFFFFF7))and(not(MainFm.OnStart))then
begin
 if event=EVENT_OBJECT_NAMECHANGE then
 begin
   GetMem(buf,255);
   FillCHar(buf^,255,0);
   if GetClassName(hwnd,buf,255)>0 then WndClass:=StrPas(buf)
     else
       WndClass:="*****";
   if GetWindowText(hwnd,buf,255)>0 then WndName:=StrPas(buf)
     else
       WndName:="*****";
   FreeMem(buf);
   if (WndClass="TrayClockWClass")and(WndName=MainFm.TimeStart) then
   begin
..пишешь что тебе нужно
   end;
 end;
end;
Result:=true;
end;

MainFm.TimeStart - время которое тебе нужно. Если до 10 часов - то пиши 9:59.

FormCreate
SetShellHook(true);

FormDestoy
SetShellHook(false);


 
Steep ©   (2007-02-23 12:42) [6]

tytus ©  Спасиб большое попробую!


 
tytus ©   (2007-02-23 12:44) [7]

PS
Насчет Которые меньше жрут систему точно не скажу, но наверное
если ограничить диапазон событий
EVENT_OBJECT_CREATE и EVENT_OBJECT_DESTROY (они рядом, посмотри Windows.pas) - то можно сказать что меньше.
Хотя я ставил EVENT_MIN и EVENT_MAX - все нормально.
Почитай на родном сайте MSDN там описани константы событий, даже те, которые не вошли в Windows.pas Delphi7.


 
tytus ©   (2007-02-23 12:47) [8]

if event=EVENT_OBJECT_NAMECHANGE then
можно EVENT_OBJECT_VALUECHANGE


 
Leonid Troyanovsky ©   (2007-02-23 12:49) [9]


> Steep ©   (23.02.07 12:21)  


at 6:00 /interactive "Гимн.mp3"

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-02-23 12:57) [10]


> tytus ©   (23.02.07 12:39) [5]

Per aspera ad astra

--
Regards, LVT.


 
Steep ©   (2007-02-23 12:59) [11]

> Steep ©   (23.02.07 12:21)  
at 6:00 /interactive "Гимн.mp3"

> tytus ©   (23.02.07 12:39) [5]
Per aspera ad astra

????????????


 
tytus ©   (2007-02-23 13:02) [12]

>
Leonid Troyanovsky ©   (23.02.07 12:57) [10]
Через тернии к звёздам - Google.ru


 
Leonid Troyanovsky ©   (2007-02-23 13:05) [13]


> Steep ©   (23.02.07 12:59) [11]

Запусти cmd.exe.
Введи строку at /?
Нажми Enter.

--
Regards, LVT.

Per aspera ad astra - через тернии  - к звездам.
Лат. пословица.


 
Steep ©   (2007-02-23 13:12) [14]

at не знал про сию команду :)
Спасибо!

а cmd запускаем через
ShellExecute(handle, nil, "cmd.exe", {параметры}, nil, SW_SHOWNORMAL);

Но так я могу запустить только команду..
т.е. можно запустить winamp с параметрами?


 
Steep ©   (2007-02-23 13:15) [15]

Так это через каую службу эта фича работает?
У меня пишет служба не запущена..
Хотя планировщик вроде работает


 
Leonid Troyanovsky ©   (2007-02-23 13:26) [16]


> Steep ©   (23.02.07 13:12) [14]

> at не знал про сию команду :)

Это не команда. At.exe - консольный клиент Schedule.

> а cmd запускаем через

Т.е., cmd здесь и не нужен, пускай at.exe

> Но так я могу запустить только команду..
> т.е. можно запустить winamp с параметрами?

Видимо, как обычно: winamp.exe "гимн.mp3".
Только, пути надо прописывать полностью.
И кавычить их, на всякий случай.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-02-23 13:31) [17]


> Steep ©   (23.02.07 13:15) [15]
> Так это через каую службу эта фича работает?
> У меня пишет служба не запущена..


net start Schedule
или
net start "Планировщик заданий"

--
Regards, LVT.


 
Steep ©   (2007-02-23 13:34) [18]

Видимо, как обычно: winamp.exe "гимн.mp3".
Только, пути надо прописывать полностью.

Спасибо конечно, но при вводе at мне пишет данная служба не запущена!



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.056 c
15-1172341546
vasIZmax
2007-02-24 21:25
2007.03.18
F.A.Q. от ламера...


2-1172148385
Виталий Гаврилов
2007-02-22 15:46
2007.03.18
как мне отразить результат вычислений


15-1171805680
Tirael
2007-02-18 16:34
2007.03.18
занят другим приложением


2-1172410671
sipsik
2007-02-25 16:37
2007.03.18
как в sql-запросе отфильтровать по дате


15-1172074969
oldman
2007-02-21 19:22
2007.03.18
Онищенко продолжает удивлять...