Что нового

[Мышь, клавиатура] движение по спирали

Safron9999

Новичок
Сообщения
42
Репутация
0
подскажите как сделать так чтобы мышь двигалась по спирали от центра, а при изменении курсора останавливалось движение и запускался ряд действий...
заранее спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Safron9999,
Попробуйте так:
Код:
Global Const $degToRad = 4 * ATan(1) / 180
$iY = @DesktopHeight / 2
$iX = @DesktopWidth / 2
$i_Step = 5
$i_Count = 0
$fPause = True

HotKeySet('{ESC}', '_Exit')
HotKeySet('{F5}', '_Pause')
MouseMove($iX, $iY, 0)
$iCursorOld = MouseGetCursor()
While 1
	If $fPause Then
		$i_Count += $i_Step
		If $i_Count / 100 >= $iY Then $i_Count = 0
		MouseMove(Int($iX + $i_Count / 100 * Cos($i_Count * $degToRad)), _
				Int($iY + $i_Count / 100 * Sin($i_Count * $degToRad)), 0)
		$iCursorNew = MouseGetCursor()
		If $iCursorOld <> $iCursorNew Then
			_MyFunc()
			Sleep(50); чтобы MsgBox успел закрыться
			MouseMove($iX, $iY, 0)
			$iCursorOld = MouseGetCursor()
			$i_Count = 0
		EndIf
	EndIf
	Sleep(5)
WEnd

Func _Pause()
	$fPause = Not $fPause
EndFunc   ;==>_Pause
Func _MyFunc()
	MsgBox(64, 'Info', 'Курсор изменился в координатах:' & @LF & _
			Int($iX + $i_Count / 100 * Cos($i_Count * $degToRad)) & 'x' & _
			Int($iY + $i_Count / 100 * Sin($i_Count * $degToRad)))
EndFunc   ;==>_MyFunc

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
S

Safron9999

Новичок
Сообщения
42
Репутация
0
все отлично работает вот только курсор "пролетает" дальше того места где он изменился, а хотелось бы чтобы он останавливался и кликал мышкой например... и еще, я не совсем правильно сформулировал то, что хотел получить в итоге, нужно еще чтобы после выполнения функции движение мышки сбрасывалось и спираль снова начиналась с центра экрана ))
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Safron9999,
Я изменил код.
 
Автор
S

Safron9999

Новичок
Сообщения
42
Репутация
0
здравствуйте!
подскажите пожалуйста как задать ограниченное количество вращений спирали по прохождении которых если курсор не меняется то вращение начинается снова с центра экрана (или из заданной точки на экране).
Заранее спасибо за ответ.
Код:
Global Const $degToRad = 4 * ATan(1) / 180
$iY = 766
$iX = 537
$i_Step = 5
$i_Count = 0


HotKeySet('{HOME}', '_START')
HotKeySet('{ESC}', '_Exit')
$iCursorOld = MouseGetCursor()

While 1
    Sleep(100)
 WEnd


Func _START()
While 1
        $i_Count += $i_Step
        If $i_Count / 100 >= $iY Then $i_Count = 0
        MouseMove(Int($iX + $i_Count / 100 * Cos($i_Count * $degToRad)), _
                Int($iY + $i_Count / 100 * Sin($i_Count * $degToRad)), 0)
        $iCursorNew = MouseGetCursor()
        If $iCursorOld <> $iCursorNew Then
         MouseClick("left",Int($iX + $i_Count / 100 * Cos($i_Count * $degToRad)),Int($iY + $i_Count / 100 * Sin($i_Count * $degToRad)),1)
            Sleep(500)
            MouseMove($iX, $iY, 0)
            $iCursorOld = MouseGetCursor()
            $i_Count = 0
        EndIf
    Sleep(5)
 WEnd
 EndFunc


Func _Exit()
    Exit
EndFunc
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Safron9999
Код:
Global $dsfsd = 34
Global Const $degToRad = 4 * ATan(1) / 180
$iY = 384
$iX = 512
$i_Step = 5
$i_Count = 0
$restart_after = 10 ; 10 кругов


HotKeySet('{HOME}', '_START')
HotKeySet('{ESC}', '_Exit')
$iCursorOld = MouseGetCursor()

While 1
	Sleep(100)
WEnd

Func _START()
	While 1
		$i_Count += $i_Step
		TrayTip('', Int($i_Count / 360) + 1 & ' круг', 1000)
		If $i_Count >= $restart_after*360 Then $i_Count = 0
		MouseMove(Int($iX + $i_Count / 100 * Sin($i_Count * $degToRad)), _
				Int($iY - $i_Count / 100 * Cos($i_Count * $degToRad)), 0)
		$iCursorNew = MouseGetCursor()
		If $iCursorOld <> $iCursorNew Then
			MouseClick("left", Int($iX + $i_Count / 100 * Sin($i_Count * $degToRad)), Int($iY - $i_Count / 100 * Cos($i_Count * $degToRad)), 1)
			Sleep(500)
			MouseMove($iX, $iY, 0)
			$iCursorOld = MouseGetCursor()
			$i_Count = 0
		EndIf
		Sleep(5)
	WEnd
EndFunc   ;==>_START


Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
S

Safron9999

Новичок
Сообщения
42
Репутация
0
Z_Lenar, огромное спасибо!


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

Опять проблема :(
в какойто момент скрипт просто перестал работать (вроде ничего не менял)... курсор перемещается в заданную точку и ничего не происходит (иногда немного дергается курсор) во всплывающем сообщении в трее моргает 1 круг...
Код:
Global $dsfsd = 34
Global Const $degToRad = 4 * ATan(1) / 180
$iX = 705
$iY = 545
$i_Step = 5 ; шаг между кругами
$i_Count = 0
$restart_after = 10 ; количество кругов


HotKeySet('{HOME}', '_DRAKA')
HotKeySet('{ESC}', '_Exit')
$iCursorOld = MouseGetCursor()

While 1
    Sleep(100)
WEnd

Func _START()
        $i_Count += $i_Step
        TrayTip('', Int($i_Count / 360) + 1 & ' круг', 1000)
        If $i_Count >= $restart_after*360 Then $i_Count = 0
        MouseMove(Int($iX + $i_Count / 100 * Sin($i_Count * $degToRad)), _
                Int($iY - $i_Count / 100 * Cos($i_Count * $degToRad)), 0)
        $iCursorNew = MouseGetCursor()
        If $iCursorOld <> $iCursorNew Then
            MouseClick("left", Int($iX + $i_Count / 100 * Sin($i_Count * $degToRad)), Int($iY - $i_Count / 100 * Cos($i_Count * $degToRad)), 2)
            Sleep(500)
            MouseMove($iX, $iY, 0)
            $iCursorOld = MouseGetCursor()
            $i_Count = 0
        EndIf
 EndFunc

Func _DRAKA()
   While 1
   Local $test1 = "0x" & Hex(PixelGetColor(818, 565),6), $test2 = "0x" & Hex(PixelGetColor(1208, 583),6), $test3="0x" & Hex(PixelGetColor(424, 855),6), $test4="0x" & Hex(PixelGetColor(1034, 661),6)
If $test1 = 0xCCA55D And $test2 = 0xBEBEFF And $test3 <> 0xBE935C Then
   MouseClick("left",917,586,1)
   Sleep(Random(450, 600, 1))
ElseIf $test1 = 0xCCA55D And $test2 <> 0xBEBEFF And $test3 <> 0xBE935C Then
   MouseClick("left",1208,583,1)
   Sleep(Random(450, 600, 1))
ElseIf $test1 <> 0xCCA55D And $test2 <> 0xBEBEFF And $test3 = 0xBE935C Then
   _START()
   Sleep(Random(1100, 1600, 1))
ElseIf $test1 <> 0xCCA55D And $test4 = 0x82A635 Then
   MouseClick("left",1034,661,1)
   Sleep(Random(450, 600, 1))
EndIf
  Sleep(5)
    WEnd
EndFunc

Func _Exit()
    Exit
EndFunc


подскажите в чем может быть проблема?
 
Верх