| Автор
| Сообщение |
|
|
|
Цитата |
|
Привет !
1. Есть ли в системных библиотеках Дельфи функция позволяющая узнать как долго "существовала" в системе определенная программа?
2. Какая фукция (АПИ) Виндоус позволяет это сделать? |
|
| В начало |
|
 |
|
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
скорее всего нет, несли ты имеешь ввиду узнать время работы уже закрытого приложения.
хотя это приложение может в events винды писать сообщения о старте\стопе.
есле же сам запускаешь приложение, то это легко, через WaitForSingleObject кажется |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Не, WaitForSingleObject временно приостанавливает вызывающий поток, т.е. поток вызвавший WaitForSingleObject приостанавливается на определенное время (оно задается как последний аргументф функции). _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
to dogma
имеется в виду использование этой функции в следящем приложении, ну т.е. открываем хендл процесса и - WaitForSingleObject до тех пор пока он не завершится. _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
Можно, до тех пор пока процесс жив  _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| А можно в FormCreate заставить прогу написать в реестре время создания, а в FormDestroy все подсчитать и вывести сообщение =) |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
| легче сразу посылать сообщения при старте и при окончании, а в следящеё проге их обрабатывать. при условии что две проги твои. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Спасибо за ответы!
Хочу уточнить, что мне в самой программе нужно узнать как долго она "существовала". |
|
| В начало |
|
 |
|
|
 |
|
|
|
Цитата |
|
| Anatoly_71 писал(а): | | ... мне в самой программе нужно узнать как долго она "существовала". |
Вот тебе код...
| Код: |
uses
..., Registry, ...;
procedure TForm1.FormCreate(Sender : TObject);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software', false);
Reg.WriteString('Start', TimeToStr(Time));
Reg.CloseKey;
Reg.Free;
end;
...
procedure TForm1.FormClose(Sender : TObject);
var
Reg : TRegistry;
TimeStr : string;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software', false);
if Reg.ValueExist('Start') then TimeStr := Reg.ReadString('Start');
//дальше с этим временем делаешь сравнение с текущим, and the END!.
...
Reg.CloseKey;
Reg.Free;
end; |
|
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
| ещё можно GetAtom AddAtom ))) |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | Хочу уточнить, что мне в самой программе нужно узнать как долго она "существовала". |
для этого не надо никаких атомов, никаких записей в реестр.
процесс сам "знает" время своего запуска.
| Код: | procedure TForm1.Button5Click(Sender: TObject);
var
ftstart, ftdummy: TFileTime;
ststart, stnow: TsystemTime;
dtdiff: TDateTime;
begin
// получаем время запуска текущего процесса
GetProcessTimes(GetCurrentProcess, ftstart, ftdummy, ftdummy, ftdummy);
FileTimeToLocalFileTime(ftstart, ftstart);
FileTimeToSystemTime(ftstart, ststart);
// получаем текущее время
GetLocalTime(stnow);
// ввычисляем сколько времени была запущена программа
dtdiff:=SystemTimeToDateTime(stnow)-SystemTimeToDateTime(ststart);
ShowMessage(TimeToStr(dtdiff));
end; |
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
| блин, как всегда, колесо уже изобрели. |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Причем
| Цитата: | Код:
procedure TForm1.Button5Click(Sender: TObject);
var
ftstart, ftdummy: TFileTime;
ststart, stnow: TsystemTime;
dtdiff: TDateTime;
begin
// получаем время запуска текущего процесса
GetProcessTimes(GetCurrentProcess, ftstart, ftdummy, ftdummy, ftdummy);
FileTimeToLocalFileTime(ftstart, ftstart);
FileTimeToSystemTime(ftstart, ststart);
// получаем текущее время
GetLocalTime(stnow);
// ввычисляем сколько времени была запущена программа
dtdiff:=SystemTimeToDateTime(stnow)-SystemTimeToDateTime(ststart);
ShowMessage(TimeToStr(dtdiff));
end; |
позволяет узнать время работы самого процесса, ведь оно может и отличаться от времени вычисляемом в примере Гоулд_Дримера, т.е. оно будет <=. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
|