1

Тема: AHK:Присвоить координатам десятые значения вместо целых

Доброго времени суток. Подскажите пожалуйста как можно присвоить координатам десятые  значения вместо целых (например присвоить "0.6" вместо "1" координате - x).

*~LButton::
while GetKeyState("LButton","P")
{
    DllCall("mouse_event", uint, 1, int, 1, int, 2, uint, 0, int, 0)  ;1 координата - x , 2 координата - y

Sleep, 15 ;      ; первая задержка
 
    Sleep, 15   ;   первая задержка
}
Return
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2

Re: AHK:Присвоить координатам десятые значения вместо целых

А зачем? Система только целые воспринимает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK:Присвоить координатам десятые значения вместо целых

Уважаемый teadrinker дело в том что "1" это уже много, а если увеличить задержку "Sleep" то для координаты - "y" это мало. А если добавить к координате - "y" ещё "1" то неполучается с координатой - x (замкнутый круг какой то).

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4

Re: AHK:Присвоить координатам десятые значения вместо целых

Насколько я понял, суть скрипта - в движении курсора по наклонной вниз. Поясните, что конкретно не устраивает. Угол наклонной нужно сделать меньше?

5

Re: AHK:Присвоить координатам десятые значения вместо целых

mafckz да именно.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

6

Re: AHK:Присвоить координатам десятые значения вместо целых

Как насчет такого варианта:

*~LButton::
while GetKeyState("LButton","P")
{
    DllCall("mouse_event", uint, 1, int, 1, int, 2, uint, 0, int, 0)
    Sleep, 15
    DllCall("mouse_event", uint, 1, int, 0, int, 1, uint, 0, int, 0)
	Sleep, 15
}
Return

7

Re: AHK:Присвоить координатам десятые значения вместо целых

Ну а я наверное явно перемудрил:


 ; Число которое больше, должно быть целым. Допустимы отрицательные координаты.

x := 0.6
y := 2

ox := Abs(x / y)
mx := ox >= 1 ? x : 0
sx := x < 0 ? -1 : 1

oy := Abs(y / x)
my := oy >= 1 ? y : 0
sy := y < 0 ? -1 : 1

ox := oy < 1 ? Abs(ox / x) : ox
oy := ox < 1 ? Abs(oy / y) : oy

*~LButton:: 
	While GetKeyState("LButton","P")
	{ 
		If (ox < 1)
			 divx := A_Index // oy, (mx := divx - pdivx != 0 ? 1 * sx: 0), pdivx := divx
		Else If (oy < 1)
			 divy := A_Index // ox, (my := divy - pdivy != 0 ? 1 * sy : 0), pdivy := divy
		DllCall("mouse_event", uint, 1, int, mx, int, my, uint, 0, int, 0)   
		Sleep, 1
	}
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: Ядрён, 2016-04-17 01:42:01)

Re: AHK:Присвоить координатам десятые значения вместо целых

Спасибо большое serzh82saratov то что нужно ,только вот маленькая загвостка когда значение "координаты - x" остаётся пустой, "координата - y" работает как "координата - x".

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

9

Re: AHK:Присвоить координатам десятые значения вместо целых

Ядрён пишет:

когда значение "координаты - x" остаётся пустой

А почему она остаётся пустой?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: serzh82saratov, 2016-04-17 14:52:15)

Re: AHK:Присвоить координатам десятые значения вместо целых

Ещё нагляднее по моему задавать вектор в градусах.
Если в шапке имелось ввиду 0.6 к 1, то это где то 153°.
Правда у меня тут вместо тригонометрии, снова огород, если кто разбирается, хорошо бы если поправил.


 ; Angle - градусы от 0 до 360

Angle := 153

Angle := !Angle ? 360 : Angle
S := Ceil(Angle / 45)
D := Mod(Angle, 45) ? S : 0
sX := D ? [1,1,1,1,-1,-1,-1,-1][S] : [1,1,1,0,-1,-1,-1,0][S]
sY := D ? [-1,-1,1,1,1,1,-1,-1][S] : [-1,0,1,1,1,0,-1,-1][S]
V := D ? ["X","Y","Y","X","X","Y","Y","X"][S] : ""
X := V = "X" ? 0 : sX, Y := V = "Y" ? 0 : sY
Ratio := Mod(S, 2) ? 45 / Mod(Angle, 45) : 45 / (45 - Mod(Angle, 45))   

1:: 
	While GetKeyState("1","P")  
	{ 
		If (D && !(%V% := 0) && Mod(A_Index, Ratio) < 1) 
			%V% := s%V%
		DllCall("mouse_event", uint, 1, int, X, int, Y, uint, 0, int, 0)  
		Sleep,  1
	}
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK:Присвоить координатам десятые значения вместо целых

У команды MouseMove нет проблем с дробными координатами.

12

Re: AHK:Присвоить координатам десятые значения вместо целых

В каком смысле, просто то что ошибку не выдаёт?

Loop 100
	MouseMove, 0.6, 1, 0, R
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK:Присвоить координатам десятые значения вместо целых

Да.

14

Re: AHK:Присвоить координатам десятые значения вместо целых

А что это в итоге даёт?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK:Присвоить координатам десятые значения вместо целых

Если автору нужно движение курсора по наклонной, то логично прописать формулу этой прямой. К примеру подставляем X, а формула выдаёт соотв. Y. Y может получиться дробным числом. Но для MouseMove пригодны и такие координаты.

16

Re: AHK:Присвоить координатам десятые значения вместо целых

Ну а пример то можно увидеть?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK:Присвоить координатам десятые значения вместо целых

Например так:

F2::


x := 0
y := 0
Loop, 300
{
x := x + 1
y := x/17
MouseMove, x, y
}

18 (изменено: serzh82saratov, 2016-04-17 15:50:43)

Re: AHK:Присвоить координатам десятые значения вместо целых

Ну а как таким способом плавно двигать мышь например на 45° вправо и вниз пока удерживается кнопка?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK:Присвоить координатам десятые значения вместо целых

Через синус, косинус.

20

Re: AHK:Присвоить координатам десятые значения вместо целых

Об этом я в 10 посте говорил, напишешь?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21 (изменено: ypppu, 2016-04-17 16:03:26)

Re: AHK:Присвоить координатам десятые значения вместо целых

F2::
MouseGetPos, x, y
While GetKeyState("F2","P")  
{ 
x := x + 0.137
y := y + 0.137
MouseMove, x, y	
}

Синус и косинус, я думаю, не проблема добавить.

22 (изменено: Malcev, 2016-04-17 16:57:04)

Re: AHK:Присвоить координатам десятые значения вместо целых

angle := 45

*~LButton:: 
MouseGetPos, x, y
While GetKeyState("LButton","P")
{
   x+=cos(angle*0.01745329252)
   y+=sin(angle*0.01745329252)
   MouseMove, x, y	
}

23 (изменено: serzh82saratov, 2016-04-17 16:58:35)

Re: AHK:Присвоить координатам десятые значения вместо целых

Только тут судя по движению не 45° а 135°.
И таким способом получаются "холостые" итерации, что при задержке в цикле будет выражатся в нарушении ожидаемой скорости.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK:Присвоить координатам десятые значения вместо целых

Да, запутался в геометрии.

angle := 45

*~LButton:: 
MouseGetPos, x, y
While GetKeyState("LButton","P")
{
   x+=cos(angle*0.01745329252)
   y-=sin(angle*0.01745329252)
   MouseMove, x, y	
}

На счет пустых итераций не совсем понял.

25

Re: AHK:Присвоить координатам десятые значения вместо целых

Теперь если подставить 135, то неправильно.

Malcev пишет:

На счет пустых итераций не совсем понял.

Мы знаем что 100 итераций занимают определённое время, то есть представляем скорость движения. Тут у координат нецелые значения которые становятся следующим целым числом не на каждой итерации, соответственно на некоторых итерациях мышь остаётся в прежних координатах.
Хотя может оно и правильно, в моём варианте за 100 итераций курсор точно пройдёт по вектору 100 пикселей по той оси, угол к которой меньше. Зато в твоём наверное получается всегда равные отрезки по расстоянию.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26

Re: AHK:Присвоить координатам десятые значения вместо целых

Теперь если подставить 135, то неправильно.

Почему же неправильно?
http://www.berdov.com/img/ege/plane_geo … ample4.png

27

Re: AHK:Присвоить координатам десятые значения вместо целых

Да, почему то в голове засела система с нулём вверху и по часовой стрелке. Вообщем молодец!

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK:Присвоить координатам десятые значения вместо целых

Можно просто скорости прибавить, и итераций будет меньше. Взял у Malcev скрипт за основу.

SetMouseDelay, -1
pi := 4*ATan(1)
angle_deg := 290 ; нужный угол
speed := 10 ; скорость движаения
angle_rad := (2*pi/360)*angle_deg
Return

F2::
MouseGetPos, x, y
While GetKeyState("F2","P")  
{ 
x += speed*cos(angle_rad)
y -= speed*sin(angle_rad)
MouseMove, x, y
Sleep, 1
}

29

Re: AHK:Присвоить координатам десятые значения вместо целых

Огромное спасибо всем за участие , всё разобрался.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).