Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неактивность пользователя, как определить 
:(
    Опции темы
kostas
  Дата 5.9.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Приветствую всех!

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

Это сообщение отредактировал(а) kostas - 6.9.2006, 18:13
PM ICQ   Вверх
DemoCode
Дата 5.9.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Как вариант регистрировать время последних поступивших сообщений от мыши и клавиатуры.


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Alexeis
Дата 5.9.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Только не стоит регистрировать перемещения мыши, так как это нельзя назвать активностью, кроме того оптические мыши иногда сами дергают курсор +- несколько пикселей.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
DemoCode
Дата 5.9.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата(kostas @  5.9.2006,  18:06 Найти цитируемый пост)
Необходимо при неактивности пользователя (т.е. когда программа запущена, но не выполняется никаких действий) в течение некоторого времени (задается) заблокировать программу паролем. Так вот вопрос в том, как можно отследить эту самую неактивность наилучшим образом? 


Если не принципиально, простой именно твоей программы или всей системы, то начиная с двухтысячных виндов есть функция GetLastInputInfo. С помощью приведенной ниже функции (не помню откудова я её взял) можно получить время, которое прошло с момента последней операции ввода (мышь, клавиатура и т.п.) в мсеках.

Код

function LastInput: DWord;
 var
   LInput: TLastInputInfo;
 begin
   LInput.cbSize := SizeOf(TLastInputInfo);
   GetLastInputInfo(LInput);
   Result := GetTickCount - LInput.dwTime;
 end;



--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Yanis
Дата 5.9.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure Idle(Sender: TObject; var Done: Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  bLocked: Boolean = False;

const
  MAX_MINUT_IDLE = 1; // кол-во времени по истечении (в минутах)
                       // которого прога будет блокироваться

  MAX_IDLE = 1000 * 60 * MAX_MINUT_IDLE;

implementation

{$R *.dfm}

function LastInput: DWord;
var
  LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := Idle;
end;

procedure TForm1.Idle(Sender: TObject; var Done: Boolean);
begin
  if (LastInput >= MAX_IDLE) and not bLocked then
    begin
      bLocked := True;
      { lock program }
      Done := True;
    end;
end;


Добавлено @ 17:36 
DemoCode
Блин, опередил таки smile

Это сообщение отредактировал(а) Yanis - 5.9.2006, 17:55


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.9.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Я делаю так:
Код

function InActiveTime
var
  LastInput:   TLastInputInfo;
begin
  LastInput.cbSize := SizeOf(LastInput);
  GetLastInputInfo(LastInput);
  result := GetTickCount - LastInput.dwTime;
end;
результат в миллисекундах.
PM MAIL   Вверх
Yanis
Дата 5.9.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(DemoCode @  5.9.2006,  18:33 Найти цитируемый пост)
не помню откудова я её взял

Из DRKB ;)


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.9.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Yanis, нифакт. Например я даже не знал, что оно там есть.
А пример банальный. Просто напрашивается.
Я сам написал. Смотрим - сравниваем... Одно лицо smile
PM MAIL   Вверх
Yanis
Дата 5.9.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @  5.9.2006,  18:38 Найти цитируемый пост)
Yanis, нифакт.

Да ни факт. Здесь просто логика сработала: совпадение названия функции и переменной. Хотя это тоже может быть совпадением smile

Это сообщение отредактировал(а) Yanis - 5.9.2006, 17:55


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
kostas
Дата 5.9.2006, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Спасибо всем за варианты,
Цитата(DemoCode @  5.9.2006,  17:33 Найти цитируемый пост)
Если не принципиально, простой именно твоей программы или всей системы, то начиная с двухтысячных виндов есть функция GetLastInputInfo

как раз принципиально, нужно чтобы работала и на Вин9х
Цитата(DemoCode @  5.9.2006,  17:16 Найти цитируемый пост)
Как вариант регистрировать время последних поступивших сообщений от мыши и клавиатуры.

спасибо, попробую сделать так

Добавлено @ 19:26 
Цитата(Yanis @  5.9.2006,  17:37 Найти цитируемый пост)
Из DRKB ;)

действительно оттуда smile правда я смотрел там и почему то не нашел, но все же это не подходит

а вот и тот пример:
Код

function LastInput: DWord; 
var 
  LInput: TLastInputInfo; 
begin 
  LInput.cbSize := SizeOf(TLastInputInfo); 
  GetLastInputInfo(LInput); 
  Result := GetTickCount - LInput.dwTime; 
end; 


//Example: 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  Label1.Caption := Format('System Idle since %d ms', [LastInput]); 
end; 


// The GetLastInputInfo function retrieves the time 
// of the last input event. 
// Minimum operating systems: Windows 2000 

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php 


PM ICQ   Вверх
Yanis
Дата 6.9.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(kostas @  5.9.2006,  20:18 Найти цитируемый пост)
но все же это не подходит

Тогда можно самому OnIdle считать с помощью GetTickCount. Правда это поможет в определении сколько простаивает программа, а не вся система в целом. Это не подходит?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
kostas
Дата 6.9.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Конечно, мне именно простаивание своей программы и нужно определить smile Пользователь ведь может и с другими приложениями работать, поэтому вариант 
Цитата
Как вариант регистрировать время последних поступивших сообщений от мыши и клавиатуры.
 может подойти только если отлавливать эти изменения в области окна программы 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.