-
Задача: Оценить сколько времени простаивает машина у пользователя. Например Windows по истечении некоторого заданного времени простоя запускает заставку/ спящий режим Если машина простаивает например больше 10 минут то отследить через сколько завершится временя простоя и по этому событию сделать например запись в базу данных. Приложениие должно быть в виде службы Как отследить простой машины?
-
Стесняюсь спросить, а нафига все это ? Т.е. какую практическую ценность принесет реализация всего этого ?
-
А чего стесняться-то? здесь все свои, дело то житейское.. Покупаем компы в организации, устанавливаем. А потом оказывается что половину времени он стоит без движения. Юсер пришел на работу, включил и потом занялся еще чем-то своим. Т.е. комп ему по сути и не был нужен. Вывод: отобрать и отдать нуждающимся.
-
Можно и просто отобрать. Неужели нужно обоснование?!!
потом от другого будет вопрос: как имитировать использование компа. Бред
-
А нельзя ли комп отдать сразу тому кто действительно в нем нуждается ?)
И зачем нужно что-то писать, если достаточно установить скринсейвер с запароленым выходом из спячки ? Юзер сам прибежит, мол, чевой-то такое у меня, что еще за пароль от меня требуют).. И шпионить за ним не надо - вот он, сачок, сам явился на поклон)
-
В некотором смысле да, слегка бредово. Но вот руководство ставит такие задачи, а ему виднее.. Сразу отдать комп нельзя - нужен не нужен - просят многие, почти все. а вот используют... как зря...
-
Если просто скрин поставить то пользователи и нагрянут все толпой через 10 минут. А нужно оценить суммарное время простоя.
-
Т.е. твое руководство свято верит в то, что исправное выполнение сотрудником трудовых обязанностей, связанных с использованием компа, сводится к регулярному, не реже установленного интервала времени, мышеелозанью и клаводавлению ?)
-
> Если просто скрин поставить то пользователи и нагрянут все > толпой через 10 минут
Так вот же они, бездельники !) Сразу появляется веское основание вытолкать всех их в шею) Тогда мож и компы зря были куплены ?
> нужно оценить суммарное время простоя
Тоже не проблема) Выдаешь юзеру пароль к скринсейверу, а скринсейвер настраиваешь на запись о своем состоянии в AppEvents-лог.
-
ну вот есть у них такая идея, что ж теперь делать... хотелось бы все таки не обсуждать руководство, бог с ним, а узнать можно ли это оценить это время Наверняка ведь можно...
-
Ну хорошо. Начальству в зад не заглядывают)
А подробную и внятную формулировку термина "простой машины" руководство тебе представило ?
От нее и плясать ведь надо ..
-
Как тебе такая формулировка 1-ый шаг: пользователь включил машину - служба запустилась, сделала например запись в некоторую базу данных (или лог-файл). 2 -ой шаг: Допустим пользователь не прикасался к клавиатуре/мыши 20 минут (некоторое задаваемое критическое время), с этого момента пошел отсчет простоя. Отсчет до тех пор, пока он вновь не коснулся клавиатуры. По последнему событию вновь запись, дескать с 8-20 до, предположим, 10 часов машина не использовалась.
-
Как тебе такая формулировка 1-ый шаг: пользователь включил машину - служба запустилась, сделала например запись в некоторую базу данных (или лог-файл). 2 -ой шаг: Допустим пользователь не прикасался к клавиатуре/мыши 20 минут (некоторое задаваемое критическое время), с этого момента пошел отсчет простоя. Отсчет до тех пор, пока он вновь не коснулся клавиатуры. По последнему событию вновь запись, дескать с 8-20 до, предположим, 10 часов машина не использовалась.
-
> Сергей М. (15.10.2008 16:46:04) [4]
А кризис безработицы, если не защищать свое рабочее место, то возможно фирма в нем не будет нуждаться.
-
> dymok (15.10.2008 16:51:05) [5]
Машина может не простаивать, а вот пользы может быть еще меньше. Следующий вопрос, тарифицирование по запущеным программам.
-
Т.е. вовремя тыкнул клаву, двинул мышь - значит, работает в поте лица ?)
Мда ..
Ну самое простое - поставить хуки WH_LL_KEYBOARD, WH_LL_MOUSE. Пляши от SetWindowsHookEx.
-
> Anatoly Podgoretsky © (15.10.08 17:30) [14]
Да, время от времени список запущенных программ получать - вообще было бы круто.
-
<offtop> Уж новый век давно пошёл, а геркулесовцы всё еще борются за помещение бывш. гостиницы "Каир". А без компьютеров нынче трудно. :) </offtop>
-
> Сергей М. © (15.10.08 17:35) [15] самое простое - поставить хуки WH_LL_KEYBOARD, > WH_LL_MOUSE.Пляши от SetWindowsHookEx.
А какой-нибудь пример использования/описание этих "хуков"?
-
> А какой-нибудь пример
В Тырнете их как грязи
-
Нашел пример хука (должен отлавливать нажатия клавиш + и -), но при запуске Project1.exe выдаёт ошибку: Ошибка при инициализации приложения (0xc000007b). Для выхода из приложения нажмите кнопку "ОК"
Текст модулей следующий:
library lib;
uses WinTypes, WinProcs, Messages;
const {пользовательские сообщения} wm_NextShow_Event = wm_User + 133; wm_PrevShow_Event = wm_User + 134; {handle для ловушки} //HookHandle: hHook = 0;
var SaveExitProc : Pointer; HookHandle: hHook = 0; {собственно ловушка} function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint; export; var H: HWND; begin {если Code>=0, то ловушка может обpаботать событие} if Code >= 0 then begin {это те клавиши?} if ((wParam = VK_ADD)or(wParam = VK_SUBTRACT)) and (lParam and $40000000 = 0) then begin {ищем окно по имени класса и по заголовку} H := FindWindow('TForm1', 'XXX'); {посылаем сообщение} if wParam = VK_ADD then SendMessage(H, wm_NextShow_Event, 0, 0) else SendMessage(H, wm_PrevShow_Event, 0, 0); end; {если 0, то система должна дальше обpаботать это событие} {если 1 - нет} Result:=0; end else {если Code<0, то нужно вызвать следующую ловушку} Result := CallNextHookEx(HookHandle,Code, wParam, lParam); end;
{пpи выгpузке DLL надо снять ловушку} procedure LocalExitProc; far; begin if HookHandle<>0 then begin UnhookWindowsHookEx(HookHandle); ExitProc := SaveExitProc; end; end;
{инициализация DLL пpи загpузке ее в память} begin {устанавливаем ловушку} HookHandle := SetWindowsHookEx(wh_Keyboard, Key_Hook, hInstance, 0); if HookHandle = 0 then MessageBox(0, 'Unable to set hook!', 'Error', mb_Ok) else begin SaveExitProc := ExitProc; ExitProc := @LocalExitProc; end; end.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const wm_NextShow_Event = wm_User + 133; wm_PrevShow_Event = wm_User + 134;
type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormCreate(Sender: TObject); private { Private declarations } procedure WM_NextMSG (Var M : TMessage); message wm_NextShow_Event; procedure WM_PrevMSG (Var M : TMessage); message wm_PrevShow_Event; public { Public declarations } end;
var Form1: TForm1; P : Pointer; implementation
{$R *.dfm} function Key_Hook : Longint; far; external 'lib.dll';
procedure TForm1.FormCreate(Sender: TObject); begin
P:=@Key_Hook; end;
procedure TForm1.WM_NextMSG(var M: TMessage); begin Label1.Caption:='Next message'; end;
procedure TForm1.WM_PrevMSG(var M: TMessage); begin Label1.Caption:='Previous message'; end;
end.
В чем ошибка?
-
-
> [20] dymok © (27.10.08 17:26) > Нашел пример хука (должен отлавливать нажатия клавиш + и -), но при запуске Project1.exe выдаёт ошибку: > Ошибка при инициализации приложения (0xc000007b). Для выхода из приложения нажмите кнопку "ОК"
1. А почему не воспользоваться GetLastInputInfo ? (писала по памяти - возможны ошибки) 2. А не кажется ли Вашему начальству, что после установки вот таких вот программ на каждый компьютер и начнутся настоящие простои ? :)
-
> Нашел пример хука
Это не тот пример. Ищи пример для WH_LL_KEYBOARD и WH_LL_MOUSE
-
> clickmaker © (27.10.08 17:43) [21] а потом появляются > такие темы:http://pda.delphimaster.net/?n=3&id=1224709773
Не вижу никаких аналогий. Но на всякий случай, я работаю на отечественном машиностроительном предприятии. Решаемая сейчас задача - каприз руководства. До этого все написанные проекты немного другие и связаны с Oracle+Delphi.
> Riply © (27.10.08 18:03) [22]
> А почему не воспользоваться GetLastInputInfo? 2. А не кажется ли Вашему начальству, что после установки вот таких вот программ на каждый компьютер и начнутся настоящие простои ? :)
1)А действительно, почему бы не использовать GetLastInputInfo? Как это мне никто раньше не подсказал эту апишку. Особенно если загнать ее в службу, а? Сейчас попробую. А то уже голову сломал с этими хуками :) 2) а почему начнутся простои? :)
> Сергей М. © (28.10.08 09:39) [23] Это не тот пример.Ищи пример для WH_LL_KEYBOARD и WH_LL_MOUSE
В модуле Windows.pas вообще отсутствуют эти LL, есть только обычные WH_KEYBOARD и WH_MOUSE. Где их искать то?
-
> В модуле Windows.pas вообще отсутствуют эти LL
Потому что писан он был еще во времена Win9x/Me, где LL-хуков не было.
> Где их искать то?
WH_KEYBOARD_LL = 13 WH_MOUSE_LL = 14
Реализация хука в отдельном dll-модуле НЕ требуется
-
-
HKEY_PERFORMANCE_DATA
-
> dymok (28.10.2008 11:02:24) [24]
> 2) а почему начнутся простои? :)
Дело чести, обмануть железяку.
-
> [24] dymok © (28.10.08 11:02) > а почему начнутся простои? :)
см. [28] Anatoly Podgoretsky :)
> Offtop У нас, примерно год назад, внедряли что-то подобное. Оно "вопросы спрашивало, надо было ответы отвечать" :) Так вот, я почти день истратила на написание автоматической отвечалки :) (Там перехват нужен был) Как ты думаешь, этот день можно отнести к "простоям" ? P.S. Да еще и поделилась отвечалкой со своими знакомыми :)
-
> Riply (28.10.2008 13:45:29) [29]
А против обычного простоя книгой борются, толстой.
-
Удалено модератором
-
-
Alex22 (15.07.09 22:11) [32]
Ну хоть автора указали, и то хлеб. Хотя я этому сайту никаких прав на распространение не давал.
-
function SecondsIdle: DWord;
var
liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo) ;
liInfo.dwTime
GetLastInputInfo(liInfo) ;
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;
Всё уже придумано за вас :-D
|