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

Вниз

Отловить событие с клавиатуры или мыши в неактивном приложении?   Найти похожие ветки 

 
sohat   (2004-07-29 15:48) [0]

нужно посчитать сколько времени юзер был "неактивен" не юзал мышку или клавиатуру, а как отловить событие в неактивной программе не знаю, помогите пожалуйста.


 
Юрий Зотов ©   (2004-07-29 16:14) [1]

Глобальный хук (вернее, два глобальных хука). См. статью Алексея Павлова.


 
Игорь Шевченко ©   (2004-07-29 16:58) [2]

1) GetLastInputInfo для Win2k и выше
2) Работа с msidle.dll для Win9x
3) Делание глобальных хуков WH_KEYBOARD и WH_MOUSE самому.


 
grom   (2004-07-29 19:22) [3]

Отследить события мыши и клавиатуры во всей Windows

var
 HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
 msg: PEVENTMSG;
 key: integer;
begin
 if Code >= 0 then begin
   result := 0;
   msg := Pointer(LParam);
   with Form1 do
     case msg.message of
       WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);
       WM_LBUTTONDOWN: CheckBox1.Checked := true;
       WM_LBUTTONUP: CheckBox1.Checked := false;
       WM_RBUTTONDOWN: CheckBox2.Checked := true;
       WM_RBUTTONUP: CheckBox2.Checked := false;
       WM_KEYUP: CheckBox3.Checked := false;
       WM_KEYDOWN: begin
         CheckBox3.Checked := true;
         key := msg.paramL and 255;
         if key in [48..57, 65..90]
           then Edit1.Text := Edit1.Text + chr(key);
       end;
     end;
 end else
   result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CheckBox1.Caption := "left button";
 CheckBox2.Caption := "right button";
 CheckBox3.Caption := "keyboard";
 HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
 Edit1.Text := "";
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if HookHandle > 0 then
   UnhookWindowsHookEx(HookHandle);
end;


 
Юрий Зотов ©   (2004-07-29 20:22) [4]

> grom   (29.07.04 19:22) [3]

Извините, а Вы уверены, что это будет именно "по всей Windows"? Сами проверяли? Например, когда активна другая программа?


 
grom   (2004-07-29 21:26) [5]

Проверял на ХР работает нормально.

когда активна другая программа?
Какая программа?


 
Юрий Зотов ©   (2004-07-30 07:57) [6]

> grom   (29.07.04 21:26) [5]

> Какая программа?

Любая, кроме Вашей. Хотя бы Notepad, например.


 
Digitman ©   (2004-07-30 09:07) [7]


> grom   (29.07.04 21:26) [5]


1. глоб.ловушка должна быть реализована в DLL, а не в обычном EXE
2. глоб.ловушка НЕ отслеживает польз.ввод в консольных win32-приложениях и окнах DOS-задач


 
grom   (2004-07-30 09:10) [8]

В notepad работает.
Может нибудит работать в каких то играх.


 
grom   (2004-07-30 09:15) [9]

Digitman ©   (30.07.04 09:07) [7]
Ну это просто пример, а далее решать что делать автору этой ветки.


 
Digitman ©   (2004-07-30 09:32) [10]


> grom


не есть корошо приводить пример, не делающий то что заявлено в комментарии к нему


 
Юрий Зотов ©   (2004-07-30 11:11) [11]

> grom   (30.07.04 09:10) [8]
> В notepad работает.

Извините, не верю. Яблоки вверх не падают, а хук, поставленный в exe, за пределами этого exe не работает. А при локальном по отношению к системе объявлении HookHandle он и в DLL нормально работать не будет.


 
©   (2004-07-30 12:01) [12]

От глобальных ловушек иногда падают драйвера, их надо
избегать.


 
Digitman ©   (2004-07-30 12:23) [13]


> R ©   (30.07.04 12:01) [12]
> От глобальных ловушек иногда падают драйвера, их надо
> избегать.


важное уточнение - от КРИВО реализованных и поставленных


 
Игорь Шевченко ©   (2004-07-30 12:34) [14]


> От глобальных ловушек иногда падают драйвера, их надо
> избегать.


????????????????


 
prosoft   (2004-07-30 14:32) [15]

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

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

Работает только в Win2k и старше.



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

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

Наверх




Память: 0.5 MB
Время: 0.024 c
1-1091380009
GuAV
2004-08-01 21:06
2004.08.15
Как вставить кнопки в TToolBar, созданный в ран-тайме?


1-1091521163
VVolodia
2004-08-03 12:19
2004.08.15
Tab Control, Как поменять направление текста и цвет закладки


6-1086816366
Sphinx
2004-06-10 01:26
2004.08.15
Автонастройка прокси


3-1090226443
GanibalLector
2004-07-19 12:40
2004.08.15
синтаксис в ХП


1-1091209480
Antonmm
2004-07-30 21:44
2004.08.15
Добавление программы в реестр