Что нового

[Мышь, клавиатура] Помогите разобраться с Hotkeys.

yadas

Новичок
Сообщения
5
Репутация
1
Всем привет.
Хотелось бы начучиться пользоваться AutoIt. Еще ни одного работающего скрипта толком не написал. :-\
Задумал простенький скрипт: при нажатии на колесико (которое на мышке), писать текст (text) и нажимать Enter.
Пробовал так (по примеру отсюда:
Код:
#Include <Misc.au3>
While 1
    if _IsPressed("04") Then Send("text{enter}")
    sleep(100)
Wend

Не нравится то, что при зажатии колесика скрипт продолжает выполняться.
Хотелось бы видеть однократное выполнение.
С HotKeySet вообще ничего толком не вышло..

Заранее благодарен за помощь. :beer:
 

hikki

Продвинутый
Сообщения
233
Репутация
99
ExitLoop после команды вставьте
 
Автор
Y

yadas

Новичок
Сообщения
5
Репутация
1
Код:
#Include <Misc.au3>
While 1
    if _IsPressed("04") Then Send("text{enter}") ExitLoop
    sleep(100)
Wend

Так? Тогда скрипт закрывается после первого клика.
Еще можно ли как-то прописывать среднюю кнопку мыши без Misc.au3?
И получится ли такой скрипт без While & Wend?
 

hikki

Продвинутый
Сообщения
233
Репутация
99
в том виде как написано код не может работать
Код:
#include <Misc.au3>
While 1
	If _IsPressed("04") Then
		Send("text{enter}")
		ExitLoop
	EndIf
	Sleep(100)
WEnd


И получится ли такой скрипт без While & Wend?
Код:
#include <Misc.au3>
Do
	Sleep(100)
Until _IsPressed("04")

Send("text{enter}")

делает тоже самое


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

Еще можно ли как-то прописывать среднюю кнопку мыши без Misc.au3?
ну во первых что мешает использование библиотеки? можно вынуть фукцию _IsPressed из библиотеки

Код:
Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
	; $hexKey must be the value of one of the keys.
	; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
	Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
	If @error Then Return SetError(@error, @extended, False)
	Return BitAND($a_R[0], 0x8000) <> 0
EndFunc   ;==>_IsPressed
 
Автор
Y

yadas

Новичок
Сообщения
5
Репутация
1
Спасибо, но почему-то оба эти скрипта работают как и тот, в который я вставил ExitLoop.
Тоесть закрываются после одного нажатия колесика.
Я хотел бы, чтобы скрипт заменял каждое нажатие колесика на text{enter} однократно, без повторных действий при зажатии.
hikki сказал(а):
ну во первых что мешает использование библиотеки? можно вынуть фукцию _IsPressed из библиотеки
Понял. Просто я думал, что средняя кнопка мыши прописана в самом AutoIt'e, как и Enter.
 

hikki

Продвинутый
Сообщения
233
Репутация
99
:laugh: был разговор слепого с глухим))) то ли я не так понял вопрос, то ли вопрос не так был сформулирован :smile: надеюсь теперь правильно понял, требуется однократное выполнение Send("text{enter}") при нажатии или зажатии средней кнопки мыши, если так то вот...
Код:
#include <Misc.au3>

While 1
	If _IsPressed("04") Then
		Send("text{enter}")
		While _IsPressed("04")
			Sleep(100)
		WEnd
	EndIf
	Sleep(100)
WEnd
 
Автор
Y

yadas

Новичок
Сообщения
5
Репутация
1
Да, это то, что я и хотел, большое спасибо. :smile:
Извиняюсь, что неправильно выразил свое желание ранее.. :-\
Я до этого пользовался AutoHotKey (аналог AutoIt), там можно было попроще:
MButton::Send, text{enter}
Думал, что-то подобное, простенькое, можно сделать и с AutoIt. Оказалось немного сложнее. :smile:

Тему можно закрывать, ответ получил.
 
Верх