<?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="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10984&amp;type=atom" />
	<updated>2016-05-10T18:31:21Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10984</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103620#p103620" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, в данном случае, не запутался. Происходит зажатие ЛКМ на 150 мсек без сдвига - начинается ожидание. На текущий момент ожидание начинается тогда, когда ЛКМ зажимается как со сдвигом, так и без него.</p><p>На всякий случай, перефразирую. Если курсор не сдвигается при зажатой ЛКМ в течение 150 мсек, нечинается ожидание отжатия ЛКМ с дальнейшим ходом сценария.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2016-05-10T18:31:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103620#p103620</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103619#p103619" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>becauseim пишет:</cite><blockquote><p>на позиции, где совершается клик.</p></blockquote></div><p>Вы уже совсем запутались в своих хотелках, и сами не помните чего хотели:<br /></p><div class="quotebox"><cite>becauseim пишет:</cite><blockquote><p>Однако я забыл подробнее описать тот момент, что ожидание должно включаться не просто после удержания, <strong>а удержания в одной позиции (координатах)</strong>, можно с погрешностью в 2-3 пикселя.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-05-10T18:00:36Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103619#p103619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103615#p103615" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, на позиции, где совершается клик. Т.е. если я задерживаю ЛКМ на одном месте, то начинается ожидание отпускания ЛКМ с дальнейшим ходом сценария.</p><p>Но, учитывая последнюю поправку, условие на удержание можно упразднить (или оставить с возможностью закомментирования на случай, если в нем нет необходимости) и заменить на условие, описаное в 26-ом посте.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2016-05-10T14:42:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103615#p103615</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103614#p103614" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>becauseim пишет:</cite><blockquote><p>задерживаю ЛКМ на одной позиции</p></blockquote></div><p>На какой позиции?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-05-10T13:29:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103614#p103614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103613#p103613" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, задерживаю ЛКМ на одной позиции, после чего перемещаю в одну из сторон, но ничего не отправляется. В предыдущей редакции клавиши отправлялись должным образом.</p><p>Поправка: проверка на удержание требовалась для отличия от простого клика, и теперь пришла мысль о том, что в моем случае проверку на задержание можно заменить на проверку цвета под курсором. Т.е. если при нажатии на ЛКМ цвет пикселя под курсором соответствует заданному, то продолжать работу сценария.</p><div class="codebox"><pre><code>
LButton::
MouseGetPos sX, sY
PixelGetColor, Color, sX, sY
if (Color = &quot;0x222222&quot;) or (Color = &quot;0x191919&quot;){
...
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2016-05-10T11:12:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103613#p103613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103612#p103612" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>SetDefaultMouseSpeed, 0
CoordMode, Mouse, Window

fault := 3 ; погрешность
 
#If NeedArea(0, 0, 30, 30, sX, sY)
LButton::
	Start := A_TickCount
	While GetKeyState(&quot;LButton&quot;, &quot;P&quot;)
		Continue
	If (A_TickCount - Start &lt; 150)
	{
		Click
		Return
	}
	MouseGetPos eX 
    SendInput % eX - sX &lt; -fault ? &quot;^!+{vk50}{vk41}{Click &quot; sX &quot; &quot; sY &quot;}^!+{vk50}{vk42}&quot; 
				: eX - sX &gt; fault ? &quot;^!+{vk50}{vk42}{Click &quot; sX &quot; &quot; sY &quot;}^!+{vk50}{vk41}&quot; 
				: &quot;^!+{vk50}&quot;
    Return
#IfWinActive 

NeedArea(x1, y1, x2, y2, ByRef x, ByRef y) {
    MouseGetPos, x, y
	If (x &gt;= x1 &amp;&amp; x &lt;= x2 &amp;&amp; y &gt;= y1 &amp;&amp; y &lt;= y2)
        Return 1 
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-05-10T11:01:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103612#p103612</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103611#p103611" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, спасибо, работает! Однако я забыл подробнее описать тот момент, что ожидание должно включаться не просто после удержания, а удержания в одной позиции (координатах), можно с погрешностью в 2-3 пикселя. Также мне сложно дается редактирование регулярных выражений, и у меня не получилось добавить дополнительное отправление клавиш перед <em>{a}</em> и <em>{b}</em>, а именно заменить <em>{a}</em> на <em>^!+{p}{a}</em> и аналогично <em>{b}</em> на <em>^!+{p}{b}</em>, вне зависимости от порядка их отправления (движения курсора).</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2016-05-10T10:49:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103611#p103611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103609#p103609" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>
SetDefaultMouseSpeed, 0
CoordMode, Mouse

fault := 3 ; погрешность
 
#IfWinActive ahk_class Notepad++
LButton::
	MouseGetPos sX, sY
	Start := A_TickCount
	While GetKeyState(&quot;LButton&quot;, &quot;P&quot;)
		Continue
	If (A_TickCount - Start &lt; 150)
	{
		Click
		Return
	}
	MouseGetPos eX 
    SendInput % eX - sX &lt; -fault ? &quot;{vk41}{Click &quot; sX &quot; &quot; sY &quot;}{vk42}&quot; : eX - sX &gt; fault ? &quot;{vk42}{Click &quot; sX &quot; &quot; sY &quot;}{vk41}&quot; : &quot;^!+{vk50}&quot;
    Return
#IfWinActive
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-05-10T09:19:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103609#p103609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=103445#p103445" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, Хотелось бы иметь усовершенствованный вариант. Помогите, пожалуйста, его реализовать:</p><p>После совершения зажатия ЛКМ на 150 мсек, запоминаются координаты положения курсора и начинается ожидание траектории движения курсора, но при движении ничего не отправляется, как в последней редакции, а при отпускании ЛКМ справа от места зажатия отправляется клавиша <em>{b}</em>, далее отправляется <em>MouseClick </em>в полученные вначале координаты и отправляется клавиша <em>{а}</em>. Если отпускается слева - то наоборот, сначала <em>{а}</em>, потом <em>MouseClick </em><em>{b}</em>. Если остается на месте - отправляется <em>{^!+p}</em> без <em>MouseClick </em>. Если ЛКМ была отпущена ранее 150 мсек после нажатия, т.е. без зажатия, то работает как обычно, т.е. отправлется LButton.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2016-05-07T13:56:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=103445#p103445</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=98127#p98127" />
			<content type="html"><![CDATA[<p>Спасибо! Пока не выяснил для себя, все ли работает так, как задумывалось. На досуге посмотрю внимательнее.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2015-10-24T01:31:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=98127#p98127</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=98064#p98064" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>
fault := 3 ; погрешность
 
#IfWinActive ahk_class Notepad++
~LButton::
    MouseGetPos sX
    While GetKeyState(&quot;LButton&quot;, &quot;P&quot;)
    {
        MouseGetPos eX 
        If abs(odds := eX-sX) &gt; fault
        {
            Send % odds &lt; 0 ? &quot;^!+{vk50}{vk42}&quot; : &quot;^!+{vk50}{vk41}&quot;
            Break
        }
    }
    KeyWait, LButton 
    Send % odds &lt; -fault ? &quot;{vk41}&quot; : odds &gt; fault ? &quot;{vk42}&quot; : &quot;^!+{vk50}&quot;
    Return
#IfWinActive
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-10-21T12:47:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=98064#p98064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=97942#p97942" />
			<content type="html"><![CDATA[<p>Появилась возможность упростить желаемый сценарий, а именно исключить срабатывание лишь в определенных координатах заданного окна, а также исключить момент возвращения курсора в положение нажатия на ЛКМ, если того не потребует сценарий. <br />Желаемый результат:</p><div class="codebox"><pre><code>
; если не отпуская ЛКМ, курсор будет направлен вправо от места нажатия:
LButton:: Send {^!+p}{a}
LButton Up:: Send {b}

; если.. влево:
LButton:: Send {^!+p}{b}
LButton Up:: Send {a}

; если курсор остается на месте (c погрешностью в 2-3 пикселя либо без погрешнсоти):
LButton Up:: Send {^!+p}
</code></pre></div><p>Понимаю, что можно было модифицировать уже предложенные сценарии, но у меня не получилось сделать это верным образом.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2015-10-07T21:06:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=97942#p97942</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=97912#p97912" />
			<content type="html"><![CDATA[<p><strong>yalanne</strong>, большое спасибо за комментарии к коду! Хотел с помощью них понять, как мне объединить упрощенный действующий скрипт с Вашим, но пока еще не пытался. Последний вариант работает также только в текстовом редакторе. Почему, не знаю, но предположения прежние. Попробовал бы заменить отправление клавиш на виртуальные коды, как советует <strong>Alectric</strong>, но по-прежнему, не знаю, как заменить указанные единичные символы на сочетания клавиш. В данной строке все понятно:<br /></p><div class="codebox"><pre><code>arr := [&quot;A&quot;,&quot;B&quot;] 
</code></pre></div><p>а вот дальше - нет.<br />Также хотел попробовать убрать условие работы скрипта в определенном окне, чтобы понять, требуются ли виртуальные коды, но, опять же, не получилось. Хотелось бы услышать подсказки по этим пунктам.</p><div class="quotebox"><blockquote><p>Если идет в право то надо BC так же писать как и с лево(AB)?</p></blockquote></div><p>Нет, вправо также требуется получить отправление первых двух клавиш, только если при перемещении влево, клавишу <strong>В</strong> мы получаем после возвращения курсора в начальное положение, то при перемещении вправо, клавишу <strong>B </strong>необходимо отправить в момент отпускания ЛКМ, а после возвращения курсора в начальное положение, отправить клавишу <strong>A</strong>. <br />Клавишу <strong>С</strong> же необходимо получить при отсутствии движения курсора при зажатой ЛКМ, а также вместе с клавишами <strong>A</strong> и <strong>B</strong>.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2015-10-05T15:44:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=97912#p97912</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=97882#p97882" />
			<content type="html"><![CDATA[<p>Думаю нужно отправлять виртуальные коды.</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2015-10-04T05:27:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=97882#p97882</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Событие при клике в заданных координатах окна]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=97875#p97875" />
			<content type="html"><![CDATA[<div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; коменты к последнему посту.</div><div class="fancy_spoiler"><div class="codebox"><pre><code>CoordMode, Mouse, Window ; координаты будут относительно окна.
arr := [&quot;A&quot;,&quot;B&quot;] ; создаем массив с клавишами. У каждой клавиши есть свой порядковый номер,у A-1;B-2 и тд.(если есть).
ifposM(Title,x1,y1,x2,y2) ; функция-условия для #if. В первое поле Title окна; позиция x и y первой точки; позиция x2 и y2 второй точки.
{
    ; все переменные в нутри функции временные.
    MouseGetPos x,y,id ; получаем позицию курсора и его id.
    return (WinActive(Title) = id) and ((x &gt;= x1 and x &lt;= x2) and (y &gt;= y1 and y &lt;= y2))
    ;(WinActive(Title) = id) - проверяет активно ли окно и клик по нему.
    ; ((x &gt;= x1 and x &lt;= x2) - Если x больше либо равно первой точке и при этом меньше либо равно второй ,то по икску клик был в нужном диапозоне.
    ; с y то же самая проверка.
}

#if ifposM(&quot;ahk_exe notepad++.exe&quot;,180,0,1950,40)
LButton::
; Если скрипт перешел сюда значит нужное окно активно и клик был в нужном диапозоне.
MouseGetPos xA,Y ; Получаем первую позицию x + y.
KeyWait %A_ThisHotkey% ; ждем отжатия кнопки которая создала поток(LButton)
MouseGetPos xB ; получаем вторую позицию x.
Send % arr[    z := (Abs(xB-xA)&gt;4)*(1+(xB &gt; xA))    ]
    ; z := - просто запись в переменную полученного результата, что бы не повторять действия вычисления повторно.
    ; Abs(xB-xA)&gt;4) - Получение абсолютного числа(число будет хоть как положительное) между разностью xB и xA. Если это число больше 4 значит ответом этой группы будет 1 иначе 0.
    ; (1+(xB &gt; xA)) - Если курсор ушел в лево то будет, а если в право срабатывает условие и + 1=2. 
    ; дальше идет умножение первой и второй группы. в первой может быть только 1 или 0; во второй только 1 или 2.
    ; в итоге может получится 3 ответа 0 - так как в масиве нету не чего под 0 то и ответа не будет. 1-Буква A. 2-Буква Б,
MouseMove xA,Y, ; перемещаем обратно курсор.
if z = 1 ; если мышь двигалась в лево то еще
    Send % arr[ 2 ] ; нажимаем букву Б.
return
#if</code></pre></div></div></div><div class="quotebox"><cite>becauseim пишет:</cite><blockquote><p>В текстовом редакторе печатаются буквы &quot;А&quot; и &quot;B&quot;, причем при перемещении курсора с зажатой ЛКМ в левую сторону, отправляются обе клавиши в необходимом порядке, а при перемещении вправо - только клавиша &quot;B&quot;. Момент с отправлением клавиши &quot;С&quot;, полагаю, здесь упущен. А вот в окне целевой программы вижу только то, как курсор запоминает момент положения при нажатии, и возвращается в это положение после отпускания, а вот клавиши не отправляются.</p></blockquote></div><p>Если идет в право то надо BC так же писать как и с лево(AB)?<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>CoordMode, Mouse, Window
arr := [&quot;A&quot;,&quot;B&quot;,&quot;C&quot;]
ifposM(Title,x1,y1,x2,y2)
{
    MouseGetPos x,y,id
    return (WinActive(Title) = id) and ((x &gt;= x1 and x &lt;= x2) and (y &gt;= y1 and y &lt;= y2))
}

#if ifposM(&quot;ahk_exe notepad++.exe&quot;,180,0,1950,40)
LButton::
MouseGetPos xA,Y
KeyWait %A_ThisHotkey%
MouseGetPos xB
Send % arr[    z := (Abs(xB-xA)&gt;4)*(1+(xB &gt; xA))    ]
MouseMove xA,Y,
if z = 1
    SendInput % arr[ 2 ]
if z = 2
    SendInput % arr[ 3 ]
return
#if</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[yalanne]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32850</uri>
			</author>
			<updated>2015-10-03T08:50:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=97875#p97875</id>
		</entry>
</feed>
