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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать что пользователь не работает за компом? 
:(
    Опции темы
Hawk
  Дата 9.10.2002, 18:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди! Подскажите, как узнать что пользователь не работает за компом. Нужно чтобы если в течение 5 мин. пользователь бездельничает(не давит клаву и не дергает мышу), программа бы выполнила какие-то действия.
  Вверх
Vit
Дата 9.10.2002, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Ставишь Hook...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Hawk
Дата 9.10.2002, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А какой хук нада, и как его поставить, если можно пример, или ссылку где искать плизззз.
PM MAIL   Вверх
rhf
Дата 9.10.2002, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



hook на WH_MOUSE и WH_KEYBOARD
setWindowsHookEx
на delphi.mastak.ru есть статья Hooks аспекты реализации
PM MAIL   Вверх
Hawk
Дата 9.10.2002, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



СПАСИБА! :)
PM MAIL   Вверх
Medved
Дата 15.10.2002, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Поставь на форму таймер, установи свойство формы KeyPreview := true, и обрабатывай событие KeyPress. Будет работать только в том случае, если твоя форма будет активна (и такое бывает :-)


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Song
Дата 15.10.2002, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



TApplication.onIdle или
WM_ENTERIDLE или WM_IDLE, точно не помню.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Гость_Leo
Дата 5.2.2004, 15:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я вот написал прогу на Дельфях, типа системы удаленного администрирования, так там эта задача рещается просто - отслеживается только перемещение мыши - показано практикой - за минуту пользователь хотя бы раз мышь двигает, используя функцию GetCursorPos и таймер, и все, никаких тебе хуков. Работает безотказно. smile.gif
  Вверх
x77
Дата 5.2.2004, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



некорректная постановка вопроса. что значит не работает? я могу читать текст. или полчаса любоваться порносайтом. ни мышь ни клава в такого рода "работе" не учавствуют. а узнать программно, смотрю я на монитор или нет вряд ли удасться. поэтому сначала надо конкретизировать, что понимается под работой юзера. работа определённых программ? нажатие кнопок? двигание мыши? по-большому счёту, отлавливается это так же, как это отлавливает скрин-сэйвер - т.е. OnIdle. и действительно, без всяких хуков smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Гость_Skif
Дата 28.3.2005, 15:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ!!!

Срочно нужен исходник простенького скрин-сэйвера на дельфи может у кого есть или ссылочку дадите???
  Вверх
FRAGNATIC
Дата 28.3.2005, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


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

Репутация: 6
Всего: 11



Цитата
Срочно нужен исходник простенького скрин-сэйвера на дельфи может у кого есть или ссылочку дадите???

насколько я знаю в ДРКБ есть статья на эту тему
а так вот взял пример из книги "Библия Дэлфи" автор М.Флёнов
Код

unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, opengl,
  ExtCtrls, AppEvnts, registry;

{$D SCRNSAVE Raver}

type
  TSaverForm = class(TForm)
    Timer1: TTimer;
    procedure FormActivate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    BGbitmap:TBitmap;
    DC : hDC;
    BackgroundCanvas : TCanvas;
  public
    { Public declarations }
  end;

var
  SaverForm: TSaverForm;

implementation

uses OptionsUnit;


{$R *.DFM}

procedure TSaverForm.FormActivate(Sender: TObject);
begin
 Left:=0;
 Top:=0;
end;

procedure TSaverForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
 Close;
end;

procedure TSaverForm.FormDestroy(Sender: TObject);
begin
 BGBitmap.Free;
end;

procedure TSaverForm.FormPaint(Sender: TObject);
begin
 if Timer1.Enabled=true then
  Canvas.Draw(0,0,BGBitmap);
end;

procedure TSaverForm.Timer1Timer(Sender: TObject);
const
 DrawColors: array[0..7] of TColor =(clRed, clBlue, clYellow, clGreen,
                                   clAqua, clFuchsia, clMaroon, clSilver);
begin
 BGBitmap.Canvas.Pen.Color:=DrawColors[random(7)];
 BGBitmap.Canvas.MoveTo(random(Screen.Width),random(Screen.Height));
 BGBitmap.Canvas.LineTo(random(Screen.Width),random(Screen.Height));
 Canvas.Draw(0,0,BGBitmap);
end;

procedure TSaverForm.FormShow(Sender: TObject);
var
 reg:TRegIniFile;
begin
 reg := TRegIniFile.Create('Software');
 reg.OpenKey('DelphiBook',true);
 OptionsForm.PassEdit.Text:=reg.ReadString('Screen Saver', 'Password', '');
 OptionsForm.TrackBar1.Position:=reg.ReadInteger('Screen Saver', 'Timer Interval', 1000);
 reg.Free;

 if ParamCount>0 then
  begin
   if ParamStr(1)='/p' then
    begin
     Close;
     exit;
    end;
   if ParamStr(1)[2]='c' then
    begin
     OptionsForm.ShowModal;
     if OptionsForm.ModalResult=mrOK then//Если нажата кнопка ОК, то сохраняю выбранные параметры
      begin
       reg := TRegIniFile.Create('Software');
       reg.OpenKey('DelphiBook',true);
       reg.WriteString('Screen Saver', 'Password', OptionsForm.PassEdit.Text);
       reg.WriteInteger('Screen Saver', 'Timer Interval', OptionsForm.TrackBar1.Position);
       reg.Free;
      end;
     Close;
     exit;
    end;
  end;

 Timer1.Enabled:=true;
 Timer1.Interval:=OptionsForm.TrackBar1.Position;
 Width:=Screen.Width;
 Height:=Screen.Height;
end;

procedure TSaverForm.FormCreate(Sender: TObject);
begin
 Width:=0;
 Height:=0;
 BGbitmap:=TBitmap.Create;
 BGbitmap.Width := Screen.Width;
 BGbitmap.Height := Screen.Height;

 DC := GetDC (0);
 BackgroundCanvas := TCanvas.Create;
 BackgroundCanvas.Handle := DC;

 BGBitmap.Canvas.CopyRect(Rect (0, 0, Screen.Width, Screen.Height), BackgroundCanvas,
                            Rect (0, 0, Screen.Width, Screen.Height));
 BackgroundCanvas.Free;
 randomize;
end;

procedure TSaverForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var
 pass:String;
begin
 if ParamStr(1)<>'/s' then //Если программа не запущена, а показываеться окно настроек то можно выходить
  begin
   CanClose:=true;//Разрешаю выход из программы
   exit;
  end;

 if OptionsForm.PassEdit.Text='' then//Если пароль пустой, то можно выходить
  begin
   CanClose:=true;//Разрешаю выход из программы
   exit;
  end;

 CanClose:=false;//Запрещяю выход из программы
 //Показываю окно ввода пароля
 pass:='';
 if InputQuery('Введите пароль', 'Пароль:', pass) then
  if pass=OptionsForm.PassEdit.Text then//Если пароль верный
   CanClose:=true;//Разрешаю выход из программы
end;

end.

и
Код

unit OptionsUnit;

interface

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

type
  TOptionsForm = class(TForm)
    Label1: TLabel;
    PassEdit: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    PassEdit1: TEdit;
    Label3: TLabel;
    TrackBar1: TTrackBar;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  OptionsForm: TOptionsForm;

implementation

{$R *.dfm}

procedure TOptionsForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
 CanClose:=false;
 if PassEdit.Text=PassEdit1.Text then//Проверяю, если пароль равен подтверждению, то можно закрывать окно
  CanClose:=true
 else
  Application.MessageBox('Пароль не соответствуют подтверждению', 'Ошибка');
end;

end.

помойму проще не куда)
PM MAIL   Вверх
Poseidon
Дата 28.3.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Hawk @ 9.10.2002, 18:44)
Подскажите, как узнать что пользователь не работает за компом.
Вот тебе функция каторая возврещает время простоя системы:
Код
function LastInput: DWord;
 var
   LInput: TLastInputInfo;
 begin
   LInput.cbSize := SizeOf(TLastInputInfo);
   GetLastInputInfo(LInput);
   Result := GetTickCount - LInput.dwTime;
 end;

Возвращаемое значение в миллисекундах. Если нужно узнать сколько секунд простаивает система, то измени последнюю строчку на
Код
Result := Trunc((GetTickCount - LInput.dwTime)/1000);


Пример использования:
Код
procedure TForm1.Timer1Timer(Sender: TObject);
 begin
   Label1.Caption := Format('Система простаивает %d ms', [LastInput]);
 end;


Функция работаспособна в Windows 2000 и выше.

PS. Кстати в DRKB такого я не нашел (может и есть, не спорю). А функция ведь полезная! smile

Это сообщение отредактировал(а) Poseidon - 28.3.2005, 20:35


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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