Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 01:44   #1
SamuraiPro
 
Регистрация: 24.06.2008
Сообщений: 9
По умолчанию Узнать время существования окна

Здравствуйте, пишу программу которая бы выводила список запущенных на ПК приложений и время их запуска. Ну запущенные приложения я находил c помощью GetWindow() и фильтровал окна что бы выбрать именно те что надо (что бы было родительское, видимое и имело заголовок) после чего читал заголовок окна GetWindowText() и заносил его в список. Подскажите как можно узнать время создания окна либо время его жизни?
SamuraiPro вне форума Ответить с цитированием
Старый 17.12.2009, 07:56   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Если просто нужна такая программа, то ищи Process Explorer .

Если все же хочешь писать, то по окно находи процесс и смотри инфу по процессу.
Д'якон вне форума Ответить с цитированием
Старый 18.12.2009, 02:59   #3
SamuraiPro
 
Регистрация: 24.06.2008
Сообщений: 9
По умолчанию

Узнал ID процесса по окну, но для того что бы узнать время его запуска нужно знать HANDLE процесса, пробую получить его с помощю OpenProcess, но функция всегда возврщает NULL, в чем ошибка? Что не так? Вот код:

Код:
HWND vWindow; 
/* тут идет код получение окна, он корректен, поэтому он пропущен */
  bool B ;
           DWORD ProID;
           ProID=GetWindowThreadProcessId(vWindow, NULL);
           // Application->MessageBox(IntToStr(ProID).c_str(),"!",MB_OK);
           FILETIME *X,*B1,*B2,*B3;
           HANDLE HP;
           LPSYSTEMTIME TIMEI;
           // Опен процесс возвращает NULL , почему и что делать? 
           HP=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProID);
           B=GetProcessTimes(HP,X,B1,B2,B3);
           CloseHandle(HP);
           // Application->MessageBox(IntToStr(X).c_str(),"!",MB_OK);
           B=FileTimeToSystemTime(X, TIMEI);
SamuraiPro вне форума Ответить с цитированием
Старый 18.12.2009, 03:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

напомню что время процесса и время окна это разные вещи
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2009, 03:18   #5
SamuraiPro
 
Регистрация: 24.06.2008
Сообщений: 9
По умолчанию

Опа, значит по ложному пути пошел...:'( Молю, помощи!! Как получить время окна?!
SamuraiPro вне форума Ответить с цитированием
Старый 18.12.2009, 03:26   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в принципе для некоторых окон оно совпадает, но я не уверен что винда вообще хранит время появления окна(создания)
только если самому выловить момент создания(хук на WM_CREATE например)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2009, 03:39   #7
SamuraiPro
 
Регистрация: 24.06.2008
Сообщений: 9
По умолчанию

Ладно, а в чем ошибка получения времени процесса (его хендла) не подскажите? Либо может возможно получить только по ID процессу не используя его хендл?
SamuraiPro вне форума Ответить с цитированием
Старый 18.12.2009, 03:55   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а если так:
Код:
HP=OpenProcess(PROCESS_QUERY_INFORMATION,false,ProID);
мой вам совет, не завышайте права доступа. используйте минимально возможные(в справке к функциям есть описание нужных прав, для работы)


кстати...
Цитата:
пишу программу которая бы выводила список запущенных на ПК приложений и время их запуска.
а причем здесь окна??
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 18.12.2009 в 04:00.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2009, 04:42   #9
SamuraiPro
 
Регистрация: 24.06.2008
Сообщений: 9
По умолчанию

Цитата:
HP=OpenProcess(PROCESS_QUERY_INFORM ATION,false,ProID);
Не, не помогло, всеравно NULL

Цитата:
а причем здесь окна??
Ну я искал список запущенных приложений по окнам ( должно выглядеть по типу Диспетчера приложений виндошного только с временем запуска.

Вот как ищу запущенные приложения по окнам:

Код:
vWindow=GetWindow(Handle, GW_HWNDFIRST);
while (vWindow!=0)      // пока дискриптор не будет нулевым (он будет нулевым когда все окна будут найдены)
{
if ((GetWindow(vWindow, GW_OWNER) == 0)&&// Отбор только для родитеьских окон
    (IsWindowVisible(vWindow))&&            // Отбор только видимых
    ((GetWindowText(vWindow, Buff, sizeof(Buff))!=0)) )  // Отбор только тех что имееют заголовок
        {
          GetWindowText(vWindow,Buff,sizeof(Buff));   // Получаем информацию об окне
......
// Дальше пытаюсь получить время процесса ....
SamuraiPro вне форума Ответить с цитированием
Старый 18.12.2009, 05:00   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

GetLastError пробывали?
что говорит?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать HWND окна Ilshat89 Общие вопросы C/C++ 3 01.09.2009 22:30
Как узнать state окна? TwiX Общие вопросы Delphi 2 03.08.2009 02:46
Как программно узнать время? Bigtyoma Общие вопросы Delphi 4 15.03.2009 05:38
Необходимо узнать о создании окна Alar Win Api 10 23.11.2007 19:33
проверка существования окна Shade Win Api 3 22.07.2007 17:56