Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Как узнать что пользователь не работает с программой уже...   Найти похожие ветки 

 
laok   (2006-10-02 12:37) [0]

... n-ое время? это нужно для обновления данных из файлов, но не очень удобно делать это в процессе работы - чуточку подтормаживает. Хотелось бы, чтобы если пользователь не работает скажем 1 минуту, происходил бы запуск задачи... где-то видел, найти не могу...


 
Игорь Шевченко ©   (2006-10-02 12:51) [1]

GetLastInputInfo

Пример в http://kladovka.net.ru/download.cgi?id=19


 
laok   (2006-10-02 12:54) [2]

Не совсем то. Мне нужно, чтобы это распространялось только на десктоп программы, а когда пользователь вне её и так обновление происходит - прога висит в значке.


 
X9 ©   (2006-10-02 12:54) [3]

У объекта Application есть событие OnIdle, можно запускать таймер в его обработчике.


 
Игорь Шевченко ©   (2006-10-02 13:00) [4]

X9 ©   (02.10.06 12:54) [3]

И что это даст ? У TApplication нету события "Idle закончился", на котором при твоем способе этот таймер должен сбрасываться.

laok   (02.10.06 12:54) [2]

Кроме идеи поставить хук WH_MOUSE + WH_KEYBOARD в твоем приложении больше никаких идей в голову не приходит.


 
SergP.   (2006-10-02 13:08) [5]

> laok   (02.10.06 12:37)
> ... n-ое время? это нужно для обновления данных из файлов,
> но не очень удобно делать это в процессе работы - чуточку
> подтормаживает. Хотелось бы, чтобы если пользователь не
> работает скажем 1 минуту, происходил бы запуск задачи...
> где-то видел, найти не могу...


Хм. А если запускать обновление с низким приоритетом?


 
laok   (2006-10-02 13:10) [6]

SergP. ты думаешь я зря сюда написал? я не умею запускать отдельные процедуры с низким приоритетом :-[


 
Игорь Шевченко ©   (2006-10-02 13:40) [7]

Пример работает:

object fMain: TfMain
 Left = 192
 Top = 107
 Width = 696
 Height = 480
 Caption = "fMain"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object ApplicationEvents: TApplicationEvents
   OnIdle = ApplicationEventsIdle
   Left = 20
   Top = 24
 end
 object Timer: TTimer
   Enabled = False
   Interval = 60000
   OnTimer = TimerTimer
   Left = 20
   Top = 60
 end
end


unit main;

interface

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

type
 TfMain = class(TForm)
   ApplicationEvents: TApplicationEvents;
   Timer: TTimer;
   procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
   procedure FormCreate(Sender: TObject);
   procedure TimerTimer(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
 Timer.Enabled := true;
end;

function MouseHookProc (code: Integer; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall;
begin
 if code >= 0 then
   fMain.Timer.Enabled := false;
 Result := CallNextHookEx(WH_MOUSE, code, wParam, lParam);
end;

function KbdHookProc (code: Integer; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall;
begin
 if code >= 0 then
   fMain.Timer.Enabled := false;
 Result := CallNextHookEx(WH_KEYBOARD, code, wParam, lParam);
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 SetWindowsHookEx(WH_KEYBOARD, KbdHookProc, 0, GetCurrentThreadId);
 SetWindowsHookEx(WH_MOUSE, MouseHookProc, 0, GetCurrentThreadId);
end;

procedure TfMain.TimerTimer(Sender: TObject);
begin
 ShowMessage ("Процесс запущен");
end;

end.


 
Ketmar ©   (2006-10-02 14:20) [8]

>[6] laok 2-Oct-2006, 13:10
>я не умею запускать отдельные процедуры с низким
>приоритетом :-[
более того: это даже ОС не умеет. только потоки.


 
X9 ©   (2006-10-02 17:17) [9]


> Игорь Шевченко ©   (02.10.06 13:00) [4]
>
> X9 ©   (02.10.06 12:54) [3]
>
> И что это даст ? У TApplication нету события "Idle закончился",
>  на котором при твоем способе этот таймер должен сбрасываться.
>

Ловить сообщения ввода, что Вы и сделали в [7].



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
2-1159803742
Juju
2006-10-02 19:42
2006.10.22
Как установить формулу в Excel?


3-1156234898
samone
2006-08-22 12:21
2006.10.22
Управление сервером


2-1160023802
aries
2006-10-05 08:50
2006.10.22
FireBird и Делфи


2-1159872475
Новичоккк
2006-10-03 14:47
2006.10.22
Обращение к форме внутри потока


15-1159466282
FedorC
2006-09-28 21:58
2006.10.22
Удаленка для Delphi программиста со знанием английского