<?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>https://forum.script-coding.com/viewtopic.php?id=16200</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16200&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Проверка на эмуляцию передвижения мыши.».]]></description>
		<lastBuildDate>Sun, 06 Jun 2021 12:01:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=148308#p148308</link>
			<description><![CDATA[<p><strong>Jester</strong>, ознакомьтесь, пожалуйста, с <a href="http://forum.script-coding.com/misc.php?action=rules">правилами</a> форума, отредактируйте свой пост.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 06 Jun 2021 12:01:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=148308#p148308</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=148305#p148305</link>
			<description><![CDATA[<p>а можно сделать так:</p><p>If INJECTED = 1<br />{<br />Send, 123<br />}<br />return</p><p>?</p>]]></description>
			<author><![CDATA[null@example.com (Jester)]]></author>
			<pubDate>Sun, 06 Jun 2021 10:08:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=148305#p148305</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146913#p146913</link>
			<description><![CDATA[<p>Смотря, какая эмуляция. Вариант, что я привёл, может определить эмуляцию на программном уровне. Если на уровне драйвера, то не сможет, но в таком случае можно определить, что события произошли не от конкретного устройства.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 24 Mar 2021 16:16:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146913#p146913</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146912#p146912</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Wed, 24 Mar 2021 13:58:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146912#p146912</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146906#p146906</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Jester)]]></author>
			<pubDate>Wed, 24 Mar 2021 10:11:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146906#p146906</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146894#p146894</link>
			<description><![CDATA[<div class="quotebox"><cite>Jester пишет:</cite><blockquote><p>хочу сделать так, чтобы мой АХК скрипт мог понять, реально ли я вожу мышкой или это делает другая программа</p></blockquote></div><p>В скрипте есть переменная <em>INJECTED</em>, можете сделать её глобальной, и по её содержанию ваш скрипт всегда сможет понять, были ли последние действия мыши человеческими или программными.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 23 Mar 2021 16:04:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146894#p146894</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146893#p146893</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Jester)]]></author>
			<pubDate>Tue, 23 Mar 2021 12:32:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146893#p146893</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146889#p146889</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 23 Mar 2021 01:11:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146889#p146889</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Проверка на эмуляцию передвижения мыши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=146884#p146884</link>
			<description><![CDATA[<p>Привет всем.</p><p>У меня есть программа, которая перетаскивает курсор мыши в определенные координаты (не АХК) и хочу сделать так, чтобы мой АХК скрипт мог понять, реально ли я вожу мышкой или это делает другая программа, тем самым предпринимал затем какие-то действия.</p><p>Реализуемо?</p>]]></description>
			<author><![CDATA[null@example.com (Jester)]]></author>
			<pubDate>Mon, 22 Mar 2021 19:05:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=146884#p146884</guid>
		</item>
	</channel>
</rss>
