| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Как определить что комп простаивает? |
| Автор: Ch0bits 7.8.2007, 11:53 |
| Как определить что компьютер простаивает? Т.е. определенное время не двигается мышь и не нажимаются клавиши? Если ли стандартные решения или функции API. Как винда это делает когда включает скринсейвер? |
| Автор: MetalFan 7.8.2007, 12:09 |
| поставить хук на клаву и мышу. при срабатывании запоминать время. по таймеру сравнивать последнее запомненное и текущее. |
| Автор: Ch0bits 7.8.2007, 12:47 |
| Ставить хуки занятие неблагодарное и чреватое проблемами. Может быть существуют альтернативные решения? |
| Автор: Snowy 7.8.2007, 12:56 | ||
|
| Автор: MetalFan 7.8.2007, 13:01 |
фига се... а в микрософте то и не знают! хотя Snowy гораздо более простое решение привел) |
| Автор: Ch0bits 7.8.2007, 14:47 |
| Но я то знаю правду, что оценка постов это фигня, а настоящий плюс душу греет... Snowy +1 Я сегодня добрый. |
| Автор: MetalFan 7.8.2007, 15:13 |
спасиба конечно) но про хуки ты зря так ;) |
| Автор: bems 7.8.2007, 18:34 |
| он прав. а на мелкософте так делают потому что имеют причины делать обоснованные предположения о месте их хука в системной очереди хуков |
| Автор: MetalFan 7.8.2007, 18:59 |
доказательства? ниразу не сталкивался с проблемами при использовании хуков) |
| Автор: Rouse_ 7.8.2007, 21:58 |
| "Комп" - ка существо агрессивное не простаивает никогда - он всегда действует А вот определить, что сейчас приложение не занимается обработкой сообщений, можно по срабатыванию OnIdle... |
| Автор: DBZ 7.8.2007, 22:15 |
| Заводим Интегер-переменную 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. Если она достигла определённой величины, то резюмируем - юзверь отошёл по делам... Способ не претендует на замену всем остальным, просто ещё одно соображение в тему. |
| Автор: Snowy 7.8.2007, 22:29 |
| DBZ, таймер будет работать независимо от того, есть юзер за компом или нет. Вопрос вообще про определение активности юзера - клава/мыша. Причём активности в системе, а не приложении. |
| Автор: MetalFan 7.8.2007, 22:45 |
| мне кажется ответ на вопрос, заданный автором темы, http://forum.vingrad.ru/index.php?showtopic=167187&view=findpost&p=1218980 Snowy Добавлено через 54 секунды но мне всетаки хочется услышать весомые аргументы против использования хуков, как таковых.... |
| Автор: MetalFan 8.8.2007, 11:03 |
в данном случае да... но мне интересно, почему я так понимаю имелось ввиду использование хуков вообще. новую тему чтоли завести |
| Автор: Rennigth 8.8.2007, 11:11 |
| MetalFan, Кстати интересно будет P.S. Я кстати с удовольствием бы послушал бы отзывы людей которые часто используют хуки в своих приложениях. Я их использовал, на клаву вроде и все... ну небыло ситуаций у меня когда без них никак. Хотя сейчас в текущей моей задаче наверное придется ставить на zwTerninateProcess... P.S.S. Просто интересно на какие грабли ножно наступить, а если наступить, то не очень сильно удариться Добавлено через 12 минут и 10 секунд Кстати "по моему скромному мнению" было бы не плохо если кто-нибудь, кто шарит хорошо в этом написал бы статейку. Ну чтоб с бегемотами и т.д. |
| Автор: MetalFan 8.8.2007, 11:28 |
| хм) была как-то статейка "Хуки. Аспекты реализации" чтоли называлась) на DelphiWorld точно была,а может счас и в DRKB перенесли |
| Автор: W4FhLF 8.8.2007, 11:31 | ||
| MetalFan, что ты так завёлся про хуки? Они отрицательно влияют на быстродействие. Не надо быть гением, чтобы понять это, просто надо представлять себе как это всё работает. Сами по себе хуки - это связный список. Вот как описывает схему работы Рихтер:
Время выполнения 7го этапа напрямую зависит от быстродействия и объёма кода, который содержит твоя HookProc. Потеря быстродействия может быть и незаметна, а может прилично тормозить систему или вообще повешает её. В любом случае, глобальные хуки стоит использовать только при крайней необходимости, когда нет других решений. |
| Автор: MetalFan 8.8.2007, 11:51 | ||
в том то и дело, что если грамотно ее написать, то никаких проблем быть НЕ ДОЛЖНО. |
| Автор: bems 8.8.2007, 15:56 | ||
|