<?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=10540&amp;type=atom" />
	<updated>2019-07-20T13:12:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10540</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=134980#p134980" />
			<content type="html"><![CDATA[<p>Добрый день.<br />Код работает, но у меня стоит Win10 DPI fix и, соответственно, 125% масштаб интерфейса.<br />Все клики приведённого выше скрипта смещены относительно кнопок на сколько-то пикселей (разное кол-во, в зависимости от близости к краю, вроде бы).<br />Может быть, кто-то знает, как скорректировать скрипт под измененный масштаб?<br />Возможно, есть встроенные функции WM на эту тему.<br />Поиском не удалось найти ничего похожего..<br />Заранее благодарю.</p>]]></content>
			<author>
				<name><![CDATA[Astoria]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40280</uri>
			</author>
			<updated>2019-07-20T13:12:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=134980#p134980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92947#p92947" />
			<content type="html"><![CDATA[<p>На nncron-е работало немного по другому, там в цикле отслеживались нужные клики мышкой, если клик был то этим кликом окно сразу делалось активным, посылался WM_NCHITTEST и уже дальше выбиралось нужное действие.. Но как я уже говорил глючило тоже регулярно.. Посмотрим как на AHK работать будет..</p>]]></content>
			<author>
				<name><![CDATA[Alexey244]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32963</uri>
			</author>
			<updated>2015-04-02T20:13:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92947#p92947</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92946#p92946" />
			<content type="html"><![CDATA[<p>Действительно, далеко не факт, что под курсором активно окно.<br />Можно и в глобальную переменную записывать HWND, но &quot;это не наши методы&quot; (с) <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>#NoEnv
#If res := NCHITTEST(id)
RButton::
MButton::
   WinGetTitle, Title, AHK_id %id%
   try Gosub %A_ThisHotkey%_%res%
#If
Return

RButton_MINBUTTON:
   MsgBox, Нажатие RButton над кнопкой «Свернуть»`n%Title%
Return
RButton_CLOSE:
   MsgBox, Нажатие RButton над кнопкой «Закрыть»`n%Title%
Return
MButton_MINBUTTON:
   MsgBox, Нажатие MButton над кнопкой «Свернуть»`n%Title%
Return
MButton_CLOSE:
   MsgBox, Нажатие MButton над кнопкой «Закрыть»`n%Title%
Return

Esc:: ExitApp

NCHITTEST(ByRef hWnd)
{  ; из списка удалена позиция &quot;CLIENT&quot;, соответствующая клиентской части окна
   static pos := [ &quot;&quot;,&quot;CAPTION&quot;,&quot;SYSMENU&quot;,&quot;SIZE&quot;,&quot;MENU&quot;,&quot;HSCROLL&quot;,&quot;VSCROLL&quot;
                  ,&quot;MINBUTTON&quot;,&quot;MAXBUTTON&quot;,&quot;LEFT&quot;,&quot;RIGHT&quot;,&quot;TOP&quot;,&quot;TOPLEFT&quot;,&quot;TOPRIGHT&quot;
                  ,&quot;BOTTOM&quot;,&quot;BOTTOMLEFT&quot;,&quot;BOTTOMRIGHT&quot;,&quot;BORDER&quot;,&quot;OBJECT&quot;,&quot;CLOSE&quot;,&quot;HELP&quot; ]
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd
   SendMessage, WM_NCHITTEST := 0x84,, X | Y&lt;&lt;16,, ahk_id %hWnd%
   Return pos[ErrorLevel]
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-04-02T20:04:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92946#p92946</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92945#p92945" />
			<content type="html"><![CDATA[<p>Еще раз всем спасибо за участие и отзывчивость. Пойду изобретать свое двухколесное средство. В планах у меня еще отслеживание позиции корсора на таких длинных элементах как заголовок окна&nbsp; CAPTION и рамка (&quot;LEFT&quot;,&quot;RIGHT&quot;,&quot;TOP&quot; и &quot;BOTTOM&quot;) и в зависимости от позиции делать разные действия.. Например менять прозрачность окна кликая пр.кн. по нижней границе и чемближе к правому углу окна тем более прозрачнее...<br />Но это я так, идеей делюсь и не призываю никого писать для меня готовый код.. Я и так чувствую что мое спасибо это слишком мало за эту помощь.. Надеюсь, что не мне одному пригодятся эти примеры.</p>]]></content>
			<author>
				<name><![CDATA[Alexey244]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32963</uri>
			</author>
			<updated>2015-04-02T20:01:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92945#p92945</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92943#p92943" />
			<content type="html"><![CDATA[<p>Ну, в идеале-то ещё нужно учитывать hWnd (или заголовок) окна, который функция могла бы возвращать через ByRef-параметр. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-04-02T19:39:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92943#p92943</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92942#p92942" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Alexey244 пишет:</cite><blockquote><p>&lt;...&gt; Читал сегодня мануалы, так и не смог понять есть ли в AHK такой оператор как CASE?? Или выбор действия придется множеством If–ов делать?</p></blockquote></div><p>Ну как тут не изобрести свое двухколесное средство передвижения, тем более <strong>teadrinker</strong> в двух вариантах кода приложил почти все комплектующие к нему. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>#NoEnv
#If res := NCHITTEST()
RButton::
MButton::
   try Gosub %A_ThisHotkey%_%res%
#If
Return

RButton_MINBUTTON:
   MsgBox, Здесь действие при нажатии RButton над кнопкой «Свернуть»
Return
RButton_CLOSE:
   MsgBox, Здесь действие при нажатии RButton над кнопкой «Закрыть»
Return
MButton_MINBUTTON:
   MsgBox, Здесь действие при нажатии MButton над кнопкой «Свернуть»
Return
MButton_CLOSE:
   MsgBox, Здесь действие при нажатии MButton над кнопкой «Закрыть»
Return

Esc:: ExitApp

NCHITTEST()
{  ; из списка удалена позиция &quot;CLIENT&quot;, соответствующая клиентской части окна
   static pos := [ &quot;&quot;,&quot;CAPTION&quot;,&quot;SYSMENU&quot;,&quot;SIZE&quot;,&quot;MENU&quot;,&quot;HSCROLL&quot;,&quot;VSCROLL&quot;
                  ,&quot;MINBUTTON&quot;,&quot;MAXBUTTON&quot;,&quot;LEFT&quot;,&quot;RIGHT&quot;,&quot;TOP&quot;,&quot;TOPLEFT&quot;,&quot;TOPRIGHT&quot;
                  ,&quot;BOTTOM&quot;,&quot;BOTTOMLEFT&quot;,&quot;BOTTOMRIGHT&quot;,&quot;BORDER&quot;,&quot;OBJECT&quot;,&quot;CLOSE&quot;,&quot;HELP&quot; ]
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd
   SendMessage, WM_NCHITTEST := 0x84,, X | Y&lt;&lt;16,, ahk_id %hWnd%
   Return pos[ErrorLevel]
}</code></pre></div><p>Upd: Почему-то <em>try Gosub &lt;..&gt;</em> не срабатывает, будучи&nbsp; записанным на одной строке с хоткеем, хотя формально это однострочная директива. Один <em>Gosub</em> срабатывает, а так - нет.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-04-02T19:28:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92942#p92942</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92941#p92941" />
			<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>2015-04-02T18:46:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92941#p92941</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92940#p92940" />
			<content type="html"><![CDATA[<p>Для практического использования данного кода принцип такой:<br /></p><div class="codebox"><pre><code>#If res := NCHITTEST()
RButton::
   if (res = &quot;MINBUTTON&quot;)  {
      MsgBox, Здесь действие при нажатии RButton над кнопкой «Свернуть»
   }
   else if (res = &quot;CLOSE&quot;)  {
      MsgBox, Здесь действие при нажатии RButton над кнопкой «Закрыть»
   }
   Return
   
MButton::
   if (res = &quot;MINBUTTON&quot;)  {
      MsgBox, Здесь действие при нажатии MButton над кнопкой «Свернуть»
   }
   else if (res = &quot;CLOSE&quot;)  {
      MsgBox, Здесь действие при нажатии MButton над кнопкой «Закрыть»
   }
   Return
   
#If
Esc:: ExitApp

NCHITTEST()
{  ; из списка удалена позиция &quot;CLIENT&quot;, соответствующая клиентской части окна
   static pos := [ &quot;&quot;,&quot;CAPTION&quot;,&quot;SYSMENU&quot;,&quot;SIZE&quot;,&quot;MENU&quot;,&quot;HSCROLL&quot;,&quot;VSCROLL&quot;
                  ,&quot;MINBUTTON&quot;,&quot;MAXBUTTON&quot;,&quot;LEFT&quot;,&quot;RIGHT&quot;,&quot;TOP&quot;,&quot;TOPLEFT&quot;,&quot;TOPRIGHT&quot;
                  ,&quot;BOTTOM&quot;,&quot;BOTTOMLEFT&quot;,&quot;BOTTOMRIGHT&quot;,&quot;BORDER&quot;,&quot;OBJECT&quot;,&quot;CLOSE&quot;,&quot;HELP&quot; ]
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd
   SendMessage, WM_NCHITTEST := 0x84,, X | Y&lt;&lt;16,, ahk_id %hWnd%
   Return pos[ErrorLevel]
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-04-02T18:39:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92940#p92940</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92939#p92939" />
			<content type="html"><![CDATA[<p>Уважаемый teadrinker, а не могли бы вы слегка подкорректировать ваш последний пример таким образом, чтобы в нем было несколько MsgBox, и отображали они сообщения не из переменных значений, а из постоянных. Например<br />MsgBox &quot;Нажата ср.кнопка мыши над кнопкой свернуть&quot;<br />Я, к своему стыду, пока не могу вникнуть куда мне вставить код, к примеру, делающий активное окно поверх всех окон при нажатии пр.кн.мыши над «развернуть»..<br />Читал сегодня мануалы, так и не смог понять есть ли в AHK такой оператор как CASE?? Или выбор действия придется множеством If–ов делать?</p>]]></content>
			<author>
				<name><![CDATA[Alexey244]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32963</uri>
			</author>
			<updated>2015-04-02T18:31:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92939#p92939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92938#p92938" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Зачем эти лишние телодвижения и расход памяти</p></blockquote></div><p>Так ты тоже заметил, что нарушать правила легче, чем выполнять их? Вопрос лишь в последствиях. Но я уверен, что образованные и культурные люди, которые собираются на нашем форуме, не встанут на этот скользкий путь! А кто некультурный — тому бан.<br /></p><div class="quotebox"><cite>yalanne пишет:</cite><blockquote><p>добавил комментарии к скрипту</p></blockquote></div><p>Комментировать код — прекрасная привычка, которой напрочь лишены большинство завсегдатаев раздела AHK. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Но едва ли необходимы комментарии типа<br /></p><div class="codebox"><pre><code>#Persistent ; Делает скрипт постоянно выполняющимся</code></pre></div><p>Во-первых, что делает данная директива и так написано в справке, ни к чему её копировать. Во-вторых, эта команда не нужна в данном коде вовсе. Комментируют же обычно тонкости алгоритма, которые могут быть не совсем понятны на первый взгляд.<br />Но я, когда говорил про аккуратность и понятность, имел в виду не совсем это. Сравните:<br /></p><div class="codebox"><pre><code>#If res := NCHITTEST()
RButton::
MButton:: MsgBox, % &quot;Нажата &quot; A_ThisHotkey &quot; над &quot; res
#If
Esc:: ExitApp

NCHITTEST()
{  ; из списка удалена позиция &quot;CLIENT&quot;, соответствующая клиентской части окна
   static pos := [ &quot;&quot;,&quot;CAPTION&quot;,&quot;SYSMENU&quot;,&quot;SIZE&quot;,&quot;MENU&quot;,&quot;HSCROLL&quot;,&quot;VSCROLL&quot;
                  ,&quot;MINBUTTON&quot;,&quot;MAXBUTTON&quot;,&quot;LEFT&quot;,&quot;RIGHT&quot;,&quot;TOP&quot;,&quot;TOPLEFT&quot;,&quot;TOPRIGHT&quot;
                  ,&quot;BOTTOM&quot;,&quot;BOTTOMLEFT&quot;,&quot;BOTTOMRIGHT&quot;,&quot;BORDER&quot;,&quot;OBJECT&quot;,&quot;CLOSE&quot;,&quot;HELP&quot; ]
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd
   SendMessage, WM_NCHITTEST := 0x84,, X | Y&lt;&lt;16,, ahk_id %hWnd%
   Return pos[ErrorLevel]
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-04-02T15:32:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92938#p92938</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92932#p92932" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>аккуратней и понятней</p></blockquote></div><p>добавил комментарии к скрипту <img src="//forum.script-coding.com/img/smilies/roll.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[yalanne]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32850</uri>
			</author>
			<updated>2015-04-02T09:36:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92932#p92932</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92931#p92931" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Это в девять утра-то, когда на форуме кроме тебя никого нет?</p></blockquote></div><p>Да я обычно и не смотрю, есть кто или нет. Зачем эти лишние телодвижения и расход памяти, если можно процитировать? <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>Да и привычка у человека уже сформировалась, видимо, на других форумах, а привычка — вторая натура.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2015-04-02T07:26:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92931#p92931</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92929#p92929" />
			<content type="html"><![CDATA[<p><strong>yalanne</strong>, так уже лучше, но всё это записать можно аккуратней и понятней (особенно предпоследнюю строчку).</p><div class="quotebox"><cite>yalanne пишет:</cite><blockquote><p>5) без понятий. Так уже в примере было.</p></blockquote></div><p>Такая запись понадобилась бы, если б x и y могли принимать отрицательные значения, в данном случае же это ни к чему.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-04-02T06:39:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92929#p92929</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92928#p92928" />
			<content type="html"><![CDATA[<div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Off</div><div class="fancy_spoiler"><p>Есть кнопка &quot;Предпросмотр&quot; - категорически рекомендовано к использованию министерством образования РФ, в частности спецкомитетом по борьбе с ошибками, а точнее его подразделением по отлову и уничтожению очепяток. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> )<br />Новые посты, при их появлении, при этом будут показаны прямо под вашим ответом.</p></div></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-04-02T06:28:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92928#p92928</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Управление окнами мышкой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92927#p92927" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong>,<br />1) Исправил.<br />2) Предлагаю другие варианты, если их доработать будет альтернативой. <br />3) Исправил на это <br /></p><div class="codebox"><pre><code>#if (WM_NCHITTEST:=WM_NCHITTEST()) and (WM_NCHITTEST=8) or (WM_NCHITTEST=9) or (WM_NCHITTEST=20)</code></pre></div><p>что бы вызывалось 1 раз а не 6.<br />В этом If&#039;е убирает другие сообщения. оставляет только 8,9,20 - которые соответствуют действиям свернуть, развернуть, закрыть.<br />4) Чтобы не вызывалось и бралось из переменной.<br /> </p><div class="codebox"><pre><code>msgbox % &quot;Нажата &quot; ( (WM_NCHITTEST=8) ? &quot;свернуть&quot; : ((WM_NCHITTEST=9) ? &quot;развернуть&quot; : ((WM_NCHITTEST=20) ? &quot;закрыть&quot; : &quot;&quot; ))) &quot; &quot; ((A_ThisHotkey=&quot;Lbutton&quot;) ? &quot;левой&quot; : ((A_ThisHotkey=&quot;Rbutton&quot;) ? &quot;правой&quot; : ((A_ThisHotkey=&quot;Mbutton&quot;) ? &quot;средней&quot; : &quot;&quot;))) &quot; клавишей.&quot;</code></pre></div><p>5) Без понятий. Так уже в примере было.</p>]]></content>
			<author>
				<name><![CDATA[yalanne]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32850</uri>
			</author>
			<updated>2015-04-02T06:26:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92927#p92927</id>
		</entry>
</feed>
