<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK:Умная мышь или да здравствует хэдшот!]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=13255</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=13255&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK:Умная мышь или да здравствует хэдшот!».]]></description>
		<lastBuildDate>Fri, 27 Jul 2018 20:51:49 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=127476#p127476</link>
			<description><![CDATA[<p><strong>Последняя, стабильная версия.</strong> Убрал все лишнее. Как обычно эффективность прицеливания проверял на <a href="https://aim400kg.ru/ea/">сайте</a>. Результаты хорошие. Отдельное спасибо stealzy за его замечания, рывки убрал. Использовать SetBatchLines -1 не вижу необходимости, не такие уж тут бешенные вычисления.<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                    --Умная мышь--                  ;;;
;;;                      28/07/2018г.                  ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Persistent
SetTimer, S1, 15 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                      MouseDelta                  ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PacX:=PacY:=SMX:=SMY:=0,ArrSMX:=[],ArrSMY:=[],Focus:=1
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Мышь-Переключение фокуса            ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S1:
ArrSMX.Push(SMX),ArrSMY.Push(SMY),SpTime:=20 ; 20*15,6 = 312мс-период расчета скорости
if (ArrSMX.Length()=SpTime and ArrSMY.Length()=SpTime){
DSX:=ArrSMX[SpTime]-ArrSMX[1],DSY:=ArrSMY[SpTime]-ArrSMY[1]
Speed:=sqrt(DSX*DSX+DSY*DSY)
ArrSMX.RemoveAt(1),ArrSMY.RemoveAt(1)
}
While if (ArrSMX.Length()&gt;SpTime-1)
ArrSMX.RemoveAt(1)
While if (ArrSMY.Length()&gt;SpTime-1)
ArrSMY.RemoveAt(1)


if (Speed&gt;=100) ;мышь ускорилась-отключить фокус
Focus:=0

if (Speed&lt;5) 
Focus:=1 ;мышь замедлилась-включить фокус

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;         Мышь-Регулирование скорости обзора       ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY,Focus,PacX,PacY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	if Focus
	PacX+=x,PacY+=y
	else
	PacX:=0,PacY:=0
	if (Focus and abs(PacX)&gt;=2)
		{
		ShiftX:=PacX//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,-ShiftX,int,0,uint,0,int,0)
		PacX:=0
		}
	if (Focus and abs(PacY)&gt;=2)
		{
		ShiftY:=PacY//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,0,int,-ShiftY,uint,0,int,0)
		PacY:=0
		}
	}
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;            Завершение работы скрипта             ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
End::ExitApp 
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Fri, 27 Jul 2018 20:51:49 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=127476#p127476</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=127090#p127090</link>
			<description><![CDATA[<p>Если вести мышь на границе заданной скорости курсор двигается рывками из-за резкого перехода из режима в режим. Надо бы сгладить переход, а то прыжки раздражают.<br />UPD: Добавил SetBatchLines -1.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 15 Jul 2018 17:37:41 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=127090#p127090</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=125319#p125319</link>
			<description><![CDATA[<p>Существует аналог - <a href="https://autohotkey.com/boards/viewtopic.php?f=6&amp;t=35934">GGGlide - Mouse Pointer Momentum</a>.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 12 May 2018 18:06:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=125319#p125319</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=125211#p125211</link>
			<description><![CDATA[<p>Скрипт очень полезен не только для игр, но и приятней попадать мышкой по кнопкам интерфеса страиниц, окон и тд. Как&nbsp; еще больше уменьшить степень чувствительности при выцеливании?</p>]]></description>
			<author><![CDATA[null@example.com (Leone_Galante)]]></author>
			<pubDate>Tue, 08 May 2018 09:19:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=125211#p125211</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124786#p124786</link>
			<description><![CDATA[<p>Потестил в игре, комфортней играть.</p>]]></description>
			<author><![CDATA[null@example.com (Leone_Galante)]]></author>
			<pubDate>Tue, 17 Apr 2018 18:37:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124786#p124786</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124784#p124784</link>
			<description><![CDATA[<p>Очень интересная идея! Но боюсь моих знаний не хватит хотя бы попробовать данный скрипт.&nbsp; Принцип понял, наверное )) попробую. По результатам отпишусь.</p>]]></description>
			<author><![CDATA[null@example.com (Leone_Galante)]]></author>
			<pubDate>Tue, 17 Apr 2018 17:21:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124784#p124784</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124722#p124722</link>
			<description><![CDATA[<p><strong>Новый улучшенный код.</strong><br />В основе лежит все та же идея - автоматический мониторинг активности мыши: при быстром перемещении мыши скрипт не вмешивается в её работу; при замедленном движении скрипт снижает чувствительность мыши что позволяет делать ее более точной. Данный код я настраивал <a href="https://aim400kg.ru/ea/">на сайте</a>, что позволило мне объективно увидеть эффективность кода: я набил на 7000 больше чем обычно.<br />Мышь стала более точной, и теперь я могу попадать в более мелкие цели. Базовая настройка DPI=800. В режиме фокуса этот параметр скрипт снижает до 400 (точная мышь). <br />	В отличии от предыдущих версий кода режим прицеливания включается автоматически, а не при нажатии горячей клавиши (т.е. скрипт работает постоянно с момента запуска). Данный подход дает преимущества в играх где нет явного прицеливания например: &quot;Prey&quot; или&nbsp; онлайн-игры (&quot;Doom&quot; и др.).<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                    --Умная мышь--                  ;;;
;;;                 Claus555, 15/04/2018г.             ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Persistent
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Создание  таймера 7,8(мс)           ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZX:=0
;приближение к таймеру 10 мс 
SetTimer, S1, 15 
loop {
++ZX
if (ZX=18720) 
Break   
}
SetTimer, S2, 15

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                      MouseDelta                  ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PacX:=PacY:=SMX:=SMY:=0,ArrSMX:=[],ArrSMY:=[],Focus:=1
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Мышь-Переключение фокуса            ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S1:
S2:
ArrSMX.Push(SMX),ArrSMY.Push(SMY),SpTime:=40 ; 40*7,8 = 312мс-период расчета скорости
if (ArrSMX.Length()=SpTime and ArrSMY.Length()=SpTime){
DSX:=ArrSMX[SpTime]-ArrSMX[1],DSY:=ArrSMY[SpTime]-ArrSMY[1]
Speed:=sqrt(DSX*DSX+DSY*DSY)
ArrSMX.RemoveAt(1),ArrSMY.RemoveAt(1)
}
While if (ArrSMX.Length()&gt;SpTime-1)
ArrSMX.RemoveAt(1)
While if (ArrSMY.Length()&gt;SpTime-1)
ArrSMY.RemoveAt(1)

if (Speed&gt;=50)
Focus:=0

START1:=(Speed&lt;50)?1:0 ;пуск таймера
START:=T(D(&quot;START1&quot;),&quot;START&quot;,100) ;таймер 100мс
if (U(&quot;START&quot;) and Speed&lt;50) ;если по оканчании 100мс скорость ниже 50
Focus:=1 ;мышь замедлилась-включить фокус

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;         Мышь-Регулирование скорости обзора       ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY,Focus,PacX,PacY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	if Focus
	PacX+=x,PacY+=y
	else
	PacX:=0,PacY:=0
	if (Focus and abs(PacX)&gt;=2)
		{
		ShiftX:=PacX//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,-ShiftX,int,0,uint,0,int,0)
		PacX:=0
		}
	if (Focus and abs(PacY)&gt;=2)
		{
		ShiftY:=PacY//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,0,int,-ShiftY,uint,0,int,0)
		PacY:=0
		}
	}
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                    Срабатывание                  ;;;;                                                                                                                                                                                                                                      ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D(X)
{
local Z
Z:=(%X%!=d%X% and %X%)?1:0,d%X%:=%X%
Return Z
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                      Отпадание                   ;;;;                                                                                                                                                                                                                                      ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
U(X)
{
local Z
Z:=(%X%!=u%X% and u%X%)?1:0,u%X%:=%X%
Return Z
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                       Таймер                     ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T(X,Y,V)
{
global 
if (X and !T1%Y%)
T1%Y%:=1,T2%Y%:=A_TickCount

if (T2%Y%=&quot;&quot; or A_TickCount-T2%Y%&gt;=V)
T1%Y%:=0

Return T1%Y%
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;            Завершение работы скрипта             ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
End::ExitApp 
</code></pre></div><p>Код разбит на две части основной файл и подгружаемый &quot;MouseDelta.ahk&quot; который нужно расположить в директории основного.<br /><strong>&quot;MouseDelta.ahk&quot;:</strong><br /></p><div class="codebox"><pre><code>

; Instantiate this class and pass it a func name or a Function Object
; The specified function will be called with the delta move for the X and Y axes
; Normally, there is no windows message &quot;mouse stopped&quot;, so one is simulated.
; After 10ms of no mouse movement, the callback is called with 0 for X and Y
Class MouseDelta {
	State := 0
	__New(callback){
		;~ this.TimeoutFn := this.TimeoutFunc.Bind(this)
		this.MouseMovedFn := this.MouseMoved.Bind(this)

		this.Callback := callback
	}

	Start(){
		static DevSize := 8 + A_PtrSize, RIDEV_INPUTSINK := 0x00000100
		; Register mouse for WM_INPUT messages.
		VarSetCapacity(RAWINPUTDEVICE, DevSize)
		NumPut(1, RAWINPUTDEVICE, 0, &quot;UShort&quot;)
		NumPut(2, RAWINPUTDEVICE, 2, &quot;UShort&quot;)
		NumPut(RIDEV_INPUTSINK, RAWINPUTDEVICE, 4, &quot;Uint&quot;)
		; WM_INPUT needs a hwnd to route to, so get the hwnd of the AHK Gui.
		; It doesn&#039;t matter if the GUI is showing, it still exists
		Gui +hwndhwnd
		NumPut(hwnd, RAWINPUTDEVICE, 8, &quot;Uint&quot;)
 
		this.RAWINPUTDEVICE := RAWINPUTDEVICE
		DllCall(&quot;RegisterRawInputDevices&quot;, &quot;Ptr&quot;, &amp;RAWINPUTDEVICE, &quot;UInt&quot;, 1, &quot;UInt&quot;, DevSize )
		OnMessage(0x00FF, this.MouseMovedFn)
		this.State := 1
		return this	; allow chaining
	}
	
	Stop(){
		static RIDEV_REMOVE := 0x00000001
		static DevSize := 8 + A_PtrSize
		OnMessage(0x00FF, this.MouseMovedFn, 0)
		RAWINPUTDEVICE := this.RAWINPUTDEVICE
		NumPut(RIDEV_REMOVE, RAWINPUTDEVICE, 4, &quot;Uint&quot;)
		DllCall(&quot;RegisterRawInputDevices&quot;, &quot;Ptr&quot;, &amp;RAWINPUTDEVICE, &quot;UInt&quot;, 1, &quot;UInt&quot;, DevSize )
		this.State := 0
		return this	; allow chaining
	}
	
	SetState(state){
		if (state &amp;&amp; !this.State)
			this.Start()
		else if (!state &amp;&amp; this.State)
			this.Stop()
		return this	; allow chaining
	}

	Delete(){
		this.Stop()
		;~ this.TimeoutFn := &quot;&quot;
		this.MouseMovedFn := &quot;&quot;
	}
	
	; Called when the mouse moved.
	; Messages tend to contain small (+/- 1) movements, and happen frequently (~20ms)
	MouseMoved(wParam, lParam){
		Critical
		; RawInput statics
		static DeviceSize := 2 * A_PtrSize, iSize := 0, sz := 0, pcbSize:=8+2*A_PtrSize, offsets := {x: (20+A_PtrSize*2), y: (24+A_PtrSize*2)}, uRawInput
 
		static axes := {x: 1, y: 2}
 
		; Get hDevice from RAWINPUTHEADER to identify which mouse this data came from
		VarSetCapacity(header, pcbSize, 0)
		If (!DllCall(&quot;GetRawInputData&quot;, &quot;UPtr&quot;, lParam, &quot;uint&quot;, 0x10000005, &quot;UPtr&quot;, &amp;header, &quot;Uint*&quot;, pcbSize, &quot;Uint&quot;, pcbSize) or ErrorLevel)
			Return 0
		ThisMouse := NumGet(header, 8, &quot;UPtr&quot;)

		; Find size of rawinput data - only needs to be run the first time.
		if (!iSize){
			r := DllCall(&quot;GetRawInputData&quot;, &quot;UInt&quot;, lParam, &quot;UInt&quot;, 0x10000003, &quot;Ptr&quot;, 0, &quot;UInt*&quot;, iSize, &quot;UInt&quot;, 8 + (A_PtrSize * 2))
			VarSetCapacity(uRawInput, iSize)
		}
		sz := iSize	; param gets overwritten with # of bytes output, so preserve iSize
		; Get RawInput data
		r := DllCall(&quot;GetRawInputData&quot;, &quot;UInt&quot;, lParam, &quot;UInt&quot;, 0x10000003, &quot;Ptr&quot;, &amp;uRawInput, &quot;UInt*&quot;, sz, &quot;UInt&quot;, 8 + (A_PtrSize * 2))
 
		x := 0, y := 0	; Ensure we always report a number for an axis. Needed?
		x := NumGet(&amp;uRawInput, offsets.x, &quot;Int&quot;)
		y := NumGet(&amp;uRawInput, offsets.y, &quot;Int&quot;)
 
		this.Callback.(ThisMouse, x, y)
 
		;~ ; There is no message for &quot;Stopped&quot;, so simulate one
		;~ fn := this.TimeoutFn
		;~ SetTimer, % fn, -50
	}
 
	;~ TimeoutFunc(){
		;~ this.Callback.(&quot;&quot;, 0, 0)
	;~ }
 
}

</code></pre></div><p>Для тех кто не знает что такое #include, вот полный код c &quot;MouseDelta&quot;. Он работоспособен и не требует дополнительных файлов.<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                    --Умная мышь--                  ;;;
;;;                 Claus555, 15/04/2018г.             ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Persistent
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Создание  таймера 7,8(мс)           ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZX:=0
;приближение к таймеру 10 мс 
SetTimer, S1, 15 
loop {
++ZX
if (ZX=18720) 
Break   
}
SetTimer, S2, 15

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                      MouseDelta                  ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PacX:=PacY:=SMX:=SMY:=0,ArrSMX:=[],ArrSMY:=[],Focus:=1

; Instantiate this class and pass it a func name or a Function Object
; The specified function will be called with the delta move for the X and Y axes
; Normally, there is no windows message &quot;mouse stopped&quot;, so one is simulated.
; After 10ms of no mouse movement, the callback is called with 0 for X and Y
Class MouseDelta {
	State := 0
	__New(callback){
		;~ this.TimeoutFn := this.TimeoutFunc.Bind(this)
		this.MouseMovedFn := this.MouseMoved.Bind(this)

		this.Callback := callback
	}

	Start(){
		static DevSize := 8 + A_PtrSize, RIDEV_INPUTSINK := 0x00000100
		; Register mouse for WM_INPUT messages.
		VarSetCapacity(RAWINPUTDEVICE, DevSize)
		NumPut(1, RAWINPUTDEVICE, 0, &quot;UShort&quot;)
		NumPut(2, RAWINPUTDEVICE, 2, &quot;UShort&quot;)
		NumPut(RIDEV_INPUTSINK, RAWINPUTDEVICE, 4, &quot;Uint&quot;)
		; WM_INPUT needs a hwnd to route to, so get the hwnd of the AHK Gui.
		; It doesn&#039;t matter if the GUI is showing, it still exists
		Gui +hwndhwnd
		NumPut(hwnd, RAWINPUTDEVICE, 8, &quot;Uint&quot;)
 
		this.RAWINPUTDEVICE := RAWINPUTDEVICE
		DllCall(&quot;RegisterRawInputDevices&quot;, &quot;Ptr&quot;, &amp;RAWINPUTDEVICE, &quot;UInt&quot;, 1, &quot;UInt&quot;, DevSize )
		OnMessage(0x00FF, this.MouseMovedFn)
		this.State := 1
		return this	; allow chaining
	}
	
	Stop(){
		static RIDEV_REMOVE := 0x00000001
		static DevSize := 8 + A_PtrSize
		OnMessage(0x00FF, this.MouseMovedFn, 0)
		RAWINPUTDEVICE := this.RAWINPUTDEVICE
		NumPut(RIDEV_REMOVE, RAWINPUTDEVICE, 4, &quot;Uint&quot;)
		DllCall(&quot;RegisterRawInputDevices&quot;, &quot;Ptr&quot;, &amp;RAWINPUTDEVICE, &quot;UInt&quot;, 1, &quot;UInt&quot;, DevSize )
		this.State := 0
		return this	; allow chaining
	}
	
	SetState(state){
		if (state &amp;&amp; !this.State)
			this.Start()
		else if (!state &amp;&amp; this.State)
			this.Stop()
		return this	; allow chaining
	}

	Delete(){
		this.Stop()
		;~ this.TimeoutFn := &quot;&quot;
		this.MouseMovedFn := &quot;&quot;
	}
	
	; Called when the mouse moved.
	; Messages tend to contain small (+/- 1) movements, and happen frequently (~20ms)
	MouseMoved(wParam, lParam){
		Critical
		; RawInput statics
		static DeviceSize := 2 * A_PtrSize, iSize := 0, sz := 0, pcbSize:=8+2*A_PtrSize, offsets := {x: (20+A_PtrSize*2), y: (24+A_PtrSize*2)}, uRawInput
 
		static axes := {x: 1, y: 2}
 
		; Get hDevice from RAWINPUTHEADER to identify which mouse this data came from
		VarSetCapacity(header, pcbSize, 0)
		If (!DllCall(&quot;GetRawInputData&quot;, &quot;UPtr&quot;, lParam, &quot;uint&quot;, 0x10000005, &quot;UPtr&quot;, &amp;header, &quot;Uint*&quot;, pcbSize, &quot;Uint&quot;, pcbSize) or ErrorLevel)
			Return 0
		ThisMouse := NumGet(header, 8, &quot;UPtr&quot;)

		; Find size of rawinput data - only needs to be run the first time.
		if (!iSize){
			r := DllCall(&quot;GetRawInputData&quot;, &quot;UInt&quot;, lParam, &quot;UInt&quot;, 0x10000003, &quot;Ptr&quot;, 0, &quot;UInt*&quot;, iSize, &quot;UInt&quot;, 8 + (A_PtrSize * 2))
			VarSetCapacity(uRawInput, iSize)
		}
		sz := iSize	; param gets overwritten with # of bytes output, so preserve iSize
		; Get RawInput data
		r := DllCall(&quot;GetRawInputData&quot;, &quot;UInt&quot;, lParam, &quot;UInt&quot;, 0x10000003, &quot;Ptr&quot;, &amp;uRawInput, &quot;UInt*&quot;, sz, &quot;UInt&quot;, 8 + (A_PtrSize * 2))
 
		x := 0, y := 0	; Ensure we always report a number for an axis. Needed?
		x := NumGet(&amp;uRawInput, offsets.x, &quot;Int&quot;)
		y := NumGet(&amp;uRawInput, offsets.y, &quot;Int&quot;)
 
		this.Callback.(ThisMouse, x, y)
 
		;~ ; There is no message for &quot;Stopped&quot;, so simulate one
		;~ fn := this.TimeoutFn
		;~ SetTimer, % fn, -50
	}
 
	;~ TimeoutFunc(){
		;~ this.Callback.(&quot;&quot;, 0, 0)
	;~ }
 
}

md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Мышь-Переключение фокуса            ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S1:
S2:
ArrSMX.Push(SMX),ArrSMY.Push(SMY),SpTime:=40 ; 40*7,8 = 312мс-период расчета скорости
if (ArrSMX.Length()=SpTime and ArrSMY.Length()=SpTime){
DSX:=ArrSMX[SpTime]-ArrSMX[1],DSY:=ArrSMY[SpTime]-ArrSMY[1]
Speed:=sqrt(DSX*DSX+DSY*DSY)
ArrSMX.RemoveAt(1),ArrSMY.RemoveAt(1)
}
While if (ArrSMX.Length()&gt;SpTime-1)
ArrSMX.RemoveAt(1)
While if (ArrSMY.Length()&gt;SpTime-1)
ArrSMY.RemoveAt(1)

if (Speed&gt;=50)
Focus:=0

START1:=(Speed&lt;50)?1:0 ;пуск таймера
START:=T(D(&quot;START1&quot;),&quot;START&quot;,100) ;таймер 100мс
if (U(&quot;START&quot;) and Speed&lt;50) ;если по оканчании 100мс скорость ниже 50
Focus:=1 ;мышь замедлилась-включить фокус

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;         Мышь-Регулирование скорости обзора       ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY,Focus,PacX,PacY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	if Focus
	PacX+=x,PacY+=y
	else
	PacX:=0,PacY:=0
	if (Focus and abs(PacX)&gt;=2)
		{
		ShiftX:=PacX//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,-ShiftX,int,0,uint,0,int,0)
		PacX:=0
		}
	if (Focus and abs(PacY)&gt;=2)
		{
		ShiftY:=PacY//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,0,int,-ShiftY,uint,0,int,0)
		PacY:=0
		}
	}
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                    Срабатывание                  ;;;;                                                                                                                                                                                                                                      ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D(X)
{
local Z
Z:=(%X%!=d%X% and %X%)?1:0,d%X%:=%X%
Return Z
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                      Отпадание                   ;;;;                                                                                                                                                                                                                                      ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
U(X)
{
local Z
Z:=(%X%!=u%X% and u%X%)?1:0,u%X%:=%X%
Return Z
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                       Таймер                     ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T(X,Y,V)
{
global 
if (X and !T1%Y%)
T1%Y%:=1,T2%Y%:=A_TickCount

if (T2%Y%=&quot;&quot; or A_TickCount-T2%Y%&gt;=V)
T1%Y%:=0

Return T1%Y%
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;            Завершение работы скрипта             ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
End::ExitApp 
</code></pre></div><p>Пусть кто нибудь ответит. Интересно чужое мнение <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Sun, 15 Apr 2018 12:03:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124722#p124722</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123249#p123249</link>
			<description><![CDATA[<p>Что интересно все тачпады ноутбуков работают по такому же алгоритму:<br />скорость курсора = скорости перемещения пальца в квадрате.<br />Причем там это все сделано на уровне драйверов и никак не регулируется.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 21 Jan 2018 02:12:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123249#p123249</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123247#p123247</link>
			<description><![CDATA[<p>Доработал код, теперь частоту опроса мыши можно не настраивать- работает с любой мышью.<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                      --Умная мышь--                  ;;;
;;;                  EasyHard, 21/12/2018г.              ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SMX:=OldSMX:=SMY:=OldSMY:=DSX:=DSY:=PacX:=PacY:=0
#SingleInstance force
#Persistent
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(0)
SetTimer, SpeedMouse, 50

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Вычисление скорости перемещения физической мыши    ;;;
;;;    /автоматический выбор режима(авт.смена DPI)       ;;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SpeedMouse:
DSX:=abs(OldSMX-SMX),OldSMX:=SMX,DSY:=abs(OldSMY-SMY),OldSMY:=SMY
if (DSX&gt;30 or DSY&gt;30) ;настраиваемые параметры-можно поэкспериментировать
Focus:=0 ;&quot;быстрая мышь&quot;-&quot;режим-упреждение&quot;-DPI базовый(настройка чувств.мыши/у меня 800DPI)
else 
Focus:=1 ;&quot;точная мышь&quot;-&quot;режим-прицеливание&quot;-измененный DPI(800/2=400)
Return 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;         ПКМ-Включение режима прицеливания        ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*RButton::md.SetState(1)
*RButton up::md.SetState(0)

End::ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;         Мышь-Регулирование скорости обзора       ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY,Focus,PacX,PacY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	if Focus
	PacX+=x,PacY+=y
	else
	PacX:=0,PacY:=0
	if (Focus and abs(PacX)&gt;=4)
		{
		ShiftX:=PacX//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,-ShiftX,int,0,uint,0,int,0)
		PacX:=0
		}
	if (Focus and abs(PacY)&gt;=4)
		{
		ShiftY:=PacY//2
		DllCall(&quot;mouse_event&quot;,uint,1,int,0,int,-ShiftY,uint,0,int,0)
		PacY:=0
		}
	}
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Sat, 20 Jan 2018 21:46:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123247#p123247</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122709#p122709</link>
			<description><![CDATA[<p><strong>Yasen&#039;</strong>, в принципе так и было <a href="https://autohotkey.com/boards/viewtopic.php?f=19&amp;t=10159">задумано автором</a>. Но мне не понравилось умножение потому что картинка постоянно дергается-раздражает. При делении такое меньше происходит. Картинка плавнее, практически незаметно вмешательство. Я думаю все таки возможно мой код, незначительно переделав, приспособить под деление и на высоких частотах опроса мыши - для этого нужно формировать пакеты: суммировать их до тех пор пока не станет возможным деление.</p>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Tue, 02 Jan 2018 11:47:43 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122709#p122709</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122702#p122702</link>
			<description><![CDATA[<p>Моя древняя мышь не поддерживает почему-то деление DPI, за то прекрасно умножает его. <strong>sabir.yanin2014</strong> Немного переделал твой скрипт, теперь он постоянно ускоряет мышь, а по нажатию кнопки, возвращает ей нормальную скорость. В итоге выкручиваю в игре чувствительность на минимум и настраиваю переменные скрипта под свои нужды, получается подобие SniperButton. Двойное нажатие LWin выключает данную ф-ию. <br /></p><div class="codebox"><pre><code>
SMX:=OldSMX:=SMY:=OldSMY:=DSX:=DSY:=0
#SingleInstance force
#Persistent
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(1)
SetTimer, SpeedMouse, 10

slow:=1		;Пониженная скорость(slow &lt;= 1)
smid:=2.5 	;Средняя множитель скорости мыши
shig:=5 	;Повышенный множитель скорости мыши
sstand:=smid	;Постоянный множитель скорости мыши


Focus := 0
sp := sstand
LWin:: Gosub, PressCount            ; Запускается счётчик нажатий.

LWin(1):                            ; Код для одиночного нажатия LWin.
  Focus := 1
Return

LWin(2):                            ; Код для двойного нажатия LWin.
  Focus := 0
Return

XButton2:: sp := slow
XButton2 up:: sp := sstand

~LAlt:: sp := shig
~LAlt up:: sp := sstand

SpeedMouse:
DSX:=abs(OldSMX-SMX),OldSMX:=SMX
DSY:=abs(OldSMY-SMY),OldSMY:=SMY
Return
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY,Focus,sp
	if (MouseID)
	{
	SMX+=x
	SMY+=y
	if Focus
		{
		ShiftX:=x*sp
		ShiftY:=y*sp
		DllCall(&quot;mouse_event&quot;,uint,1,int,ShiftX,int,ShiftY,uint,0,int,0)
		}
	}
}




PressCount:
  Pause_=200     ; Если пауза меньше этого количества миллисекунд, то нажатие
                 ; двойное. Если больше, то оно расценивается как 2 одиночных.
  If not Second
  {
    Second=1
    SetTimer, DoublePress, -%Pause_%
  }
  Else
  {
    Second=0
    SetTimer, %A_ThisHotkey%(2), -1
  }
Return

DoublePress:
  If not Second
    Return
  Second=0
  SetTimer, %A_ThisHotkey%(1), -1
Return

Insert::Reload
End::ExitApp
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Yasen')]]></author>
			<pubDate>Tue, 02 Jan 2018 03:23:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122702#p122702</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122580#p122580</link>
			<description><![CDATA[<p><strong>Мышь-джойстик</strong><br />Вот рабочий вариант предыдущего кода:<br /></p><div class="codebox"><pre><code> 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                     -Мышь-Джойстик-                  ;;;
;;;                  EasyHard, 28/12/2017г.              ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SMX:=OldSMX:=SMY:=OldSMY:=DSX:=DSY:=0
#SingleInstance force
#Persistent
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(0)
SetTimer, SpeedMouse, 100


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                Мышь-режим джойстика              ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SpeedMouse:
DSX:=SMX-OldSMX,OldSMX:=SMX,DSY:=SMY-OldSMY,OldSMY:=SMY
if (DSX&gt;50)
{
send {e down}
SetTimer, SpeedMouse, Off
SetTimer, Right1, -50
}

if (DSX&lt;-50)
{
send {q down}
SetTimer, SpeedMouse, Off
SetTimer, Left1, -50
}

if (DSY&gt;50)
{
send {s down}
SetTimer, SpeedMouse, Off
SetTimer, Down1, -50
}

if (DSY&lt;-50)
{
send {w down}
SetTimer, SpeedMouse, Off
SetTimer, Up1, -50
}
Return 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                        Метки                     ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Right1:
send {e up}
SetTimer, Right2, -250
Return 
Right2: 
OldSMX:=SMX
SetTimer, SpeedMouse, On
Return  

Left1:
send {q up}
SetTimer, Left2, -250
Return 
Left2: 
OldSMX:=SMX
SetTimer, SpeedMouse, On
Return  

Down1:
send {s up}
SetTimer, Down2, -250
Return 
Down2: 
OldSMY:=SMY
SetTimer, SpeedMouse, On
Return

Up1:
send {w up}
SetTimer, Up2, -250
Return 
Up2: 
OldSMY:=SMY
SetTimer, SpeedMouse, On
Return   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;              Включение мыши-джойстика            ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*x::
send {LAlt Down}
md.SetState(1)
Return 
*x up::
send {LAlt Up}
md.SetState(0)
Return 

End::ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;               Мышь-блокировка камеры             ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	DllCall(&quot;mouse_event&quot;,uint,1,int,-x,int,-y,uint,0,int,0)
	}
}

</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Thu, 28 Dec 2017 14:39:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122580#p122580</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122569#p122569</link>
			<description><![CDATA[<p><strong>Мышь-Джойстик</strong></p><p>Возникла идея превратить мышь в &quot;джойстик&quot;: при нажатии ключевой клавиши-блокировать камеру, а на смещение мыши реагировать нажатием клавиши. Таким образом получается аналог джойстика с четырьмя направлениями которые можно &quot;забиндить&quot; под четыре клавиши:<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                     -Мышь-Джойстик-                  ;;;
;;;                  EasyHard, 28/12/2017г.              ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SMX:=OldSMX:=SMY:=OldSMY:=DSX:=DSY:=0
#SingleInstance force
#Persistent
#include MouseDelta.ahk
md:=new MouseDelta(&quot;MouseEvent&quot;).Start()
md.SetState(0)
SetTimer, SpeedMouse, 100


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                Мышь-режим джойстика              ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SpeedMouse:
DSX:=SMX-OldSMX,OldSMX:=SMX,DSY:=SMY-OldSMY,OldSMY:=SMY
if (DSX&gt;50) ;смещение вправо
send {vk33}
if (DSX&lt;-50) ;смещение влево
send {vk31}
if (DSY&gt;50) ;смещение вниз
send {vk34}
if (DSY&lt;-50) ;смещение вверх
send {vk32}
Return 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;          Пробел-Включение мыши-джойстика         ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*Space::md.SetState(1)
*Space up::md.SetState(0)

End::ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;               Мышь-блокировка камеры             ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseEvent(MouseID, x := 0, y := 0){
global SMX,SMY
	if (MouseID)
	{
	SMX+=x,SMY+=y
	DllCall(&quot;mouse_event&quot;,uint,1,int,-x,int,-y,uint,0,int,0)
	}
}
</code></pre></div><p>В этом коде частота опроса мыши роли почти не играет, но мышь работает лучше (меньше смещение камеры во время блокировки) на частоте 1000Гц. Здесь также нужен в директории скрипта файл MouseDelta.ahk.</p>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Thu, 28 Dec 2017 03:27:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122569#p122569</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122565#p122565</link>
			<description><![CDATA[<p><strong>Dimaryo</strong>, возможно вы были правы и мой код у вас не работал. Я отредактировал скрипт и вы можете проверить.<br />Нужно было в начале кода обнулить переменные.</p>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Thu, 28 Dec 2017 01:28:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122565#p122565</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Умная мышь или да здравствует хэдшот!]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=122383#p122383</link>
			<description><![CDATA[<p><strong>Dimaryo</strong>, я же закомментировал: &quot;настраиваемые параметры&quot; в данном случае 30. <br />Фрагмент кода:<br /></p><div class="codebox"><pre><code>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Вычисление скорости перемещения физической мыши    ;;;
;;;    /автоматический выбор режима(авт.смена DPI)       ;;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SpeedMouse:
DSX:=abs(OldSMX-SMX),OldSMX:=SMX,DSY:=abs(OldSMY-SMY),OldSMY:=SMY
if (DSX&gt;30 or DSY&gt;30) ;настраиваемые параметры-можно поэкспериментировать
Focus:=0 ;&quot;быстрая мышь&quot;-&quot;режим-упреждение&quot;-DPI базовый(настройка чувств.мыши/у меня 800DPI)
else 
Focus:=1 ;&quot;точная мышь&quot;-&quot;режим-прицеливание&quot;-измененный DPI(800/2=400)
....
</code></pre></div><p> <br />Если вы хотите увеличить &quot;чувствительность&quot; скрипта нужно уменьшить величину порога. Смысл: скрипт через каждые 100 мс проверяет на сколько сместилась физическая мышь. Условно говоря 30 это пороговая скорость мыши 30пкс/100мс. Если вместо 30 выставить 10 то мышь будет &quot;срываться&quot; -ускоряться до 800 DPI при меньшем смещении мыши. Если выставить 60 то мышь станет более &quot;грубая&quot; т.е. чтобы включить автоускорение нужно сильно и быстро сместить мышь. Поэтому экспериментируйте -меняйте оба параметра так: &quot;if (DSX&gt;60 or DSY&gt;60)&quot;. <br />	И снизьте частоту опроса мыши на минимум.</p>]]></description>
			<author><![CDATA[null@example.com (sabir.yanin2014)]]></author>
			<pubDate>Sat, 16 Dec 2017 21:39:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=122383#p122383</guid>
		</item>
	</channel>
</rss>
