1

Тема: AHK: Автоматизация перезапуска скрипта

Возможно ли с помощюю AHK отследить время бездействия пользователя (нажатия на клавиатуре и движение/клики мыши)?
И если время бездействия более 30 сек., то перезапустить скрипт или выполнить команду ещё раз.
Что-то вроде:


a:=[время бездействия в секундах]
       if a>=30 then $Pause:: SendInput, {Del}

Спасибо.

2 (изменено: yalanne, 2015-09-08 11:03:59)

Re: AHK: Автоматизация перезапуска скрипта

loop
if A_TimeIdlePhysical != 30000 ; мс
    sleep 10
Else
    tooltip Время бездействия прошло.
+ who

3

Re: AHK: Автоматизация перезапуска скрипта

Спасибо!
А как задать время скрытия tooltip-а?
И может расшифруете условие (if A_TimeIdlePhysical != 30000 ; мс) и результат (sleep 10).
Мне нужно будет дописать свои действия.
И ещё: какой функцией поймать момент, когда бездействие окончилось? Поскольку предложенный вариант выдаёт tooltip сразу по прошествии 30 секунд.

4

Re: AHK: Автоматизация перезапуска скрипта

A_TimeIdlePhysical != 30000

Плохая идея, надо проверять на больше. Добавить #InstallMouseHook и #InstallKeybdHook для гарантии.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

5 (изменено: serzh82saratov, 2015-09-08 12:21:03)

Re: AHK: Автоматизация перезапуска скрипта

поймать момент, когда бездействие окончилось

#InstallMouseHook 
#InstallKeybdHook

CheckTimeIdlePhysical:        
If (A_TimeIdlePhysical >= 30000)
    MsgBox, , , Время бездействия затянулось    
Else If (PrTimeIdlePhysical >= A_TimeIdlePhysical) 
    MsgBox, , , Чего то тронули, 0.1
PrTimeIdlePhysical := A_TimeIdlePhysical
SetTimer, CheckTimeIdlePhysical, -10 
Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

6 (изменено: yalanne, 2015-09-08 13:22:34)

Re: AHK: Автоматизация перезапуска скрипта

Если переменная A_TimeIdlePhysical не равно 30000(30 секунд), то тогда идет задержка в 10 мс в цикле. Если loop работает продолжительное время без задержек то начинает не слабо грузить процессор.
Else срабатывает в том случае если переменная равна 30000 и тут она показывает в тултип что время прошло.

Вот немного измененный код, он теперь реагирует на окончание бездействия, а так же скрывает тултуп через 2 сек и сделан та таймере а не на луп.

#Persistent
time := 30000
SetTimer HookMK,10
HookMK:
if (A_TimeIdlePhysical >= time) and (A_TimeIdlePhysical <= time+20) and (h:=1)
        tooltip Время бездействия прошло.
Else if h and (A_TimeIdlePhysical < 20) and (h:=0)+1
    {
        tooltip бездействие окончилось!
        sleep 2000
        tooltip
    }
return

serzh82saratov, ну что бы скрипт сам себе не сбрасывал A_TimeIdlePhysical при send можно примерно вот так сделать:

+ открыть спойлер
Class Sendnothook
{
    __New(text)
    {
        #InstallMouseHook
        Send %text%
    }
    __Delete()
    {
        #InstallKeybdHook
        #InstallMouseHook
    }

}

time := 3000
loop
if !((A_TimeIdlePhysical > time) and (A_TimeIdlePhysical < time+20))
    Sleep 10
Else
    New Sendnothook("x")

7 (изменено: serzh82saratov, 2015-09-08 13:22:28)

Re: AHK: Автоматизация перезапуска скрипта

serzh82saratov, ну что бы скрипт сам себе не сбрасывал A_TimeIdlePhysical при send

А зачем, разве я спрашивал об этом? И если оно вам надо, есть просто A_TimeIdle.

Вы уверены что в Sendnothook вообще что то происходит? Их наличие в коде уже устанавливает оба хука, и их действие уже никак не отменяется.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

8 (изменено: serzh82saratov, 2015-09-08 12:56:42)

Re: AHK: Автоматизация перезапуска скрипта

Ещё раз повторю, плохая идея проверять на равенство такую переменную. Такой код нельзя вставить в другой скрипт, и может не сработать при перегрузке пк.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

9 (изменено: yalanne, 2015-09-08 15:15:04)

Re: AHK: Автоматизация перезапуска скрипта

Исправил свой косяк в в посте 6.

serzh82saratov пишет:

И если оно вам надо, есть просто A_TimeIdle.
Вы уверены что в Sendnothook вообще что то происходит? Их наличие в коде уже устанавливает оба хука, и их действие уже никак не отменяется.

Простите за заблуждение, в Sendnothook не чего не происходит.

10

Re: AHK: Автоматизация перезапуска скрипта

Допустим, есть скрипт-надзиратель который следит за A_TimeIdlePhysical и при достижении какого-то порога срабатывает.
Можно ли как-то другим ahk скриптом имитировать ввод так, чтобы A_TimeIdlePhysical не рос?

11

Re: AHK: Автоматизация перезапуска скрипта

Зачем несколько скриптов? На простой логике работает:

Loop
{
If A_TimeIdlePhysical < 3000
    Sleep 1000
Else
    {
    ToolTip, Время бездействия больше 3 сек
    Loop
    {
    If A_TimeIdlePhysical > 3000
        Sleep 1000
    Else
        {
        ToolTip, Время бездействия закончилось
        Break
        }
    }
    }
}

12

Re: AHK: Автоматизация перезапуска скрипта

Можно ли как-то другим ahk скриптом имитировать ввод так, чтобы A_TimeIdlePhysical не рос?

Наверное можно, но для этого надо сэмулировать HID.

13

Re: AHK: Автоматизация перезапуска скрипта

AutoHotkey может чисто софтово эмулировать HID?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

14

Re: AHK: Автоматизация перезапуска скрипта

Не знаю. Только на это натыкался:
http://www.autohotkey.com/board/topic/9 … wto/page-2

15

Re: AHK: Автоматизация перезапуска скрипта

А там что рабочее это DllCall("InpOut" или это DllCall("WRITE_PORT_UCHAR"?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

16

Re: AHK: Автоматизация перезапуска скрипта

Я там вообще ничего не понял.
А YMP написал:

Чёрт ногу сломит. Ещё английский у чувака корявый.

17

Re: AHK: Автоматизация перезапуска скрипта

В общем у самого не получилось: подскажите, как по прошествии времени больше 30 секунд (то бишь когда в коде в 6-м посте "tooltip бездействие окончилось!") перезапускался скрипт меняющий местами клавиши "Pause" и "Delete":


    Pause:: SendInput, {Del}
    Delete:: SendInput, {Pause down}

Простая запись этих строк, как понимаете не помогла.

18

Re: AHK: Автоматизация перезапуска скрипта

http://www.script-coding.com/AutoHotkey/Hotkey.html

19 (изменено: who, 2015-09-10 15:11:24)

Re: AHK: Автоматизация перезапуска скрипта

Если я согласно примера

Hotkey, RCtrl & RShift, AltTab ; превращает горячую клавишу "RCtrl & Rshift" в Alt-Tab.

код:

yalanne пишет:

...

#Persistent
time := 30000
SetTimer HookMK,10
HookMK:
if (A_TimeIdlePhysical >= time) and (A_TimeIdlePhysical <= time+20) and (h:=1)
        tooltip Время бездействия прошло.
Else if h and (A_TimeIdlePhysical < 20) and (h:=0)+1
    {
        tooltip бездействие окончилось!
        sleep 2000
        tooltip
    }
return

...

записываю таким образом:

#Persistent
time := 30000
SetTimer HookMK,10
HookMK:
if (A_TimeIdlePhysical >= time) and (A_TimeIdlePhysical <= time+20) and (h:=1)
        tooltip Время бездействия прошло.
Else if h and (A_TimeIdlePhysical < 20) and (h:=0)+1
    {
        tooltip бездействие окончилось!
        Hotkey, Pause, Del ; это новая строка
        sleep 2000
        tooltip
    }
return

выбивает ошибку "Target label does not exist" на мою новую строку.
Что я делаю не так?

20

Re: AHK: Автоматизация перезапуска скрипта

Надо создать метку Del: и вписать под ней, что вы хотите сделать при нажатии Pause.