skilk Опубликовано 21 августа, 2005 Жалоба Поделиться Опубликовано 21 августа, 2005 У меня такая проблема. Надо что бы при бездействии (нет движения мышки, не нажимаются клавиши клавиатуры) запускался таймер, а при начале этих действий отключался независимо от того, свернута данная программа или в фокусе. И еще, подскажите как иконку программы в трею поместить? Всё на Delphi. Ссылка на комментарий Поделиться на другие сайты Поделиться
skilk Опубликовано 31 августа, 2005 Автор Жалоба Поделиться Опубликовано 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; Но возникла другая проблема. При бездействии таймер постоянно перезапускается, пока из кода не убрать действия, связанные с движением мыши, после чего всё нормально работает. Как исправить ошибку? Ссылка на комментарий Поделиться на другие сайты Поделиться
Сергей Плоткин Опубликовано 31 августа, 2005 Жалоба Поделиться Опубликовано 31 августа, 2005 У тебя в коде все верно. Что значит "таймер постоянно перезапускается"? Таймер так и должен работать - выполнять один и тот же код каждые n-милисекунд. Что не так? Тебе нужно, чтобы при бездействии, таймер выполнился только один раз? Тогда вставь в начало OnTimer строчку: Timer1.Enabled:=False; и все. Ссылка на комментарий Поделиться на другие сайты Поделиться
skilk Опубликовано 31 августа, 2005 Автор Жалоба Поделиться Опубликовано 31 августа, 2005 Да нет, просто если я установлю интервал таймера больше чем 10000, то срабатывания не происходит вообще, хотя мышь не движется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти