Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Сколько времени программа "существовала" в системе


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Anatoly_71
Гость







СообщениеВт, 08-Ноя-2005 16:44    Заголовок сообщения: Сколько времени программа "существовала" в системе
Цитата

Привет !

1. Есть ли в системных библиотеках Дельфи функция позволяющая узнать как долго "существовала" в системе определенная программа?

2. Какая фукция (АПИ) Виндоус позволяет это сделать?
В начало
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеВт, 08-Ноя-2005 22:26 
Цитата

скорее всего нет, несли ты имеешь ввиду узнать время работы уже закрытого приложения.
хотя это приложение может в events винды писать сообщения о старте\стопе.

есле же сам запускаешь приложение, то это легко, через WaitForSingleObject кажется
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 09-Ноя-2005 3:19 
Цитата

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


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 09-Ноя-2005 5:55 
Цитата

to dogma
имеется в виду использование этой функции в следящем приложении, ну т.е. открываем хендл процесса и - WaitForSingleObject до тех пор пока он не завершится.

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 09-Ноя-2005 8:35 
Цитата

А можно заюзать GetProcessTimes?
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 09-Ноя-2005 8:38 
Цитата

Можно, до тех пор пока процесс жив :)
_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Gold_Dreamer
Гость







СообщениеСр, 09-Ноя-2005 10:44 
Цитата

А можно в FormCreate заставить прогу написать в реестре время создания, а в FormDestroy все подсчитать и вывести сообщение =)
В начало
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеСр, 09-Ноя-2005 19:34 
Цитата

легче сразу посылать сообщения при старте и при окончании, а в следящеё проге их обрабатывать. при условии что две проги твои.
В начало
Посмотреть профиль Отправить личное сообщение
Anatoly_71
Гость







СообщениеПт, 11-Ноя-2005 16:10 
Цитата

Спасибо за ответы!

Хочу уточнить, что мне в самой программе нужно узнать как долго она "существовала".
В начало
Gold_Dreamer
Гость







СообщениеПт, 11-Ноя-2005 18:45 
Цитата

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

СообщениеПт, 11-Ноя-2005 19:36 
Цитата

ещё можно GetAtom AddAtom )))
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСб, 12-Ноя-2005 10:22 
Цитата

Цитата:
Хочу уточнить, что мне в самой программе нужно узнать как долго она "существовала".

для этого не надо никаких атомов, никаких записей в реестр.
процесс сам "знает" время своего запуска.
Код:
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

СообщениеСб, 12-Ноя-2005 19:21 
Цитата

блин, как всегда, колесо уже изобрели.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеПн, 14-Ноя-2005 2:58 
Цитата

Причем
Цитата:
Код:
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)
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100