Что нового

Автовключение скрипта

AngelKent

Новичок
Сообщения
33
Репутация
0
Доброе время суток. Может кто подскажет, каким скриптом можно написать так, что бы программа начинала работать при НЕактивности (мишка не двигается, кнопки не нажимаются).
Я то как бы примерно сделал, но она не постоянно работает. Может что подскажите.
Код:
$pos=MouseGetPos ()
Sleep (3000)
$pos2=MouseGetPos ()
If $pos[1] = $pos2[1] And $pos[0] = $pos2[0] Then
Sleep (5000)
$pos1=MouseGetPos ()
If $pos[1] = $pos1[1] And $pos[0] = $pos1[0] Then
Sleep (1000)
MsgBox (0, ' ', 'Бот работает')
EndIf
EndIf
EndIf
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
InnI сказал(а):
AngelKent
что бы при активности ничего не происходило
начинала работать при НЕактивности
А вам не кажется, что это одно и то же?
Работать при НЕ активности = НЕ работать при активности
Ну ок.... Напишу по другому.... У меня получилось что бы скрипт работал, но как сделать так, что бы скрипт при активности становился на паузу, а после, в случае очередной НЕактивности, продолжал работу от того места где остановился...
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <WinAPISys.au3>

AdlibRegister("CheckIdleTime")

; время бездействия 5 сек
Global $IdleTime = 5000

; основной скрипт
While Sleep(1000)
  ConsoleWrite("Работаем" & @CRLF)
WEnd

; проверка бездействия
Func CheckIdleTime()
  If _WinAPI_GetIdleTime() < $IdleTime Then
    ConsoleWrite("Ожидаем" & @CRLF)
    AdlibUnRegister("CheckIdleTime")
    Do
      Sleep(100)
    Until _WinAPI_GetIdleTime() >= $IdleTime
    AdlibRegister("CheckIdleTime")
  EndIf
EndFunc
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
InnI сказал(а):
Код:
#include <WinAPISys.au3>

AdlibRegister("CheckIdleTime")

; время бездействия 5 сек
Global $IdleTime = 5000

; основной скрипт
While Sleep(1000)
  ConsoleWrite("Работаем" & @CRLF)
WEnd

; проверка бездействия
Func CheckIdleTime()
  If _WinAPI_GetIdleTime() < $IdleTime Then
    ConsoleWrite("Ожидаем" & @CRLF)
    AdlibUnRegister("CheckIdleTime")
    Do
      Sleep(100)
    Until _WinAPI_GetIdleTime() >= $IdleTime
    AdlibRegister("CheckIdleTime")
  EndIf
EndFunc
При подставлении в "; основной скрипт" собственный, работает очень медленно. При простом запуске скрипта, работает нормально а при добавлении этих строк, задержка увеличивается... При чём на "порядок"... Напр. всемто 2-х секунд ждёт 5, вместо 1 - 4, вместо 4 -8 и т.д. ((( Не пойму что да как
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
AngelKent
Не пойму что да как
К сожалению, мой хрустальный шар помутнел после ответов в соседней теме, и в нём плохо виден ваш код. А кофе - только растворимый :(
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
InnI сказал(а):
AngelKent
Не пойму что да как
К сожалению, мой хрустальный шар помутнел после ответов в соседней теме, и в нём плохо виден ваш код. А кофе - только растворимый :(

Код:
#include <WinAPISys.au3>
AdlibRegister("CheckIdleTime")
; время бездействия 5 сек
Global $IdleTime = 5000
; основной скрипт
While True
ConsoleWrite("Работаем" & @CRLF)
$red = PixelSearch (150, 150, 1000, 700, 0xFF0000, 5)
If Not @error Then
   Sleep (2000)
   $list = PixelSearch (610, $red[1]-10, 1000, $red[1]+10, 0xEEECEA, 5)
   If Not @error Then
	  MouseClick ('left', $list[0], $list[1], 1)
	  Sleep (100000)
	  Send ('+{Tab 2}')
	  Sleep (100)
	  Send ('*')
	  Sleep (100)
	  Send ('{Space}')
	  Sleep (1000)
	  MouseClick ('left', 10, 70, 1)
	  Send ('{Tab 3}')
	  Send ('{Enter}')
	  Sleep (60000)
	  $qwe=10
	  While $qwe
		 Send ('*')
		 Sleep (10000)
		 Send ('{Enter}')
		 Sleep (4000)
		 $qwe=$qwe-1
	  WEnd
Sleep (300000)
$pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   Sleep (5000)
   Else
   EndIf
Else
Sleep (300000)
$pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   Sleep (5000)
   Else
   EndIf
EndIf
   $pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   $asdfg=Random(1000,4000)
   $asdfg=Ceiling($asdfg)
   $asdf=$asdfg/1000
   $asdf=Ceiling($asdf)
   $sleep=$asdfg/2
   TrayTip ('', $asdf, $asdf)
   Sleep ($sleep)
   Send ('^{Tab}')
   Sleep ($sleep)
EndIf
WEnd
; проверка бездействия
Func CheckIdleTime()
  If _WinAPI_GetIdleTime() < $IdleTime Then
    ConsoleWrite("Ожидаем" & @CRLF)
    AdlibUnRegister("CheckIdleTime")
    Do
      Sleep(100)
    Until _WinAPI_GetIdleTime() >= $IdleTime
    AdlibRegister("CheckIdleTime")
  EndIf
EndFunc

При подставлении в "; основной скрипт" собственный, работает очень медленно. При простом запуске скрипта, работает нормально а при добавлении этих строк, задержка увеличивается... При чём на "порядок"... Напр. всемто 2-х секунд ждёт 5, вместо 1 - 4, вместо 4 -8 и т.д. (((
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
AngelKent
Во-первых, ваш скрипт даже не запускается.
Во-вторых, функции MouseClick и Send имитируют клик мыши и нажатие клавиши, т.е. АКТИВНОСТЬ пользователя. После выполнения каждой из них ожидание НЕактивности начинается заново.
В-третьих, если взять вашу идею и ожидать бездействие по изменению координат мыши, то скрипт будет работать только в паузах, превышающих время ожидания. Так будет потому, что скрипт самостоятельно двигает курсор, что изменяет координаты. Причём каждая такая пауза (Sleep) будет увеличена на это самое время ожидания.

Сделайте ручной запуск/остановку и не мучайтесь.
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
InnI сказал(а):
AngelKent
Во-первых, ваш скрипт даже не запускается.
Во-вторых, функции MouseClick и Send имитируют клик мыши и нажатие клавиши, т.е. АКТИВНОСТЬ пользователя. После выполнения каждой из них ожидание НЕактивности начинается заново.
В-третьих, если взять вашу идею и ожидать бездействие по изменению координат мыши, то скрипт будет работать только в паузах, превышающих время ожидания. Так будет потому, что скрипт самостоятельно двигает курсор, что изменяет координаты. Причём каждая такая пауза (Sleep) будет увеличена на это самое время ожидания.

Сделайте ручной запуск/остановку и не мучайтесь.

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

Я вот что думаю, возможно сделать как то в программе.....
Код:
While True
do
$b=_WinAPI_GetIdleTime()
until $b = 5000

$red = PixelSearch (150, 150, 1000, 700, 0xFF0000, 5)
If Not @error Then
   Sleep (2000)
   $list = PixelSearch (610, $red[1]-10, 1000, $red[1]+10, 0xEEECEA, 5)
   If Not @error Then
      MouseClick ('left', $list[0], $list[1], 1)
      Sleep (100000)
      Send ('+{Tab 2}')
      Sleep (100)
      Send ('*')
      Sleep (100)
      Send ('{Space}')
      Sleep (1000)
      MouseClick ('left', 10, 70, 1)
      Send ('{Tab 3}')
      Send ('{Enter}')
      Sleep (60000)
      $qwe=10
      While $qwe
         Send ('*')
         Sleep (10000)
         Send ('{Enter}')
         Sleep (4000)
         $qwe=$qwe-1
      WEnd
Sleep (300000)
$pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   Sleep (5000)
   Else
   EndIf
Else
Sleep (300000)
$pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   Sleep (5000)
   Else
   EndIf
EndIf
   $pos=MouseGetPos ()
   MouseClick ('left', 10, 70, 1, 0)
   MouseMove ($pos[0], $pos[1], 0)
   Send ('{Tab 3}')
   Send ('{Enter}')
   $asdfg=Random(1000,4000)
   $asdfg=Ceiling($asdfg)
   $asdf=$asdfg/1000
   $asdf=Ceiling($asdf)
   $sleep=$asdfg/2
   TrayTip ('', $asdf, $asdf)
   Sleep ($sleep)
   Send ('^{Tab}')
   Sleep ($sleep)
EndIf

..... что б проверяла перед каждым действием? Или хотя бы перед командой Send ('^{Tab}') ?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
AngelKent
что б проверяла перед каждым действием
Сделайте функцию и вставляйте её вызов где вам нужно
Код:
#include <WinAPISys.au3>

ConsoleWrite("start" & @CRLF)

WaitIdleTime() ; ожидание 5 сек (по умолчанию)
MouseClick("")
ConsoleWrite("click" & @CRLF)

WaitIdleTime(3000) ; ожидание 3 сек
Send(" ")
ConsoleWrite("send" & @CRLF)

WaitIdleTime(1500) ; ожидание 1.5 сек
ConsoleWrite("stop" & @CRLF)

; функция ожидания бездействия (по умолчанию 5 сек)
Func WaitIdleTime($IdleTime = 5000)
  Do
    Sleep(100)
  Until _WinAPI_GetIdleTime() >= $IdleTime
EndFunc
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
InnI сказал(а):
AngelKent
что б проверяла перед каждым действием
Сделайте функцию и вставляйте её вызов где вам нужно
Код:
#include <WinAPISys.au3>

ConsoleWrite("start" & @CRLF)

WaitIdleTime() ; ожидание 5 сек (по умолчанию)
MouseClick("")
ConsoleWrite("click" & @CRLF)

WaitIdleTime(3000) ; ожидание 3 сек
Send(" ")
ConsoleWrite("send" & @CRLF)

WaitIdleTime(1500) ; ожидание 1.5 сек
ConsoleWrite("stop" & @CRLF)

; функция ожидания бездействия (по умолчанию 5 сек)
Func WaitIdleTime($IdleTime = 5000)
  Do
    Sleep(100)
  Until _WinAPI_GetIdleTime() >= $IdleTime
EndFunc

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Виталик\Desktop\1234567890.au3"
"C:\Users\???????\Desktop\1234567890.au3" (121) : ==> Unknown function name.:
Until _WinAPI_GetIdleTime() >= $IdleTime
Until ^ ERROR
>Exit code: 1 Time: 2.393


Добавлено:
Сообщение автоматически объединено:

WaitIdleTime()
^ ERROR
>Exit code: 1 Time: 4.49
 

The_Immortal

Новичок
Сообщения
84
Репутация
4
AngelKent, убедитесь в наличии этого
Код:
#include <WinAPISys.au3>
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
#include <MsgBoxConstants.au3>
#include <Timers.au3>

; Mouse/Keyboard action during this 10 sec delay will change reported idle time
Sleep(10 * 1000); 10sec

Local $iIdleTime = _Timer_GetIdleTime()

MsgBox($MB_SYSTEMMODAL, "_Timer_GetIdleTime", "Idle time = " & $iIdleTime & "ms")
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
The_Immortal сказал(а):
AngelKent, убедитесь в наличии этого
Код:
#include <WinAPISys.au3>
Убедился... Уже работает, только простой считает каждый раз заново... Может быть лучший вариант все Sleep заменить на WaitIdleTime ?
 
Верх