Что нового

[клавиши мыши] установка клавиш мыши как ХК

IIIaMaH

Новичок
Сообщения
15
Репутация
0
Собственно задача! По нажатию Шифт+ПКМ запустить функцию.
Пока вариант такой (не рабочий):
Код:
;константа правая клавиша мыши
$rmouse = 0x02
HotKeySet ("+{"&$rmouse&"}", "SprintRun")

While 1
    Sleep(100)
WEnd

;SprintRun Func
Func SprintRun()
    If _IsPressed ("6A") Then
        Send ("{NUMPADMULT UP}")
        Return ("")
    EndIf
    Send ("{NUMPADMULT DOWN}")
    Send ("m")
EndFunc


Нельзя вводить доп горячии клавиши для запуска цикла с определением нажата ли клавиши потому что это кусок скрипта уже рабочего.
Код:
WinWaitActive("Untitled - Darkfall Online")
#Include <Misc.au3>


;константа количество используемых реев
Const $num_ray = 5
;константа правая клавиша мыши
;$rmouse = 0x02

; Объявляем переменные
;блок назначения клавишь для реев
Global $k_array[$num_ray] = ["+6","+7","+8","+9","+0"]
;["+6"] impale
;["+7"] Pungent Mist
;["+8"] Unholy Caress
;["+9"] Dragon's Breath
;["+0"] Insect Swarm
; end

; блок значений времени отката реев
Global $cd_array[$num_ray] = [ 6500, 14000, 14000, 14000, 13000]
;[14000] Impale [6500] Pungent Mist [14000] Unholy Caress [14000] Dragon's Breath  [13000] Insect Swarm
; end 

;инициируем переменную перегрузки времени
$time_reload = 0
;масив для хранения времени последнего каста каждого рея и переменная для перегрузки
Global $time_cast[$num_ray], $ray_key

; инициализация массива очередности реев
; будет выбран ближайший элемент массива с значением 1
Global $next_ray[$num_ray] = [1, 1, 1, 1, 1]
; end 

; задаем горячую клавишу или сочетание клавиш для выбора рея и его каста
; Shift = +, Ctrl = ^, Alt = !
HotKeySet ("{NUMPAD1}", "RayScroll")
HotKeySet ("{END}", "RayScroll")
;HotKeySet ("+{"&$rmouse&"}", "SprintRun")

While 1
    Sleep(100)
WEnd

;функция RayScroll
Func RayScroll ()
	Send ("{F10 down}")
	Send ("{F10 up}")
	Sleep (258)
	HotKeySet ("{NUMPAD1}")
	Send ("{NUMPAD1 down}")
	Send ("{NUMPAD1 up}")
	HotKeySet ("{NUMPAD1}", "RayScroll")
	Sleep (100)
	$ray_key = RayLogic()
	Send ($ray_key)
	Sleep (79)
	MouseClick("left")
	$time_reload = TimerLogic()
	Sleep (79)
EndFunc

Func RayLogic ()
	$num = $num_ray - 1
	Local $time 
	For $i = 0 to $num Step 1
		$time = TimerDiff($time_cast[$i])
    If $next_ray[$i] = 1 Then
		$next_ray[$i] = 0
		Return ($k_array[$i])
	ElseIf $time >= $cd_array[$i] Then
		$next_ray[$i] = 0
		Return ($k_array[$i])
	EndIf
	Next
	Send ("end")
	Return ("")
EndFunc

Func TimerLogic()
	$key = $ray_key
	$time = TimerInit()
	$num = $num_ray - 1
	For $i = 0 To $num Step 1
		If $key = $k_array[$i] Then
			$time_cast[$i] = $time
		EndIf
	Next
EndFunc

;SprintRun Func
;Func SprintRun()
    ;If _IsPressed ("6A") Then
        ;Send ("{NUMPADMULT UP}")
		;Return ("")
    ;EndIf
    ;Send ("{NUMPADMULT DOWN}")
    ;Send ("m")
;EndFunc
 
Автор
I

IIIaMaH

Новичок
Сообщения
15
Репутация
0
CreatoR сказал(а):
К сожелению не понимаю что тут и как.
Пытаюсь решить проблему следующим образом:
Код:
#Include <Misc.au3>



HotKeySet ("{NUMPAD2}", "WriteFunc2")
While 1
	_MousHotKey("middle", "{NUMPADMULT}")
	Sleep (100)
WEnd


Func WriteFunc2()
	Send ("NUMPAD2 нажат")
	
EndFunc


Func _MousHotKey($mKey, $hKey)
	$imKey = $mKey
	$ihKey = $hKey
	If $imKey = "right" Then
		$mKeyHex=0x02
	ElseIf $imKey = "left" Then
		$mKeyHex=0x01
		ElseIf $imKey = "middle" Then
		$mKeyHex=0x04
	EndIf
	
	$mouse_state = _IsPressed($mKeyHex)
	If $mouse_state = 1 Then
		MouseDown ($imKey)
		Return (HotKeyMFunc($imKey, $ihKey))
	EndIf
	Return ("")
EndFunc

Func HotKeyMFunc($kMouse, $kHot)
	$ikMouse = $kMouse
	$ikHot = $kHot
	Send ($ikHot)
	Sleep(100)
	MouseUp ($ikMouse)
EndFunc
Хотелось бы довести до уровня #include
если есть описание HotkeySet (как именно задана функция в коде) прошу выложить
 

VladUs

Скриптер
Сообщения
621
Репутация
181
IIIaMaH [?]
К сожелению не понимаю что тут и как
Пример :
Код:
#Include <MouseOnEvent.au3>
#include <Misc.au3>

_MouseSetOnEvent($MOUSE_SECONDARYDOWN_EVENT, "_Left","","",0,0)

Func _Left ()
	If _IsPressed ("10") Then
	MsgBox(1,"msg","Сработала комбинация ПКМ + Shift")
	EndIf
EndFunc

While 1
	Sleep(100)
WEnd
 
Автор
I

IIIaMaH

Новичок
Сообщения
15
Репутация
0
VladUs сказал(а):
IIIaMaH [?]
К сожелению не понимаю что тут и как
Пример :
Код:
#Include <MouseOnEvent.au3>
#include <Misc.au3>

_MouseSetOnEvent($MOUSE_SECONDARYDOWN_EVENT, "_Left","","",0,0)

Func _Left ()
	If _IsPressed ("10") Then
	MsgBox(1,"msg","Сработала комбинация ПКМ + Shift")
	EndIf
EndFunc

While 1
	Sleep(100)
WEnd

да смысл не втом чтоб отловить мыш а втом чтоб отловить шифт+пкм =(


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

А данное объявление хоткея ну как то душа не лежит.
к примеру в автоХоткее это просто:
WinWait, Darkfall Online,
IfWinNotActive, Darkfall Online, , WinActivate, Darkfall Online,
WinWaitActive, Darkfall Online,
#NoEnv


+RButton::Runsprint()

Runsprint()
{
if GetKeyState("NumpadMult", "P")
{
Send {NumpadMult Up}
return
}
Send {NumpadMult Up}
Sleep, 50
Send {NumpadMult Down}
Sleep, 50
return
}
Хотелось бы подобной простоты и тут
 

VladUs

Скриптер
Сообщения
621
Репутация
181
да смысл не втом чтоб отловить мыш а втом чтоб отловить шифт+пкм

Вышеуказанный код это и делает. При нажатии ПКМ + Shift запускается функция.
Пробывали скрипт запускать ?
 
Автор
I

IIIaMaH

Новичок
Сообщения
15
Репутация
0
Щас коперну потещю!
Вот еще вопрос почему не работает _хоткейасигн в моем скрипте:
Код:
;WinWaitActive("Untitled - Darkfall Online")
#Include <Misc.au3>
#include <HotKey.au3>

;константа количество используемых реев
Const $num_ray = 5
;константа правая клавиша мыши
;$rmouse = 0x02

; Объявляем переменные
;блок назначения клавишь для реев
Global $k_array[$num_ray] = ["+6","+7","+8","+9","+0"]
;["+6"] impale
;["+7"] Pungent Mist
;["+8"] Unholy Caress
;["+9"] Dragon's Breath
;["+0"] Insect Swarm
; end

; блок значений времени отката реев
Global $cd_array[$num_ray] = [ 6500, 14000, 14000, 14000, 13000]
;[6500] Impale [14000] Pungent Mist [14000] Unholy Caress [14000] Dragon's Breath  [13000] Insect Swarm
; end 

;инициируем переменную перегрузки времени
$time_reload = 0
;масив для хранения времени последнего каста каждого рея и переменная для перегрузки
Global $time_cast[$num_ray], $ray_key

; инициализация массива очередности реев
; будет выбран ближайший элемент массива с значением 1
Global $next_ray[$num_ray] = [1, 1, 1, 1, 1]
; end 

; задаем горячую клавишу или сочетание клавиш для выбора рея и его каста
; Shift = +, Ctrl = ^, Alt = !
HotKeySet ("{NUMPAD1}", "RayScroll")
HotKeySet ("{END}", "RayScroll")
;_HotKeyAssign(BitOR($CK_SHIFT, $HK_FLAG_NOBLOCKHOTKEY), 'SprintRun')

While 1
    Sleep(100)
WEnd

;функция RayScroll
Func RayScroll ()
	Send ("{F10 down}")
	Send ("{F10 up}")
	Sleep (258)
	HotKeySet ("{NUMPAD1}")
	Send ("{NUMPAD1 down}")
	Send ("{NUMPAD1 up}")
	HotKeySet ("{NUMPAD1}", "RayScroll")
	Sleep (100)
	$ray_key = RayLogic()
	Send ($ray_key)
	Sleep (79)
	MouseClick("left")
	$time_reload = TimerLogic()
	Sleep (79)
EndFunc

Func RayLogic ()
	$num = $num_ray - 1
	Local $time 
	For $i = 0 to $num Step 1
		$time = TimerDiff($time_cast[$i])
    If $next_ray[$i] = 1 Then
		$next_ray[$i] = 0
		Return ($k_array[$i])
	ElseIf $time >= $cd_array[$i] Then
		$next_ray[$i] = 0
		Return ($k_array[$i])
	EndIf
	Next
	;Send ("end")
	Return ("")
EndFunc

Func TimerLogic()
	$key = $ray_key
	$time = TimerInit()
	$num = $num_ray - 1
	For $i = 0 To $num Step 1
		If $key = $k_array[$i] Then
			$time_cast[$i] = $time
		EndIf
	Next
EndFunc

;SprintRun Func
;Func SprintRun()
    ;If _IsPressed ("6A") Then
        ;Send ("{NUMPADMULT UP}")
		;Return ("")
    ;EndIf
    ;Send ("{NUMPADMULT DOWN}")
    ;Send ("m")
;EndFunc
 
Автор
I

IIIaMaH

Новичок
Сообщения
15
Репутация
0
VladUs сказал(а):
да смысл не втом чтоб отловить мыш а втом чтоб отловить шифт+пкм

Вышеуказанный код это и делает. При нажатии ПКМ + Shift запускается функция.
Пробывали скрипт запускать ?
Потестил щас вставлю в скрипт посмотрю
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
OffTopic:
чтот последнее время на форуме все новички задют первый вопрос о хоткеях, меня это пугает)
может им тогда стоит рассказать о AutoHotKey :scratch:
 
Верх