Что нового

[Мышь, клавиатура] Простейший макрос

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Нужно простейший алгоритм сваять, но, честно, у меня нет сил вот прям сейчас учить autoit, чтоб сделать это(обещаю потом уделить время, ибо надо писать бота под ммо):
1)когда зажимаю MMB(middle mouse button) активировалась такая последовательность кнопок:
а)зажимается шифт
б)мышка наводится на центр экрана(position 644, 553)
в)клик на 9
г)клик на LMB(left mouse button)
д)цикл снова начинается с пункта в)
е)все это повторяется до тех пор пока не прекращу зажимать MMB.
Между действиями пауза в 0.05 секунды

Ну, и чтоб макрос включил, и он, продолжая свою работу, каждый раз включал алгоритм, как только я нажимаю MMB. До тех пор пока не выключу его. Именно с этим пунктом самая большая проблема, я перепробовал кучу прог заточеных под макрописание, но ни где не смог заставить скрипт оставаться всегда включенным и чтоб он реагировал когда нажимаю MMB.
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
	Sleep(5) ;Сколько милисекунд в секунде я не знаю, задай сам время в милисекундах...
	Send("{SHIFTDOWN}")
	Sleep(5)
	MouseMove(644,553,0)
	Sleep(5)
While 1
	If Not _IsPressed('04',$dll) Then ExitLoop
	;в)клик на 9 - Это не понял, нажать кнопку 9, если да то: Send('9')
    ;Sleep(5)
	MouseClick('Left')
	Sleep(5)
WEnd
Else
	Sleep(100)
EndIf
Wend
 
Автор
S

Sitizen 176

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

Небольшой косяк в твоем скрипте. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт прекращает своё действие.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
For $i=1 To 999999999999999999999999999999999999999999999999999999999999999 ;Я не знаю как сделать до бесконечности, но тебе этого на пару дней хватит


Код:
While 1
WEnd
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Sitizen 176 [?]
Небольшой косяк в твоем скрипте. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт прекращает своё действие.
е)все это повторяется до тех пор пока не прекращу зажимать MMB.
Так вроде это и требовалось, нет?
Вот так вот тогда попробуй, хотя я не понял что требуется(=
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
	While 1
    Sleep(5) ;Сколько милисекунд в секунде я не знаю, задай сам время в милисекундах...
    Send("{SHIFTDOWN}")
    Sleep(5)
    MouseMove(644,553,0)
    Sleep(5)
	While 1
    If Not _IsPressed('04',$dll) Then ExitLoop
    ;в)клик на 9 - Это не понял, нажать кнопку 9, если да то: Send('9')
    ;Sleep(5)
    MouseClick('Left')
    Sleep(5)
	WEnd
Wend
    Else
    Sleep(100)
	EndIf
Wend


Belfigor, спасибо, что-то я забыл об этом(((=
 
Автор
S

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Шифт остается зажатым, даже после того как прекращаю держать зажатой кнопку активации скрипта MMB
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Send("{SHIFTUP}")
 
Автор
S

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Я и сам догадался что такая команда нужна, но куда именно её вписывать?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я не вчитывался в суть проблемы, но наверное логично предположить что если скрипт работает тогда когда зажата заданная клавиша и он же зажимает шифт, то отжиматься шифт должен при отжатии заданной клавиши в момент выхода из цикла:
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
    While 1
    Sleep(5) ;Сколько милисекунд в секунде я не знаю, задай сам время в милисекундах...
    Send("{SHIFTDOWN}")
    Sleep(5)
    MouseMove(644,553,0)
    Sleep(5)
    While 1
    If Not _IsPressed('04',$dll) Then 
        Send("{SHIFTUP}")
        ExitLoop
    EndIf
    ;в)клик на 9 - Это не понял, нажать кнопку 9, если да то: Send('9')
    ;Sleep(5)
    MouseClick('Left')
    Sleep(5)
    WEnd
Wend
    Else
    Sleep(100)
    EndIf
Wend
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну и опять же скрипт каждый заданный промежуток времени если его условие удовлетворяет ситуации отправляет в систему информацию о том что клавиша Shift перешла в состояние "зажата", даже несмотря на то что она уже была зажата до этого этим же скриптом на более ранних повторениях цикла, а раз в текущем скрипте уже используется команда _IsPressed то можно использовать ее и при зажатии шифта и отправлять сию команду только в том случае если кнопка действительно в системе не считается зажатой. По памяти непомню, но вроде я не ошибся 10 = Shift
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
    While 1
    Sleep(5) ;Сколько милисекунд в секунде я не знаю, задай сам время в милисекундах...
    If Not _IsPressed('10',$dll) Then Send("{SHIFTDOWN}")
    Sleep(5)
    MouseMove(644,553,0)
    Sleep(5)
    While 1
    If Not _IsPressed('04',$dll) Then 
        Send("{SHIFTUP}")
        ExitLoop
    EndIf
    ;в)клик на 9 - Это не понял, нажать кнопку 9, если да то: Send('9')
    ;Sleep(5)
    MouseClick('Left')
    Sleep(5)
    WEnd
Wend
    Else
    Sleep(100)
    EndIf
Wend
 
Автор
S

Sitizen 176

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

Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
    While 1
    Sleep(5)
    If Not _IsPressed('10',$dll) Then Send("{SHIFTDOWN}")
    Sleep(5)
    MouseMove(644,553,0)
    Sleep(5)
    Send('9')
    Sleep(5)
    Send('x')
    sleep(5)
    MouseClick('Left')
    While 1
    If Not _IsPressed('04',$dll) Then
        Send("{SHIFTUP}")
        ExitLoop
    EndIf
    ;в)клик на 9 - Это не понял, нажать кнопку 9, если да то: Send('9')
    ;Sleep(5)
    WEnd
Wend
    Else
    Sleep(100)
    EndIf
Wend


Еще раз, что мне нужно.
Чтоб при зажатой средней кнопке мыши выполнялось следующее:
Код:
Send("{SHIFTDOWN}")
    Sleep(5)
    MouseMove(644,553,0)
    Sleep(5)
    Send('9')
    Sleep(5)
    Send('x')
    sleep(5)
    MouseClick('Left')
    sleep(5)

И чтоб вышеуказанный макрос повторялся до бесконечности, пока я не отожму среднюю кнопку мыши. Разумеется мне не нужен зажатый шифт после прекращения работы цикла.
 
Автор
S

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Viktor217 сказал(а):
Sitizen 176 [?]
Небольшой косяк в твоем скрипте. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт прекращает своё действие.
е)все это повторяется до тех пор пока не прекращу зажимать MMB.
Так вроде это и требовалось, нет?
Извини, опечатался. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт НЕ прекращает своё действие.
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Sitizen 176 [?]
Извини, опечатался. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт НЕ прекращает своё действие.
Пррррр... Я запутался, тобишь тебе нужно, чтобы когда ты отпускаешь СКМ, скрипт выключался?)
Так тогда:
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
    While 1
    Sleep(50)
    Send("{SHIFTDOWN}")
    Sleep(50)
    MouseMove(644,553,0)
    Sleep(50)
	
    While 1
    If Not _IsPressed('04',$dll) Then
		Send("{SHIFTUP}")
		ExitLoop
	EndIf
	Send('9')
    Sleep(50)
    Send('x')
    Sleep(50)
    MouseClick('Left')
    Sleep(50)
	WEnd

    Wend
Else
    Sleep(100)
EndIf

Wend
 
Автор
S

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Viktor217 сказал(а):
Sitizen 176 [?]
Извини, опечатался. Он не выполняет условие: когда прекращается зажиматься MMB, скрипт НЕ прекращает своё действие.
Пррррр... Я запутался, тобишь тебе нужно, чтобы когда ты отпускаешь СКМ, скрипт выключался?)
Извини что запутал. Надо чтоб скрипт после отжима СКМ прекращал свое действие(имитацию нажатий кнопок), но при следующем клике на MMB снова начинал работу. Так понятно?)

Я сейчас включил твой скрип:
1)он не прекращает работу после отжима mmb
2)он че-то творит с управлением мышки даже после выключения скрипта через "закрыть"(переназначается действие колесика на ролике), этот баг действует пока на shift не нажму. На самом деле баг не принципиален, колесиком я не пользуюсь в игре.
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Sitizen 176 [?]
Извини что запутал. Надо чтоб скрипт прекращал свое действие, но при следующем клике на MMB снова начинал работу. Так понятно?)
Ничего, так понятно, тогда вроде так подходит:
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
If _IsPressed('04',$dll) Then
    While 1
    Sleep(50)
    Send("{SHIFTDOWN}")
    Sleep(50)
    MouseMove(644,553,0)
    Sleep(50)

    While 1
    If Not _IsPressed('04',$dll) Then
		Send("{SHIFTUP}")
		ExitLoop 2
	EndIf
	Send('9')
    Sleep(50)
    Send('x')
    Sleep(50)
    MouseClick('Left')
    Sleep(50)
	WEnd

    Wend
Else
    Sleep(100)
EndIf

Wend
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Код:
#include <Misc.au3>

While 1
	If _IsPressed('04')
		Send('{SHIFTDOWN}')
		Sleep(50)
		While _IsPressed('04')
			MouseMove(644, 553)
			Sleep(50)
			Send('9')
			Sleep(50)
			MouseClick('left')
			Sleep(50)
		WEnd
		Send('{SHIFTUP}')
		Sleep(50)
	EndIf
WEnd
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
dwerf, ты свой скрипт хоть запускал?)
Вот одним словом больше, но работает(=
Код:
#include <Misc.au3>

While 1
    If _IsPressed('04') Then
        Send('{SHIFTDOWN}')
        Sleep(50)
        While _IsPressed('04')
            MouseMove(644, 553)
            Sleep(50)
            Send('9')
            Sleep(50)
            MouseClick('left')
            Sleep(50)
        WEnd
        Send('{SHIFTUP}')
        Sleep(50)
    EndIf
WEnd
 
Автор
S

Sitizen 176

Новичок
Сообщения
25
Репутация
0
Теперь буду думать, как поставить таймер, чтоб после отпускания СКМ, через 40 секунд был звуковой сигнал("пип"). Можно ссылку на тему, где пример похожего таймера есть? Я сам постараюсь разобраться в нем.
 
Верх