<?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=7741&amp;type=atom" />
	<updated>2012-10-31T11:21:21Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=7741</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65287#p65287" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br />Да, это я погорячился. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Надо было дальше справку прочитать. Честно говоря, не помню даже, использовал ли я OnMessage в своём коде когда-нибудь. Теория без практики слаба.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2012-10-31T11:21:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65287#p65287</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65286#p65286" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2012-10-31T10:00:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65286#p65286</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65285#p65285" />
			<content type="html"><![CDATA[<p><strong>YMP</strong><br />Спасибо, теперь всё ясно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2012-10-31T09:51:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65285#p65285</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65280#p65280" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2012-10-31T03:31:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65280#p65280</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65268#p65268" />
			<content type="html"><![CDATA[<p>Спасибо. WM_SETTEXT работает, не знал про StrGet. <br />1. Ещё вопрос, в GetText(wParam, lParam, msg, hwnd) указано 4 параметра, зачем? Тут что-то должно быть в строгом соответствии с WM_SETTEXT в WinApi?<br />2. Так понял, что передать десяток параметров можно только в lParam, и разбирать его потом в функции получателя?<br />3. В wParam можно передавать только шестнадцатиричные цифры?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2012-10-30T17:06:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65268#p65268</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65240#p65240" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2012-10-30T08:11:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65240#p65240</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65238#p65238" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2012-10-30T07:22:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65238#p65238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65237#p65237" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2012-10-29T21:15:36Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65237#p65237</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65236#p65236" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>А если нет GUI?</p></blockquote></div><p>А GUI есть. Скрытое окно скрипта, вызываемое KeyHistory, ListLines и т.д. Запустите произвольный скрипт, откройте это окно, посмотрите в его заголовок, сравните со строкой записанной в TargetScriptTitle</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-10-29T21:14:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65236#p65236</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65234#p65234" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2012-10-29T20:50:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65234#p65234</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65231#p65231" />
			<content type="html"><![CDATA[<p><a href="http://l.autohotkey.net/docs/commands/OnMessage.htm#SendString">Вот так</a>, например.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2012-10-29T19:56:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65231#p65231</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK : Как обмениваться сообщениями между скриптами?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=65229#p65229" />
			<content type="html"><![CDATA[<p>Господа, подскажите как можно обмениватся сообщениями между скриптами, например как вызвать функцию с параметрами в другом заранее определённом скрипте, или хотя-бы без параметров?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2012-10-29T19:47:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=65229#p65229</id>
		</entry>
</feed>
