Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.004 c
15-1301922483
OW
2011-04-04 17:08
2011.07.17
Как можно облажаться в коде


11-1235129408
DonJad
2009-02-20 14:30
2011.07.17
KOL размер приложения в оперативной памяти


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


1-1258987492
Diplomat
2009-11-23 17:44
2011.07.17
Удалить сведения об ранее подключенных устройствах


1-1260357382
ther
2009-12-09 14:16
2011.07.17
TChart и табличка вверху





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский