Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Время [D7, XP]


Steep ©   (2007-02-23 12:21:00) 

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


Steep   (2007-02-23 13:34:00) [1]

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

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


Leonid Troyanovsky   (2007-02-23 13:31:00) [2]


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


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

--
Regards, LVT.


Leonid Troyanovsky   (2007-02-23 13:26:00) [3]


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

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

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

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

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

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

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

--
Regards, LVT.


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

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


Steep   (2007-02-23 13:12:00) [5]

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

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

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


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


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

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

--
Regards, LVT.

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


tytus   (2007-02-23 13:02:00) [7]

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


Steep   (2007-02-23 12:59:00) [8]

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

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

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


Leonid Troyanovsky   (2007-02-23 12:57:00) [9]


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

Per aspera ad astra

--
Regards, LVT.


Leonid Troyanovsky   (2007-02-23 12:49:00) [10]


> Steep ©   (23.02.07 12:21)  


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

--
Regards, LVT.


tytus   (2007-02-23 12:47:00) [11]

if event=EVENT_OBJECT_NAMECHANGE then
можно EVENT_OBJECT_VALUECHANGE


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

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


Steep   (2007-02-23 12:42:00) [13]

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


tytus   (2007-02-23 12:39:00) [14]

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:38:00) [15]

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

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


Steep   (2007-02-23 12:34:00) [16]

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


tytus   (2007-02-23 12:29:00) [17]

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


Palladin   (2007-02-23 12:27:00) [18]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо