<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8734</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8734&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Получать сообщения о выходе курсора за пределы GUI скрипта».]]></description>
		<lastBuildDate>Sun, 20 Oct 2013 14:46:23 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76200#p76200</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 20 Oct 2013 14:46:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76200#p76200</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75828#p75828</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 07 Oct 2013 10:13:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75828#p75828</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75827#p75827</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 07 Oct 2013 09:31:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75827#p75827</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75826#p75826</link>
			<description><![CDATA[<p>Ну что ж, прекрасно, если работает. Советую ещё учесть другой размер структуры для x64 (24 байта) и другой размер HWND (8 байт).</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 07 Oct 2013 09:20:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75826#p75826</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75825#p75825</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 07 Oct 2013 08:49:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75825#p75825</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75824#p75824</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 07 Oct 2013 06:16:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75824#p75824</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75809#p75809</link>
			<description><![CDATA[<p>&quot;Обходные пути&quot; очевидны и неудобны. </p><p>Интересует реализация в AutoHotkey - хука на такое событие.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 06 Oct 2013 16:54:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75809#p75809</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75808#p75808</link>
			<description><![CDATA[<p>Можно вспомнить про старый добрый GoSub добавленный в поток...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sun, 06 Oct 2013 16:48:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75808#p75808</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75776#p75776</link>
			<description><![CDATA[<p><strong>h010key</strong><br />Лучше получать моментальное сообщение по факту события, чем результат проверки, которая <span class="bbu">постоянно</span> прерывает текущий поток.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 05 Oct 2013 17:05:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75776#p75776</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75775#p75775</link>
			<description><![CDATA[<p>serzh82saratov -&nbsp; почему ты нехочешь использовать SetTimer, в чем выгода, чем лучше OnMessage ?</p>]]></description>
			<author><![CDATA[null@example.com (h010key)]]></author>
			<pubDate>Sat, 05 Oct 2013 16:34:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75775#p75775</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75774#p75774</link>
			<description><![CDATA[<p>Да с таймером то, оно очевидно...</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 05 Oct 2013 15:37:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75774#p75774</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75773#p75773</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 05 Oct 2013 15:14:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75773#p75773</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Получать сообщения о выходе курсора за пределы GUI скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75772#p75772</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 05 Oct 2013 14:30:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75772#p75772</guid>
		</item>
	</channel>
</rss>
