<?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>http://forum.script-coding.com/viewtopic.php?id=7741</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7741&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK : Как обмениваться сообщениями между скриптами?».]]></description>
		<lastBuildDate>Wed, 31 Oct 2012 11:21:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65287#p65287</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Да, это я погорячился. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Надо было дальше справку прочитать. Честно говоря, не помню даже, использовал ли я OnMessage в своём коде когда-нибудь. Теория без практики слаба.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 31 Oct 2012 11:21:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65287#p65287</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65286#p65286</link>
			<description><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Да, должно быть 4 параметра, так положено.</p></blockquote></div><p>На самом деле не обязательно. Можно указывать меньше параметров, вплоть до того, который нужен. Т. е. если msg и hwnd не используются, можно указать только wParam и lParam:<br /></p><div class="codebox"><pre><code>OnMessage(0xC, &quot;GetText&quot;)

GetText(wParam, lParam)
{
    Params := StrGet(lParam)
    StringSplit, Param, Params, |
    MsgBox, Параметры GetText:`n%Param1%`n%Param2%`n%Param3%
    %Param1%(Param2, Param3)    ; Вызов функции по переданному имени.
    Return 1
}

Func1(p1, p2)
{
    MsgBox, Параметры Func1:`n%p1%`n%p2%
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 31 Oct 2012 10:00:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65286#p65286</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65285#p65285</link>
			<description><![CDATA[<p><strong>YMP</strong><br />Спасибо, теперь всё ясно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 31 Oct 2012 09:51:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65285#p65285</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65280#p65280</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Да, должно быть 4 параметра, так положено. Про wParam написано, что он не используется, но числа в нём, оказывается, передать можно. Я и не знал. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />В параметре msg будет код сообщения. В данном случае 0xC. Т.е. эту функцию GetText можно назначить как перехватчик для нескольких сообщений и по msg она определит, для какого сообщения вызвана. Hwnd — идентификатор окна, которому поступило сообщение.</p><p>Про несколько параметров вы верно мыслите. Можно в строку их соединить, а в получателе разделить. Можно и имя функции таким образом передать, которую нужно вызвать в получателе. Вот так, например.</p><p>Отправитель.<br /></p><div class="codebox"><pre><code>Receiver = D:\SomeScript.ahk
DetectHiddenWindows, On

F11::
    Params = Func1|Hello, world!|0x888
    SendMessage, 0xC, 0, &amp;Params,, %Receiver%
Return</code></pre></div><p>Получатель.<br /></p><div class="codebox"><pre><code>OnMessage(0xC, &quot;GetText&quot;)

GetText(wParam, lParam, msg, hwnd)
{
    Params := StrGet(lParam)
    StringSplit, Param, Params, |
    MsgBox, Параметры GetText:`n%Param1%`n%Param2%`n%Param3%
    %Param1%(Param2, Param3)    ; Вызов функции по переданному имени.
    Return 1
}

Func1(p1, p2)
{
    MsgBox, Параметры Func1:`n%p1%`n%p2%
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 31 Oct 2012 03:31:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65280#p65280</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65268#p65268</link>
			<description><![CDATA[<p>Спасибо. WM_SETTEXT работает, не знал про StrGet. <br />1. Ещё вопрос, в GetText(wParam, lParam, msg, hwnd) указано 4 параметра, зачем? Тут что-то должно быть в строгом соответствии с WM_SETTEXT в WinApi?<br />2. Так понял, что передать десяток параметров можно только в lParam, и разбирать его потом в функции получателя?<br />3. В wParam можно передавать только шестнадцатиричные цифры?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 30 Oct 2012 17:06:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65268#p65268</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65240#p65240</link>
			<description><![CDATA[<p>WM_SETTEXT работает. Вот пример.</p><p>Получатель сообщения.<br /></p><div class="codebox"><pre><code>OnMessage(0xC, &quot;GetText&quot;)

GetText(wParam, lParam, msg, hwnd)
{
    MsgBox, % StrGet(lParam)
    Return 1
}</code></pre></div><p>Отправитель.<br /></p><div class="codebox"><pre><code>Receiver = D:\SomeScript.ahk    ; Путь к получателю.
DetectHiddenWindows, On

F11::
    SendMessage, 0xC, 0, &quot;Hello, world!&quot;,, %Receiver%
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 30 Oct 2012 08:11:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65240#p65240</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65238#p65238</link>
			<description><![CDATA[<p>Получилось запустить функцию, и передать в wParam простое число.</p><div class="quotebox"><blockquote><p>Да, только 0x4a — это не имя, а уникальный код сообщения WM_COPYDATA.</p></blockquote></div><p>Скажите, а можно просто посылать текст в lParam или в wParam без танцев. В русской справке нашёл:<br /></p><div class="quotebox"><blockquote><p>Начиная с версии 1.0.40.05 строка в кавычках (литеральная строка) также может быть послана; оператор &amp; в этом случае не используется. Например: <br />Run Notepad<br />WinWait Безымянный - Блокнот<br />SendMessage, 0xC, 0, &quot;Новый заголовок окна&quot; ; 0XC означает сообщение WM_SETTEXT</p></blockquote></div><p>Конечно попробовал заменить 0x4a на 0xC, но ничего не вышло. И ещё можно-ли передать например 10 параметров, или всё нужно запихивать в lParam.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 30 Oct 2012 07:22:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65238#p65238</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65237#p65237</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>в скрипте приёмнике - OnMessage(0x4a, &quot;Receive_WM_COPYDATA&quot;) 0x4a - задаёт имя сообщения, Receive_WM_COPYDATA - задаёт функцию которая будет вызвана при получении этого сообщения?</p></blockquote></div><p>Да, только 0x4a — это не имя, а уникальный код сообщения <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011%28v=vs.85%29.aspx">WM_COPYDATA</a>.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А если нет GUI?</p></blockquote></div><p>По-крайней мере одно окно есть у всех AHK-скриптов. Изначально оно скрыто, его можно увидеть, сделав двойной клик по иконке скрипта в трее, или выполнив команду <strong>Open</strong> из трей-меню. В заголовке этого окна присутствует путь к файлу скрипта, соответственно и его название, поэтому чтобы обратиться к такому окну, достаточно названия, если указать <em>SetTitleMatchMode 2</em>.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>а все танцы в ней вокруг обработки текста из InputBox.</p></blockquote></div><p>Главные танцы в ней вокруг создания структуры <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms649010%28v=vs.85%29.aspx">CopyDataStruct</a>, указатель(поинтер) на которую, собственно, и посылается.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 29 Oct 2012 21:15:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65237#p65237</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65236#p65236</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>А если нет GUI?</p></blockquote></div><p>А GUI есть. Скрытое окно скрипта, вызываемое KeyHistory, ListLines и т.д. Запустите произвольный скрипт, откройте это окно, посмотрите в его заголовок, сравните со строкой записанной в TargetScriptTitle</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Mon, 29 Oct 2012 21:14:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65236#p65236</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65234#p65234</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p><a href="http://l.autohotkey.net/docs/commands/OnMessage.htm#SendString">Вот так</a>, например.</p></blockquote></div><p>Спасибо что откликнулись! <br />Т.е. в скрипте приёмнике - OnMessage(0x4a, &quot;Receive_WM_COPYDATA&quot;) 0x4a - задаёт имя сообщения, Receive_WM_COPYDATA - задаёт функцию которая будет вызвана при получении этого сообщения?</p><p>В скрипте отправителе - TargetScriptTitle = Receiver.ahk ahk_class AutoHotkey это вроде то, куда собственно отправлять. А если нет GUI? И Receiver.ahk указан без пути, т.е. скрипты должны лежать в одной папке, а если путь не может быть известен?<br />Так понял что сам посыл производит команда SendMessage из функции Send_WM_COPYDATA, а все танцы в ней вокруг обработки текста из InputBox.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 29 Oct 2012 20:50:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65234#p65234</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65231#p65231</link>
			<description><![CDATA[<p><a href="http://l.autohotkey.net/docs/commands/OnMessage.htm#SendString">Вот так</a>, например.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 29 Oct 2012 19:56:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65231#p65231</guid>
		</item>
		<item>
			<title><![CDATA[AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65229#p65229</link>
			<description><![CDATA[<p>Господа, подскажите как можно обмениватся сообщениями между скриптами, например как вызвать функцию с параметрами в другом заранее определённом скрипте, или хотя-бы без параметров?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 29 Oct 2012 19:47:54 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65229#p65229</guid>
		</item>
	</channel>
</rss>
