skilk Posted August 21, 2005 Report Share Posted August 21, 2005 У меня такая проблема. Надо что бы при бездействии (нет движения мышки, не нажимаются клавиши клавиатуры) запускался таймер, а при начале этих действий отключался независимо от того, свернута данная программа или в фокусе. И еще, подскажите как иконку программы в трею поместить? Всё на Delphi. Quote Link to comment Share on other sites More sharing options...
skilk Posted August 31, 2005 Author Report Share Posted August 31, 2005 Решил свой вопрос с помощью HOOK. function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;var msg: PEVENTMSG;begin if Code >= 0 then begin result := 0; msg := Pointer(LParam); with Form1 do case msg.message of WM_MOUSEMOVE: if CheckBox1.Checked=true then begin Timer1.Enabled:=false; Timer1.Interval:=0; Timer1.Interval:=(ComboBox1.ItemIndex*60*1000); Timer1.Enabled:=true; end; WM_LBUTTONDOWN: Timer1.Enabled:=false; WM_LBUTTONUP: if CheckBox1.Checked=true then begin Timer1.Interval:=(ComboBox1.ItemIndex*60*1000); Timer1.Enabled:=true; end; WM_RBUTTONDOWN: Timer1.Enabled:=false; WM_RBUTTONUP: if CheckBox1.Checked=true then begin Timer1.Interval:=(ComboBox1.ItemIndex*60*1000); Timer1.Enabled:=true; end; WM_KEYDOWN: Timer1.Enabled:=false; WM_KEYUP: if CheckBox1.Checked=true then begin Timer1.Interval:=(ComboBox1.ItemIndex*60*1000); Timer1.Enabled:=true; end; end; end else result := CallNextHookEx(HookHandle, code, WParam, LParam);end;procedure TForm1.FormCreate(Sender: TObject);beginHookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);end;procedure TForm1.FormDestroy(Sender: TObject);beginif HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);end; Но возникла другая проблема. При бездействии таймер постоянно перезапускается, пока из кода не убрать действия, связанные с движением мыши, после чего всё нормально работает. Как исправить ошибку? Quote Link to comment Share on other sites More sharing options...
Сергей Плоткин Posted August 31, 2005 Report Share Posted August 31, 2005 У тебя в коде все верно. Что значит "таймер постоянно перезапускается"? Таймер так и должен работать - выполнять один и тот же код каждые n-милисекунд. Что не так? Тебе нужно, чтобы при бездействии, таймер выполнился только один раз? Тогда вставь в начало OnTimer строчку: Timer1.Enabled:=False; и все. Quote Link to comment Share on other sites More sharing options...
skilk Posted August 31, 2005 Author Report Share Posted August 31, 2005 Да нет, просто если я установлю интервал таймера больше чем 10000, то срабатывания не происходит вообще, хотя мышь не движется. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.