Форум: "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