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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить что комп простаивает? 
:(
    Опции темы
Ch0bits
Дата 7.8.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Как определить что компьютер простаивает? Т.е. определенное время не двигается мышь и не нажимаются клавиши?
Если ли стандартные решения или функции API. Как винда это делает когда включает скринсейвер?
PM WWW   Вверх
MetalFan
Дата 7.8.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



поставить хук на клаву и мышу. при срабатывании запоминать время. по таймеру сравнивать последнее запомненное и текущее.


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


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Ставить хуки занятие неблагодарное и чреватое проблемами.
Может быть существуют альтернативные решения?
PM WWW   Вверх
Snowy
Дата 7.8.2007, 12:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код
var
  LastInput:   TLastInputInfo;
begin
  LastInput.cbSize := SizeOf(LastInput);
  if GetLastInputInfo(LastInput) then
    if (GetTickCount - LastInput.dwTime) > 300000 then // 5 минут не видно юзера

PM MAIL   Вверх
MetalFan
Дата 7.8.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Ch0bits @  7.8.2007,  12:47 Найти цитируемый пост)
Ставить хуки занятие неблагодарное и чреватое проблемами.

фига се... а в микрософте то и не знают!
хотя Snowy гораздо более простое решение привел)


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


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Но я то знаю правду, что оценка постов это фигня, а настоящий плюс душу греет... Snowy +1  smile 

Цитата(MetalFan @  7.8.2007,  14:01 Найти цитируемый пост)
неоткажусь от (+)

Я сегодня добрый.  smile 

Это сообщение отредактировал(а) Ch0bits - 7.8.2007, 14:47
PM WWW   Вверх
MetalFan
Дата 7.8.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Ch0bits @  7.8.2007,  14:47 Найти цитируемый пост)
Я сегодня добрый.

спасиба конечно)

но про хуки ты зря так ;)


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


Эксперт
****


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

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



Цитата(MetalFan @  7.8.2007,  15:13 Найти цитируемый пост)
но про хуки ты зря так ;) 
он прав. а на мелкософте так делают потому что имеют причины делать обоснованные предположения о месте их хука в системной очереди хуков



--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 7.8.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(bems @  7.8.2007,  18:34 Найти цитируемый пост)
он прав.

доказательства?
ниразу не сталкивался с проблемами при использовании хуков)


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


Опытный
**


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

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



"Комп" - ка существо агрессивное не простаивает никогда - он всегда действует smile
А вот определить, что сейчас приложение не занимается обработкой сообщений, можно по срабатыванию OnIdle...


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
DBZ
Дата 7.8.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Заводим Интегер-переменную MsgCount. В WM_CREATE запустить таймер с интервалом скажем 200. Потом в цикле обработки сообщений 

// <- Я имею в виду здесь
case uMsg of
  WM_CREATE:
    begin
      ...
    end;

  WM_ACTIVATEAPP:
    begin
      ...
    end;

  WM_PAINT:
    begin
      ...
    end;

  WM_TIMER:
    begin
      ...
    end;

  ...

  WM_DESTROY:
    begin
      ...
    end;
end;

проставляем: if (uMsg<>WM_TIMER)and(и ещё <> какие-нибудь регулярные мессаги) then MsgCount:=0;

а при каждом срабатывании таймера увеличиваем эту вариаблу на 1.
Если она достигла определённой величины, то резюмируем - юзверь отошёл по делам...
Способ не претендует на замену всем остальным, просто ещё одно соображение в тему.
PM MAIL   Вверх
Snowy
Дата 7.8.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



DBZ, таймер будет работать независимо от того, есть юзер за компом или нет.
Вопрос вообще про определение активности юзера - клава/мыша.
Причём активности в системе, а не приложении.
PM MAIL   Вверх
MetalFan
Дата 7.8.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



мне кажется ответ на вопрос, заданный автором темы, уже дан Snowy  smile

Добавлено через 54 секунды
но мне всетаки хочется услышать весомые аргументы против использования хуков, как таковых....


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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(MetalFan @  7.8.2007,  22:45 Найти цитируемый пост)
но мне всетаки хочется услышать весомые аргументы против использования хуков, как таковых.... 

Лень smile Когда есть более элегантное решение предложеное Showy  smile  smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MetalFan
Дата 8.8.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Rennigth @  8.8.2007,  10:54 Найти цитируемый пост)
Когда есть более элегантное решение предложеное Showy

в данном случае да...

но мне интересно, почему
Цитата(Ch0bits @  7.8.2007,  12:47 Найти цитируемый пост)
Ставить хуки занятие неблагодарное и чреватое проблемами.

я так понимаю имелось ввиду использование хуков вообще.
новую тему чтоли завести



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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



MetalFan
Кстати интересно будет smile 

P.S. Я кстати с удовольствием бы послушал бы отзывы людей которые часто используют хуки в своих приложениях. Я их использовал, на клаву вроде и все... ну небыло ситуаций у меня когда без них никак. Хотя сейчас в текущей моей задаче наверное придется ставить на zwTerninateProcess...

P.S.S. Просто интересно на какие грабли ножно наступить, а если наступить, то не очень сильно удариться smile

Добавлено через 12 минут и 10 секунд
Кстати "по моему скромному мнению" было бы не плохо если кто-нибудь, кто шарит хорошо в этом написал бы статейку. Ну чтоб с бегемотами и т.д. smile Будет куда направлять новичков, а то многие начитаются статей ms-rem-а, а с проблемами и не пониманием идут сюда...


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MetalFan
Дата 8.8.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



хм) была как-то статейка "Хуки. Аспекты реализации" чтоли называлась) на DelphiWorld точно была,а может счас и в DRKB перенесли


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
W4FhLF
Дата 8.8.2007, 11:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



MetalFan, что ты так завёлся про хуки? Они отрицательно влияют на быстродействие. Не надо быть гением, чтобы понять это, просто надо представлять себе как это всё работает. 

Сами по себе хуки - это связный список. Вот как описывает схему работы Рихтер:

Цитата


1. Поток процесса В собирается направить сообщение какому-либо окну. 

2. Система проверяет, не установлена ли для данного потока ловушка WH_***. 

3. Затем выясняет, спроецирована ли DLL, содержащая функцию HookProc, на адресное пространство процесса В 

4. Если указанная DLL еще не спроецирована, система отображает ее на адресное пространство процесса В и увеличивает счетчик блокировок (lock count) проекции DLL в процессе В на 1 

5. Система проверяет, не совпадают ли значения hinstDll этой DLL, относящиеся к процессам А и В. Если hinstDll в обоих процессах одинаковы, то и адрес HookProc в этих процессах тоже одинаков. Тогда система может просто вызвать HookProc в адресном пространстве процесса А. Если же hinstDll различны, система определяет адрес функции HookProc в адресном пространстве процесса В по формуле: 

HookProc В = histDll В + (HookProc А - hinstDll А) 

Вычитая hinstDll из HookProc, Вы получаете смещение (в байтах) адреса функции GetMsgProc. Добавляя это смещение к hinstDll В, Вы получаете адрес HookProc, соответствующий проекции DLL в адресном пространстве процесса В 

6. Счетчик блокировок проекции DLL в процессе В увеличивается на 1. 

7. Вызывается HookProc в адресном пространстве процесса В. 

8. После возврата из HookProc счетчик блокировок проекции DLL в адресном пространстве процесса В уменьшается на 1.


Время выполнения 7го этапа напрямую зависит от быстродействия и объёма кода, который содержит твоя HookProc. Потеря быстродействия может быть и незаметна, а может прилично тормозить систему или вообще повешает её. В любом случае, глобальные хуки стоит использовать только при крайней необходимости, когда нет других решений. 

Это сообщение отредактировал(а) W4FhLF - 8.8.2007, 11:33


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
MetalFan
Дата 8.8.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(W4FhLF @  8.8.2007,  11:31 Найти цитируемый пост)
Время выполнения 7го этапа напрямую зависит от быстродействия и объёма кода, который содержит твоя HookProc.

в том то и дело, что если грамотно ее написать, то никаких проблем быть НЕ ДОЛЖНО.


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


Эксперт
****


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

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



Цитата(MetalFan @  8.8.2007,  11:51 Найти цитируемый пост)
в том то и дело, что если грамотно ее написать, то никаких проблем быть НЕ ДОЛЖНО. 
в том то и дело, что для отсутствия проблем нужно чтобы грамотно были написаны все хуки в системе, а не только твои. Ты никогда не знаешь будет ли у твоегог хука шанс среагировать на событие (не будет ли оно "обработано" более ранним хуком)



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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