<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Проверка на эмуляцию передвижения мыши.]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16200&amp;type=atom" />
	<updated>2021-06-06T12:01:19Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=16200</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=148308#p148308" />
			<content type="html"><![CDATA[<p><strong>Jester</strong>, ознакомьтесь, пожалуйста, с <a href="http://forum.script-coding.com/misc.php?action=rules">правилами</a> форума, отредактируйте свой пост.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-06-06T12:01:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=148308#p148308</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=148305#p148305" />
			<content type="html"><![CDATA[<p>а можно сделать так:</p><p>If INJECTED = 1<br />{<br />Send, 123<br />}<br />return</p><p>?</p>]]></content>
			<author>
				<name><![CDATA[Jester]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41337</uri>
			</author>
			<updated>2021-06-06T10:08:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=148305#p148305</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146913#p146913" />
			<content type="html"><![CDATA[<p>Смотря, какая эмуляция. Вариант, что я привёл, может определить эмуляцию на программном уровне. Если на уровне драйвера, то не сможет, но в таком случае можно определить, что события произошли не от конкретного устройства.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-03-24T16:16:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146913#p146913</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146912#p146912" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> Получается если эмуляция была с помощью сторонней библиотеки, то этот метод его не обнаружит? Просто интересно. </p><p><a href="https://ibb.co/FHYqHh8"><span class="postimg"><img src="https://i.ibb.co/kmD6mGq/emul.png" alt="https://i.ibb.co/kmD6mGq/emul.png" /></span></a><br />Скрипт нарисовал линию*</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-03-24T13:58:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146912#p146912</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146906#p146906" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><div class="quotebox"><cite>Jester пишет:</cite><blockquote><p>хочу сделать так, чтобы мой АХК скрипт мог понять, реально ли я вожу мышкой или это делает другая программа</p></blockquote></div><p>В скрипте есть переменная <em>INJECTED</em>, можете сделать её глобальной, и по её содержанию ваш скрипт всегда сможет понять, были ли последние действия мыши человеческими или программными.</p></blockquote></div><p>Понял! Спасибо большое <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Jester]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41337</uri>
			</author>
			<updated>2021-03-24T10:11:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146906#p146906</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146894#p146894" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Jester пишет:</cite><blockquote><p>хочу сделать так, чтобы мой АХК скрипт мог понять, реально ли я вожу мышкой или это делает другая программа</p></blockquote></div><p>В скрипте есть переменная <em>INJECTED</em>, можете сделать её глобальной, и по её содержанию ваш скрипт всегда сможет понять, были ли последние действия мыши человеческими или программными.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-03-23T16:04:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146894#p146894</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146893#p146893" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Такой скрипт будет выдавать информацию о событиях мыши. Если событие эмулированное, INJECTED: 1.<br /></p><div class="codebox"><pre><code>#Persistent
Setbatchlines, -1

hHook := new WindowsHook(WH_MOUSE_LL := 14, &quot;LowLevelMouseProc&quot;)

LowLevelMouseProc(nCode, wParam, lParam)  {
   static oMem := [], lpData, size := VarSetCapacity(lpData, 16 + A_PtrSize*2, 0)

   DllCall(&quot;msvcrt\memmove&quot;, Ptr, &amp;lpData, Ptr, lParam, Ptr, size)
   oMem.Push([wParam, &amp;lpData])
   timer := Func(&quot;EventHandling&quot;).Bind(oMem)  ; во избежание фризов мыши обработка событий должна
   SetTimer, % timer, -10                     ; происходить по таймеру, а не в теле этой функции
   Return DllCall(&quot;CallNextHookEx&quot;, &quot;Ptr&quot;, 0, &quot;Int&quot;, nCode, &quot;Ptr&quot;, wParam, &quot;Ptr&quot;, lParam)
}

EventHandling(oMem)  {
   static oMsg := { 0x200: &quot;WM_MOUSEMOVE&quot;
                  , 0x201: &quot;WM_LBUTTONDOWN&quot;, 0x202: &quot;WM_LBUTTONUP&quot;
                  , 0x204: &quot;WM_RBUTTONDOWN&quot;, 0x205: &quot;WM_RBUTTONUP&quot;
                  , 0x207: &quot;WM_MBUTTONDOWN&quot;, 0x208: &quot;WM_MBUTTONUP&quot;
                  , 0x20B: &quot;WM_XBUTTONDOWN&quot;, 0x20C: &quot;WM_XBUTTONUP&quot;
                  , 0x20A: &quot;WM_MOUSEWHEEL&quot; , 0x20E: &quot;WM_MOUSEHWHEEL&quot; }
                
        , oMouseData := { 0: &quot;0&quot;, 1: &quot;XBUTTON1&quot;, 2: &quot;XBUTTON2&quot;
                        , 120: &quot;WHEEL_DELTA forward&quot;, -120: &quot;WHEEL_DELTA backward&quot; }
                        
   prevTTCoordMode := A_CoordModeToolTip
   CoordMode, ToolTip
   while event := oMem.RemoveAt(1)  {
      msg       := oMsg[ event[1] ]
      mouse_x   := NumGet(event[2] + 0, &quot;Int&quot;)
      mouse_y   := NumGet(event[2] + 4, &quot;Int&quot;)
      ext       := NumGet(event[2] + 10, &quot;Short&quot;)
      flags     := NumGet(event[2] + 12, &quot;UInt&quot;)
      time      := NumGet(event[2] + 16, &quot;UInt&quot;)
      INJECTED  := flags &amp; 1
      LOWER_IL_INJECTED := flags &gt;&gt; 1
      mouseData := oMouseData[ext]
      
      ToolTip % &quot;Msg: &quot;  . A_Tab . A_Tab . msg               . &quot;`n&quot;
              . &quot;MouseData: &quot;    . A_Tab . mouseData         . &quot;`n&quot;
              . &quot;MouseX: &quot;       . A_Tab . mouse_x           . &quot;`n&quot;
              . &quot;MouseY: &quot;       . A_Tab . mouse_y           . &quot;`n&quot;
              . &quot;INJECTED: &quot;     . A_Tab . INJECTED          . &quot;`n&quot;
              . &quot;LIL_INJECTED: &quot; . A_Tab . LOWER_IL_INJECTED . &quot;`n&quot;
              . &quot;Time: &quot; . A_Tab . A_Tab . time, 0, 0, 20
   }
   CoordMode, ToolTip, % prevTTCoordMode
}

class WindowsHook {
   __New(type, callback, eventInfo := &quot;&quot;, isGlobal := true) {
      this.pCallback := RegisterCallback(callback, &quot;Fast&quot;, 3, eventInfo)
      this.hHook := DllCall(&quot;SetWindowsHookEx&quot;, &quot;Int&quot;, type, &quot;Ptr&quot;, this.pCallback
                                              , &quot;Ptr&quot;, !isGlobal ? 0 : DllCall(&quot;GetModuleHandle&quot;, &quot;UInt&quot;, 0, &quot;Ptr&quot;)
                                              , &quot;UInt&quot;, isGlobal ? 0 : DllCall(&quot;GetCurrentThreadId&quot;), &quot;Ptr&quot;)
   }
   __Delete() {
      DllCall(&quot;UnhookWindowsHookEx&quot;, &quot;Ptr&quot;, this.hHook)
      DllCall(&quot;GlobalFree&quot;, &quot;Ptr&quot;, this.pCallback, &quot;Ptr&quot;)
   }
}</code></pre></div></blockquote></div><p>Ого код, спасибо большое, только я не особо понимаю как с ним работать..</p>]]></content>
			<author>
				<name><![CDATA[Jester]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41337</uri>
			</author>
			<updated>2021-03-23T12:32:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146893#p146893</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146889#p146889" />
			<content type="html"><![CDATA[<p>Такой скрипт будет выдавать информацию о событиях мыши. Если событие эмулированное, INJECTED: 1.<br /></p><div class="codebox"><pre><code>#Persistent
Setbatchlines, -1

hHook := new WindowsHook(WH_MOUSE_LL := 14, &quot;LowLevelMouseProc&quot;)

LowLevelMouseProc(nCode, wParam, lParam)  {
   static oMem := [], lpData, size := VarSetCapacity(lpData, 16 + A_PtrSize*2, 0)

   DllCall(&quot;msvcrt\memmove&quot;, Ptr, &amp;lpData, Ptr, lParam, Ptr, size)
   oMem.Push([wParam, &amp;lpData])
   timer := Func(&quot;EventHandling&quot;).Bind(oMem)  ; во избежание фризов мыши обработка событий должна
   SetTimer, % timer, -10                     ; происходить по таймеру, а не в теле этой функции
   Return DllCall(&quot;CallNextHookEx&quot;, &quot;Ptr&quot;, 0, &quot;Int&quot;, nCode, &quot;Ptr&quot;, wParam, &quot;Ptr&quot;, lParam)
}

EventHandling(oMem)  {
   static oMsg := { 0x200: &quot;WM_MOUSEMOVE&quot;
                  , 0x201: &quot;WM_LBUTTONDOWN&quot;, 0x202: &quot;WM_LBUTTONUP&quot;
                  , 0x204: &quot;WM_RBUTTONDOWN&quot;, 0x205: &quot;WM_RBUTTONUP&quot;
                  , 0x207: &quot;WM_MBUTTONDOWN&quot;, 0x208: &quot;WM_MBUTTONUP&quot;
                  , 0x20B: &quot;WM_XBUTTONDOWN&quot;, 0x20C: &quot;WM_XBUTTONUP&quot;
                  , 0x20A: &quot;WM_MOUSEWHEEL&quot; , 0x20E: &quot;WM_MOUSEHWHEEL&quot; }
                
        , oMouseData := { 0: &quot;0&quot;, 1: &quot;XBUTTON1&quot;, 2: &quot;XBUTTON2&quot;
                        , 120: &quot;WHEEL_DELTA forward&quot;, -120: &quot;WHEEL_DELTA backward&quot; }
                        
   prevTTCoordMode := A_CoordModeToolTip
   CoordMode, ToolTip
   while event := oMem.RemoveAt(1)  {
      msg       := oMsg[ event[1] ]
      mouse_x   := NumGet(event[2] + 0, &quot;Int&quot;)
      mouse_y   := NumGet(event[2] + 4, &quot;Int&quot;)
      ext       := NumGet(event[2] + 10, &quot;Short&quot;)
      flags     := NumGet(event[2] + 12, &quot;UInt&quot;)
      time      := NumGet(event[2] + 16, &quot;UInt&quot;)
      INJECTED  := flags &amp; 1
      LOWER_IL_INJECTED := flags &gt;&gt; 1
      mouseData := oMouseData[ext]
      
      ToolTip % &quot;Msg: &quot;  . A_Tab . A_Tab . msg               . &quot;`n&quot;
              . &quot;MouseData: &quot;    . A_Tab . mouseData         . &quot;`n&quot;
              . &quot;MouseX: &quot;       . A_Tab . mouse_x           . &quot;`n&quot;
              . &quot;MouseY: &quot;       . A_Tab . mouse_y           . &quot;`n&quot;
              . &quot;INJECTED: &quot;     . A_Tab . INJECTED          . &quot;`n&quot;
              . &quot;LIL_INJECTED: &quot; . A_Tab . LOWER_IL_INJECTED . &quot;`n&quot;
              . &quot;Time: &quot; . A_Tab . A_Tab . time, 0, 0, 20
   }
   CoordMode, ToolTip, % prevTTCoordMode
}

class WindowsHook {
   __New(type, callback, eventInfo := &quot;&quot;, isGlobal := true) {
      this.pCallback := RegisterCallback(callback, &quot;Fast&quot;, 3, eventInfo)
      this.hHook := DllCall(&quot;SetWindowsHookEx&quot;, &quot;Int&quot;, type, &quot;Ptr&quot;, this.pCallback
                                              , &quot;Ptr&quot;, !isGlobal ? 0 : DllCall(&quot;GetModuleHandle&quot;, &quot;UInt&quot;, 0, &quot;Ptr&quot;)
                                              , &quot;UInt&quot;, isGlobal ? 0 : DllCall(&quot;GetCurrentThreadId&quot;), &quot;Ptr&quot;)
   }
   __Delete() {
      DllCall(&quot;UnhookWindowsHookEx&quot;, &quot;Ptr&quot;, this.hHook)
      DllCall(&quot;GlobalFree&quot;, &quot;Ptr&quot;, this.pCallback, &quot;Ptr&quot;)
   }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-03-23T01:11:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146889#p146889</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=146884#p146884" />
			<content type="html"><![CDATA[<p>Привет всем.</p><p>У меня есть программа, которая перетаскивает курсор мыши в определенные координаты (не АХК) и хочу сделать так, чтобы мой АХК скрипт мог понять, реально ли я вожу мышкой или это делает другая программа, тем самым предпринимал затем какие-то действия.</p><p>Реализуемо?</p>]]></content>
			<author>
				<name><![CDATA[Jester]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41337</uri>
			</author>
			<updated>2021-03-22T19:05:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=146884#p146884</id>
		</entry>
</feed>
