Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизКак узнать что пользователь не работает с программой уже... Найти похожие ветки
← →
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
endunit 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c