Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.17;
Скачать: CL | DM;

Вниз

Оценить сколько времени простаивает машина   Найти похожие ветки 

 
Dymok ©   (2008-10-15 16:19) [0]

Задача: Оценить сколько времени простаивает машина у пользователя.
Например Windows по истечении некоторого заданного времени простоя запускает заставку/ спящий режим
Если машина простаивает например больше 10 минут то отследить через сколько завершится временя простоя и по этому событию сделать например запись в базу данных.
Приложениие должно быть в виде службы
Как отследить простой машины?


 
Сергей М. ©   (2008-10-15 16:24) [1]

Стесняюсь спросить, а нафига все это ?
Т.е. какую практическую ценность принесет реализация всего этого ?


 
Dymok ©   (2008-10-15 16:40) [2]

А чего стесняться-то? здесь все свои, дело то житейское..
Покупаем компы в организации, устанавливаем. А потом оказывается что половину времени он стоит без движения. Юсер пришел на работу, включил и потом занялся еще чем-то своим. Т.е. комп ему по сути и не был нужен.
Вывод: отобрать и отдать нуждающимся.


 
KSergey ©   (2008-10-15 16:44) [3]

Можно и просто отобрать.
Неужели нужно обоснование?!!

потом от другого будет вопрос: как имитировать использование компа.
Бред


 
Сергей М. ©   (2008-10-15 16:46) [4]

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

И зачем нужно что-то писать, если достаточно установить скринсейвер с запароленым выходом из спячки ? Юзер сам прибежит, мол, чевой-то такое у меня, что еще за пароль от меня требуют).. И шпионить за ним не надо - вот он, сачок, сам явился на поклон)


 
dymok ©   (2008-10-15 16:51) [5]

В некотором смысле да, слегка бредово. Но вот руководство ставит такие задачи, а ему виднее..
Сразу отдать комп нельзя - нужен не нужен - просят  многие, почти все.
а вот используют... как зря...


 
dymok ©   (2008-10-15 16:53) [6]

Если просто скрин поставить то пользователи и нагрянут все толпой через 10 минут. А нужно оценить суммарное время простоя.


 
Сергей М. ©   (2008-10-15 16:58) [7]

Т.е. твое руководство свято верит в то, что исправное выполнение сотрудником трудовых обязанностей, связанных с использованием компа, сводится к регулярному, не реже установленного интервала времени, мышеелозанью и клаводавлению ?)


 
Сергей М. ©   (2008-10-15 17:02) [8]


> Если просто скрин поставить то пользователи и нагрянут все
> толпой через 10 минут


Так вот же они, бездельники !)
Сразу появляется веское основание вытолкать всех их в шею)
Тогда мож и компы зря были куплены ?


> нужно оценить суммарное время простоя


Тоже не проблема)
Выдаешь юзеру пароль к скринсейверу, а скринсейвер настраиваешь на запись о своем состоянии в AppEvents-лог.


 
dymok ©   (2008-10-15 17:05) [9]

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


 
Сергей М. ©   (2008-10-15 17:10) [10]

Ну хорошо. Начальству в зад не заглядывают)

А подробную и внятную формулировку термина "простой машины" руководство тебе представило ?

От нее и плясать ведь надо ..


 
dymok ©   (2008-10-15 17:23) [11]

Как тебе такая формулировка
1-ый шаг: пользователь включил машину - служба запустилась, сделала например запись в некоторую базу данных (или лог-файл).
2 -ой шаг:  Допустим пользователь не прикасался к клавиатуре/мыши 20 минут (некоторое задаваемое критическое время), с этого момента пошел отсчет простоя. Отсчет до тех пор, пока он вновь не коснулся клавиатуры. По последнему событию вновь запись, дескать с 8-20 до, предположим,  10 часов машина не использовалась.


 
dymok ©   (2008-10-15 17:23) [12]

Как тебе такая формулировка
1-ый шаг: пользователь включил машину - служба запустилась, сделала например запись в некоторую базу данных (или лог-файл).
2 -ой шаг:  Допустим пользователь не прикасался к клавиатуре/мыши 20 минут (некоторое задаваемое критическое время), с этого момента пошел отсчет простоя. Отсчет до тех пор, пока он вновь не коснулся клавиатуры. По последнему событию вновь запись, дескать с 8-20 до, предположим,  10 часов машина не использовалась.


 
Anatoly Podgoretsky ©   (2008-10-15 17:29) [13]

> Сергей М.  (15.10.2008 16:46:04)  [4]

А кризис безработицы, если не защищать свое рабочее место, то возможно фирма в нем не будет нуждаться.


 
Anatoly Podgoretsky ©   (2008-10-15 17:30) [14]

> dymok  (15.10.2008 16:51:05)  [5]

Машина может не простаивать, а вот пользы может быть еще меньше.
Следующий вопрос, тарифицирование по запущеным программам.


 
Сергей М. ©   (2008-10-15 17:35) [15]

Т.е. вовремя тыкнул клаву, двинул мышь - значит, работает в поте лица ?)

Мда ..

Ну самое простое - поставить хуки WH_LL_KEYBOARD, WH_LL_MOUSE.
Пляши от SetWindowsHookEx.


 
dymok ©   (2008-10-15 17:37) [16]


> Anatoly Podgoretsky ©   (15.10.08 17:30) [14]

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


 
Германн ©   (2008-10-15 17:39) [17]

<offtop>
Уж новый век давно пошёл, а геркулесовцы всё еще борются за помещение бывш. гостиницы "Каир". А без компьютеров нынче трудно. :)
</offtop>


 
dymok ©   (2008-10-15 17:57) [18]


> Сергей М. ©   (15.10.08 17:35) [15]
самое простое - поставить хуки WH_LL_KEYBOARD,
>  WH_LL_MOUSE.Пляши от SetWindowsHookEx.

А какой-нибудь пример использования/описание этих "хуков"?


 
Сергей М. ©   (2008-10-15 19:40) [19]


> А какой-нибудь пример


В Тырнете их как грязи


 
dymok ©   (2008-10-27 17:26) [20]

Нашел пример хука (должен отлавливать нажатия клавиш + и -), но при запуске 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.


В чем ошибка?


 
clickmaker ©   (2008-10-27 17:43) [21]

> В некотором смысле да, слегка бредово. Но вот руководство
> ставит такие задачи, а ему виднее..

а потом появляются такие темы:
http://delphimaster.net/view/15-1224709773/


 
Riply ©   (2008-10-27 18:03) [22]

> [20] dymok ©   (27.10.08 17:26)
> Нашел пример хука (должен отлавливать нажатия клавиш + и -), но при запуске Project1.exe выдаёт ошибку:
> Ошибка при инициализации приложения (0xc000007b). Для выхода из приложения нажмите кнопку "ОК"

1. А почему не воспользоваться GetLastInputInfo ? (писала по памяти - возможны ошибки)
2. А не кажется ли Вашему начальству, что после установки вот таких вот программ на
  каждый компьютер и начнутся настоящие простои ?  :)


 
Сергей М. ©   (2008-10-28 09:39) [23]


> Нашел пример хука


Это не тот пример.
Ищи пример для WH_LL_KEYBOARD и WH_LL_MOUSE


 
dymok ©   (2008-10-28 11:02) [24]


> clickmaker ©   (27.10.08 17:43) [21]
а потом появляются
> такие темы:http://delphimaster.net/view/15-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. Где их искать то?


 
Сергей М. ©   (2008-10-28 11:21) [25]


> В модуле Windows.pas вообще отсутствуют эти LL


Потому что писан он был еще во времена Win9x/Me, где LL-хуков не было.


> Где их искать то?


WH_KEYBOARD_LL = 13
WH_MOUSE_LL = 14

Реализация хука в отдельном dll-модуле НЕ требуется


 
Сергей М. ©   (2008-10-28 11:26) [26]


> dymok ©   (28.10.08 11:02) [24]


Плясать отсюда:
http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx


 
han_malign ©   (2008-10-28 11:28) [27]

HKEY_PERFORMANCE_DATA


 
Anatoly Podgoretsky ©   (2008-10-28 12:25) [28]

> dymok  (28.10.2008 11:02:24)  [24]

> 2) а почему начнутся простои? :)

Дело чести, обмануть железяку.


 
Riply ©   (2008-10-28 13:45) [29]

> [24] dymok ©   (28.10.08 11:02)
> а почему начнутся простои? :)

см. [28] Anatoly Podgoretsky :)

> Offtop
У нас, примерно год назад, внедряли что-то подобное.
Оно "вопросы спрашивало, надо было ответы отвечать" :)
Так вот, я почти день истратила на написание автоматической отвечалки :)
(Там перехват нужен был)
Как ты думаешь, этот день можно отнести к "простоям" ?
P.S.
Да еще и поделилась отвечалкой со своими знакомыми :)


 
Anatoly Podgoretsky ©   (2008-10-28 19:21) [30]

> Riply  (28.10.2008 13:45:29)  [29]

А против обычного простоя книгой борются, толстой.


 
имя   (2009-07-06 05:38) [31]

Удалено модератором


 
Alex22   (2009-07-15 22:11) [32]

http://www.delphisources.ru/pages/sources/raznoe/2008-year/idle-monitor.html


 
Игорь Шевченко ©   (2009-07-16 01:07) [33]

Alex22   (15.07.09 22:11) [32]

Ну хоть автора указали, и то хлеб. Хотя я этому сайту никаких прав на распространение не давал.


 
staticspb   (2009-07-31 01:49) [34]

function SecondsIdle: DWord;
var
 liInfo: TLastInputInfo;
begin
 liInfo.cbSize := SizeOf(TLastInputInfo) ;
 liInfo.dwTime
 GetLastInputInfo(liInfo) ;
 Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;


Всё уже придумано за вас :-D



Страницы: 1 вся ветка

Текущий архив: 2011.07.17;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.013 c
2-1301995221
Basilisk
2011-04-05 13:20
2011.07.17
Изменение цвета ячейки в StringGrid при заполнении таблицы


15-1301662575
ddd329
2011-04-01 16:56
2011.07.17
Delphi затребовал регистрацию


2-1302637050
AlekVolsk
2011-04-12 23:37
2011.07.17
AnsiString to String в DelphiXE


15-1300669083
Германн
2011-03-21 03:58
2011.07.17
Ищу что-то типа SVN, но не для разработчиков, а для тестировщиков


15-1302074023
Sergey
2011-04-06 11:13
2011.07.17
График на делфи!