Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оценить сколько времени простаивает машина [D7, WinXP]


Страницы:   1 2

Dymok ©   (2008-10-15 16:19:00) 

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


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

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


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


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

Alex22   (15.07.09 22:11) [32]

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


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

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


  (2009-07-06 05:38:00) [4]

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


Anatoly Podgoretsky   (2008-10-28 19:21:00) [5]

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

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


Riply   (2008-10-28 13:45:00) [6]

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

см. [28] Anatoly Podgoretsky :)

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


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

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

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

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


han_malign   (2008-10-28 11:28:00) [8]

HKEY_PERFORMANCE_DATA


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


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


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


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


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


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


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


WH_KEYBOARD_LL = 13
WH_MOUSE_LL = 14

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


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


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


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


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


Это не тот пример.
Ищи пример для WH_ LL_KEYBOARD и WH_ LL_MOUSE


Riply   (2008-10-27 18:03:00) [13]

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

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


clickmaker   (2008-10-27 17:43:00) [14]

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

а потом появляются такие темы:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1224709773


dymok   (2008-10-27 17:26:00) [15]

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


В чем ошибка?


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


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


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


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


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

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


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

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


dymok   (2008-10-15 17:37:00) [19]


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

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


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

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

Мда ..

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо