<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8734&amp;type=atom" />
	<updated>2013-10-20T14:46:23Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8734</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76200#p76200" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>А вот если в окне контролы, то непонятно как тут быть:</p></blockquote></div><p>Вроде неплохой вариант без <span class="bbu">постоянной</span> нагрузки таймером:<br /></p><div class="codebox"><pre><code>
Gui, -Caption +HWNDhThisGui
OnMessage(0x200, &quot;WM_MouseMove&quot;) 
Gui, Add, Edit, x0 y0 h111 w111 
Gui, Show, NA w222 h222 
return
 
WM_MouseMove(wParam, lParam, Msg, hwnd)   {  
    SetTimer, IsThisGui, -10
}
 
IsThisGui:
    MouseGetPos, , , WinID
    If (hThisGui = WinID)   {
        If !IsThisGuiScript
            Tooltip, % IsThisGuiScript := 1
        SetTimer, IsThisGui, -10 ; для надёжности, иногда &quot;срывается&quot;
    } Else 
        Tooltip, % IsThisGuiScript := 0
    return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-20T14:46:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76200#p76200</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75828#p75828" />
			<content type="html"><![CDATA[<p>Да, не очень понятно, что делать.<br /></p><div class="quotebox"><blockquote><p>Вопрос немного отвлечённый: за чем вообще люди используют x64 интерпретатор АНК, с ним же гемороя необерёшся по допиливанию других скриптов, что за такие большие плюсы в x64?</p></blockquote></div><p>Плюсы кое-какие есть. Вот в соседней теме я постил код, узнающий адрес загруженной в другой процесс DLL. Из x64 скрипта можно это узнавать как в 64-, так и в 32-битных процессах, а из x86 скрипта — только в 32-битных. В основном, наверно, такие вещи.</p><p>Ну и раз есть люди, использующие АНК64, то в новом коде, думаю, имеет смысл это учитывать.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-10-07T10:13:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75828#p75828</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75827#p75827" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Ну что ж, прекрасно, если работает.</p></blockquote></div><p>А вот если в окне контролы, то непонятно как тут быть:<br /></p><div class="codebox"><pre><code>
Gui, -Caption +HWNDhThisGui
OnMessage(0x200, &quot;WM_MouseMove&quot;)
OnMessage(0x2A3, &quot;WM_MouseLeave&quot;)  
Gui, Add, Edit, x0 y0 h122 w122 
Gui, Show, NA w200 h200 
return
 
WM_MouseMove(wParam, lParam, Msg, hwnd)
{ 
    Global hThisGui
    static TME, init:= VarSetCapacity(TME, 16, 0) NumPut(16, TME, 0) NumPut(2, TME, 4)   
    If (hwnd = hThisGui)
        NumPut(hwnd, TME, 8), DllCall(&quot;TrackMouseEvent&quot;, &quot;uint&quot;, &amp;TME)  
}
WM_MouseLeave(wParam, lParam, Msg, hwnd){ 
    ToolTip OnMouseLeave 
} 
</code></pre></div><div class="quotebox"><blockquote><p>Советую ещё учесть другой размер структуры для x64 (24 байта) и другой размер HWND (8 байт).</p></blockquote></div><p>Вопрос немного отвлечённый: за чем вообще люди используют x64 интерпретатор АНК, с ним же гемороя необерёшся по допиливанию других скриптов, что за такие большие плюсы в x64?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-07T09:31:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75827#p75827</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75826#p75826" />
			<content type="html"><![CDATA[<p>Ну что ж, прекрасно, если работает. Советую ещё учесть другой размер структуры для x64 (24 байта) и другой размер HWND (8 байт).</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-10-07T09:20:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75826#p75826</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75825#p75825" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>А проверка очереди сообщений не прерывает поток? Он же у скрипта один (см. Диспетчер задач). Таймер, скорее всего, запускается тоже по сообщению — WM_TIMER.</p></blockquote></div><p>Зачем же тогда проверка очереди сообщений <strong>да ещё и</strong> бешеный таймер сверху?<br /></p><div class="quotebox"><blockquote><p>Согласно описанию сообщений WM_NCMOUSELEAVE и WM_MOUSELEAVE, они требуют предварительного вызова функции TrackMouseEvent.<br />...<br />Причём вам нужно вызывать её заново каждый раз, как курсор возвращается в окно. А для отслеживания этого возвращения всё равно, видимо, понадобится таймер.</p></blockquote></div><p>Вариант без таймера вроде бы отлично работает:<br /></p><div class="codebox"><pre><code>
Gui, -Caption 
OnMessage(0x200, &quot;WM_MouseMove&quot;)
OnMessage(0x2A3, &quot;WM_MouseLeave&quot;)  
Gui, Show, NA w200 h200 
return
 
WM_MouseMove(wParam, lParam, Msg, hwnd)
{ 
    static TME, init:= VarSetCapacity(TME, 16, 0) NumPut(16, TME, 0) NumPut(2, TME, 4)  
    NumPut(hwnd, TME, 8), DllCall(&quot;TrackMouseEvent&quot;, &quot;uint&quot;, &amp;TME) 
    ToolTip OnMouseMove
}

WM_MouseLeave(wParam, lParam, Msg, hwnd){ 
    ToolTip OnMouseLeave 
} 
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-07T08:49:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75825#p75825</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75824#p75824" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Лучше получать моментальное сообщение по факту события, чем результат проверки, которая <span class="bbu">постоянно</span> прерывает текущий поток.</p></blockquote></div><p>А проверка очереди сообщений не прерывает поток? Он же у скрипта один (см. Диспетчер задач). Таймер, скорее всего, запускается тоже по сообщению — WM_TIMER.</p><p>Согласно описанию сообщений WM_NCMOUSELEAVE и WM_MOUSELEAVE, они требуют предварительного вызова функции TrackMouseEvent.<br /></p><div class="quotebox"><blockquote><p>The WM_NCMOUSELEAVE message is posted to a window when the cursor leaves the nonclient area of the window specified in a prior call to TrackMouseEvent.</p></blockquote></div><p>Причём вам нужно вызывать её заново каждый раз, как курсор возвращается в окно. А для отслеживания этого возвращения всё равно, видимо, понадобится таймер.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-10-07T06:16:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75824#p75824</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75809#p75809" />
			<content type="html"><![CDATA[<p>&quot;Обходные пути&quot; очевидны и неудобны. </p><p>Интересует реализация в AutoHotkey - хука на такое событие.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-06T16:54:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75809#p75809</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75808#p75808" />
			<content type="html"><![CDATA[<p>Можно вспомнить про старый добрый GoSub добавленный в поток...</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2013-10-06T16:48:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75808#p75808</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75776#p75776" />
			<content type="html"><![CDATA[<p><strong>h010key</strong><br />Лучше получать моментальное сообщение по факту события, чем результат проверки, которая <span class="bbu">постоянно</span> прерывает текущий поток.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-05T17:05:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75776#p75776</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75775#p75775" />
			<content type="html"><![CDATA[<p>serzh82saratov -&nbsp; почему ты нехочешь использовать SetTimer, в чем выгода, чем лучше OnMessage ?</p>]]></content>
			<author>
				<name><![CDATA[h010key]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27662</uri>
			</author>
			<updated>2013-10-05T16:34:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75775#p75775</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75774#p75774" />
			<content type="html"><![CDATA[<p>Да с таймером то, оно очевидно...</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-05T15:37:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75774#p75774</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75773#p75773" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>GUI, show, w200 h100, AHK
SetTimer, LocalWatch, 10

LocalWatch:
MouseGetPos, , , WClass, CName
WinGetTitle, WName, ahk_id %WClass%
If (WName = &quot;AHK&quot;)
Tooltip, Это окно GUI
Else Tooltip, Это другое окно
Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2013-10-05T15:14:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75773#p75773</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75772#p75772" />
			<content type="html"><![CDATA[<p>Сообщение WM_NCMOUSELEAVE очень ненадёжно срабатывает в окне с заголовком, а без заголовка не работает вообще:<br /></p><div class="codebox"><pre><code>
Gui +HWNDhThisGui -Caption
Gui, Show, w111 h111
OnMessage(0x2A2, &quot;WM_NCMOUSELEAVE&quot;)
return 

WM_NCMOUSELEAVE(wParam, lParam, msg, hwnd)
{              
    ToolTip % &quot; wParam = &quot; wParam &quot; lParam = &quot; lParam &quot; msg = &quot; msg &quot; hwnd = &quot; hwnd 
} 
</code></pre></div><p>Вопрос: как надёжно получать сообщения о выходе курсора за пределы GUI скрипта?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-05T14:30:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75772#p75772</id>
		</entry>
</feed>
