Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hook когда окно стало активным и неактивным, отследить активность окна 
:(
    Опции темы
Clio
Дата 7.10.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 6.11.2007

Репутация: нет
Всего: нет



 Добрый день!
 
Мне надо в хуке отследить, когда  окно стало активным и когда потеряло активность.
Поставил хук ( WH_GETMESSAGE)
В обработчике пытаюсь отловить сообщение WM_ACTIVATE
Но что это сообщение не отлавливаеться

Вот пример кода

Код

// функция обработчик
function GetMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
 Result := CallNextHookEx(SysHook, Code, wParam, lParam);
//Проверяю сообщение
 if code = HC_ACTION then
  begin
    if TMsg(Pointer(lParam)^).message = WM_ACTIVATE  then
    begin
      // здесь должна происходить обработка  сообщения, но сюда не попадаем

    end
end
...

// устанавливаем хук
 SysHook1 := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);

Подскажите,пожалуйста, что не так я делаю?
Или есть другие способы узнать какое окно стало активным и потеряло активность?

PM MAIL   Вверх
alexpotemkin
  Дата 7.10.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Следить откуда и за чьим окном?  
Своё же? или нет.

Возможно более простой вариант проверять по таймеру GetFocus. Но маловато подробностей за каким окном следить и откуда.
PM MAIL   Вверх
Clio
Дата 7.10.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 6.11.2007

Репутация: нет
Всего: нет



Хук устанавливается глобально.
В общем нужно отследить сколько времени запущенная любая программа была активна.
Хотел обрабатывать сообщение WM_ACTIVATE, т.к. по описанию оно приходит к 
окну которое теряет активность , а потом к окну ставшему активным.
Но почему то сообщение это не приходит.
PM MAIL   Вверх
alexpotemkin
  Дата 12.10.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Попробуй покапать еще в направлении Microsoft Active Accessibility и отслеживания событий, тоже  хорошая тема и достаточно озвучена в текстах.
Я не совсем красиво ловил окно, но там особой точности и не требовалось, по таймеру отслеживал GetFocus и наличие процесса связанного с окном. Задача ставилась только поймать момент появления окна.

это по хукам
http://www.experts-exchange.com/Programmin...Q_24302496.html
http://msdn.microsoft.com/en-us/library/ms997537.aspx
http://www.swissdelphicenter.ch/torry/showcode.php?id=1212

Это сообщение отредактировал(а) alexpotemkin - 12.10.2009, 10:46
PM MAIL   Вверх
MetalFan
Дата 12.10.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



почему нет проверки на корректность возвращаемого значение SetWindowsHookEx? чему равен SysHookl?
функция-обработчик описана в DLL или в приложении?

Добавлено через 12 минут и 32 секунды
1. если функция хука находится не в dll, то она никогда не сработает при такой записи.
2. почему бы автору не воспользоваться хуком WH_CBT с отслеживанием HCBT_ACTIVATE в lParam?
Цитата(MSDN)
The system calls this function before activating, creating, destroying, minimizing, maximizing, moving, or sizing a window; before completing a system command; before removing a mouse or keyboard event from the system message queue; before setting the keyboard focus; or before synchronizing with the system message queue.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
pro100Bond
Дата 17.10.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



Цитата(Clio @ 7.10.2009,  12:13)
Хук устанавливается глобально.
В общем нужно отследить сколько времени запущенная любая программа была активна.
Хотел обрабатывать сообщение WM_ACTIVATE, т.к. по описанию оно приходит к 
окну которое теряет активность , а потом к окну ставшему активным.
Но почему то сообщение это не приходит.

Есть книжица за авторством М. Фленова, завеца книжица "Программирование в Delphi глазами хакер". В это книге есть пример кода который тебя интересует. Нельзя сказать что код идеален, но работу свою делает. Во вложении код библиотеки с системным хуком CBT.

P.S. MSDN конечно рулит, но советую заглянуть и сюда --> RSDN.RU, почитать старые статьи, задать интересующий вопрос.

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  W1N.dpr 2,68 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.