<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3203</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3203&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AutoHotKey: Передача указателя между двумя процессами (скриптами)».]]></description>
		<lastBuildDate>Fri, 09 Feb 2018 16:55:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123651#p123651</link>
			<description><![CDATA[<p>Так началась легенда...</p>]]></description>
			<author><![CDATA[null@example.com (cahta_emae30)]]></author>
			<pubDate>Fri, 09 Feb 2018 16:55:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123651#p123651</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23709#p23709</link>
			<description><![CDATA[<div class="quotebox"><cite>garkin пишет:</cite><blockquote><p>А чем отличается MoveMemory от CopyMemory? Я так понял, что movememory может копировать между перекрывающимися блоками. Она затирает за собой память источника, или просто использует промежуточный буфер?</p></blockquote></div><p>Видимо, разница именно в этом. MoveMemory именно копирует, источник она специально не затирает. Если блоки перекрываются и запись должна затирать места, которые ещё не прочитаны, она просто меняет направление копирования на обратное, т.е. копирует с конца к началу. Буфер не используется.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 26 May 2009 12:58:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23709#p23709</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23669#p23669</link>
			<description><![CDATA[<p>Огромное спасибо. А чем отличается MoveMemory от CopyMemory? Я так понял, что movememory может копировать между перекрывающимися блоками. Она затирает за собой память источника, или просто использует промежуточный буфер?</p>]]></description>
			<author><![CDATA[null@example.com (garkin)]]></author>
			<pubDate>Mon, 25 May 2009 17:34:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23669#p23669</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23662#p23662</link>
			<description><![CDATA[<p>Расследование показало, что CopyMemory — это псевдоним RtlCopyMemory, которая в свою очередь — псевдоним memcpy. Ну и типы неправильные были. Так что, видимо, так:<br /></p><div class="codebox"><pre><code>From:= &quot;abcdefgh&quot;
To:=&quot;1234567890&quot;

DllCall(&quot;msvcrt\memcpy&quot;
       , &quot;Str&quot;, To
       , &quot;Str&quot;, From
       , &quot;Uint&quot;, 5
       , &quot;Cdecl&quot;)

msgbox % &quot;DllResult: &quot; To</code></pre></div><p>Ещё можно использовать RtlMoveMemory:<br /></p><div class="codebox"><pre><code>From:= &quot;abcdefgh&quot;
To:=&quot;1234567890&quot;

DllCall(&quot;RtlMoveMemory&quot;
       , &quot;Str&quot;, To
       , &quot;Str&quot;, From
       , &quot;Uint&quot;, 5)

msgbox % &quot;DllResult: &quot; To</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 25 May 2009 12:18:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23662#p23662</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23653#p23653</link>
			<description><![CDATA[<p>Не могу заставить работать CopyMemory, подскажите где глюк.<br /></p><div class="codebox"><pre><code>    From:= &quot;abcdefgh&quot;
    To:=&quot;1234567890&quot;

    DllCall(&quot;CopyMemory&quot;
       , UintP, To
       , UintP, From
       , Uint, 5)

    msgbox % &quot;DllResult: &quot; To    ;И фиг - нет изменений, &quot;1234567890&quot;
ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (garkin)]]></author>
			<pubDate>Mon, 25 May 2009 10:40:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23653#p23653</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23620#p23620</link>
			<description><![CDATA[<div class="quotebox"><cite>garkin пишет:</cite><blockquote><p>Ну уж если совсем извращаться, то можно и невидимый контрол на форме.</p></blockquote></div><p>Тоже вариант, но все равно придется использовать &quot;PostMessage&quot; для передачи скрипту момента изменения контрола.</p>]]></description>
			<author><![CDATA[null@example.com (Wlad)]]></author>
			<pubDate>Sun, 24 May 2009 13:43:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23620#p23620</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23619#p23619</link>
			<description><![CDATA[<div class="quotebox"><cite>Wlad пишет:</cite><blockquote><p>Еще вариант&nbsp; - использовать буфер обмена.</p><p>передающий скрипт:<br />clipboard = 123456</p><p>принимающий скрипт:<br />OnClipboardChange:<br />MsgBox, %clipboard%<br />return</p></blockquote></div><p>Ну уж если совсем извращаться, то можно и невидимый контрол на форме.</p>]]></description>
			<author><![CDATA[null@example.com (garkin)]]></author>
			<pubDate>Sun, 24 May 2009 13:35:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23619#p23619</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23618#p23618</link>
			<description><![CDATA[<p>Еще вариант&nbsp; - использовать буфер обмена.</p><p>передающий скрипт:<br />clipboard = 123456</p><p>принимающий скрипт:<br />OnClipboardChange:<br />MsgBox, %clipboard%<br />return</p>]]></description>
			<author><![CDATA[null@example.com (Wlad)]]></author>
			<pubDate>Sun, 24 May 2009 13:32:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23618#p23618</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23614#p23614</link>
			<description><![CDATA[<p>Всё когда-то случается впервые...:rolleyes: Но лучше поздно, чем никогда!</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 24 May 2009 10:19:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23614#p23614</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23613#p23613</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p><img src="//forum.script-coding.com/img/smilies/lol.png" width="15" height="15" /> Каюсь. Но, справедливости ради, о нём можно было узнать ещё несколькими постами <a href="http://forum.script-coding.com/viewtopic.php?pid=23580#p23580">ранее</a>, а также в конце <a href="http://www.autohotkey.com/docs/commands/OnMessage.htm">этой</a> страницы.</p></blockquote></div><p>И что тебе помешало? Давай уж до конца кайся, облегчи душу. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 24 May 2009 10:11:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23613#p23613</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23612#p23612</link>
			<description><![CDATA[<p><img src="//forum.script-coding.com/img/smilies/lol.png" width="15" height="15" /> Каюсь. Но, справедливости ради, о нём можно было узнать ещё несколькими постами <a href="http://forum.script-coding.com/viewtopic.php?pid=23580#p23580">ранее</a>, а также в конце <a href="http://www.autohotkey.com/docs/commands/OnMessage.htm">этой</a> страницы.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 24 May 2009 10:00:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23612#p23612</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23611#p23611</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А зачем? В Windows для обмена данными уже существует сообщение WM_COPYDATA.</p></blockquote></div><p>А ты давно о нём узнал-то? Судя по <a href="http://forum.script-coding.com/viewtopic.php?pid=23584#p23584">#5</a>, недавно. Ну а я только что — от тебя.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 24 May 2009 09:23:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23611#p23611</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23610#p23610</link>
			<description><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Можно, например, зарегистрировать в обоих скриптах оконное сообщение...</p></blockquote></div><p>А зачем? В Windows для обмена данными уже существует сообщение <a href="http://msdn.microsoft.com/en-us/library/ms649011(VS.85).aspx">WM_COPYDATA</a>.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 24 May 2009 08:12:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23610#p23610</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23608#p23608</link>
			<description><![CDATA[<p>YMP, огромное спасибо за пример реализации.<br />Просто у меня был уже отлаженый код для работы внутри одного скрипта с этим сообщением, где для своих нужд задействованы и lparam&nbsp; и wparam и была дилетантская надежда, что можно адаптироваться к многопроцессности без смены структуры сообщений, превратив указатель в волшебный &quot;глобальный&quot; вид, вроде far указаетлей dos.</p>]]></description>
			<author><![CDATA[null@example.com (garkin)]]></author>
			<pubDate>Sun, 24 May 2009 07:30:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23608#p23608</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotKey: Передача указателя между двумя процессами (скриптами)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=23605#p23605</link>
			<description><![CDATA[<p><strong>garkin</strong><br />Не уверен, что точно понял Вашу ситуацию, но вот такая идея: у функций SendMessage и PostMessage есть два параметра — lParam и wParam. Вот уже два числа. Можно, например, зарегистрировать в обоих скриптах оконное сообщение с одним и тем же именем, и в нём потом пересылать PID и указатель (ReadAddress). А можно и два сообщения создать, в одном пересылать PID, а в другом — адрес данных и их размер.</p><p>Передающий скрипт:<br /></p><div class="codebox"><pre><code>Data =
(
Я теперь скупее стал в желаньях,
Жизнь моя, иль ты приснилась мне?
Словно я весенней гулкой ранью
Проскакал на розовом коне.
)

WinTitle := &quot;Окно №1&quot;  ; Заголовок целевого окна.
PID := DllCall(&quot;GetCurrentProcessId&quot;)

MsgPID  := DllCall(&quot;RegisterWindowMessage&quot;, &quot;Str&quot;, &quot;MsgPID&quot;)
MsgData := DllCall(&quot;RegisterWindowMessage&quot;, &quot;Str&quot;, &quot;MsgData&quot;)

F11::  ; Посылать по нажатию F11.
  hWnd := WinExist(WinTitle)
  If not hWnd {
    MsgBox, Не найдено окно:`n%WinTitle%.
    Return
  }

  wParam := PID
  lParam := 0    ; Сюда тоже что-нибудь можно положить.
  PostMessage, MsgPID, wParam, lParam,, ahk_id %hWnd%   ; Посылаем PID.

  wParam := &amp;Data
  lParam := StrLen(Data) + 1  ; Учитываем нулевой байт в конце строки.
  PostMessage, MsgData, wParam, lParam,, ahk_id %hWnd%  ; Адрес данных и размер.
Return</code></pre></div><p>Принимающий скрипт:<br /></p><div class="codebox"><pre><code>WinTitle := &quot;Окно №1&quot;

MsgPID  := DllCall(&quot;RegisterWindowMessage&quot;, &quot;Str&quot;, &quot;MsgPID&quot;)
MsgData := DllCall(&quot;RegisterWindowMessage&quot;, &quot;Str&quot;, &quot;MsgData&quot;)

OnMessage(MsgPID, &quot;GetPID&quot;)   ; Регистрация функций для обработки сообщений.
OnMessage(MsgData, &quot;GetData&quot;)

Gui, Show, w400 h300, %WinTitle%
Return


GetPID(wParam, lParam, uMsg, hWnd)
{
  Global PID := wParam
}

GetData(wParam, lParam, uMsg, hWnd)
{
  Global PID
  ReadAddress := wParam             ; Адрес, откуда читать.
  ReadSize := lParam                ; Сколько байт считывать.
  VarSetCapacity(Buf, ReadSize, 0)  ; Буфер, куда считывать.
  
  PROCESS_VM_READ := 0x10           ; Права на процесс.
  
  hProcess := DllCall(&quot;OpenProcess&quot;, UInt, PROCESS_VM_READ
                                   , Int, False
                                   , UInt, PID)
  If(!hProcess) {
    MsgBox, Не удалось открыть процесс.
    Return
  }
  
  Ret := DllCall(&quot;ReadProcessMemory&quot;, UInt, hProcess
                                    , UInt, ReadAddress
                                    , UInt, &amp;Buf
                                    , UInt, ReadSize
                                    , UInt, 0)
  
  DllCall(&quot;CloseHandle&quot;, UInt, hProcess) ; Освобождение хэндла процесса.
  
  If(!Ret) {
    MsgBox, Не удалось прочитать.
    Return
  }
  
  VarSetCapacity(Buf, -1) ; Обновление размера переменной, поскольку запись в неё
                          ; произошла со стороны и AutoHotkey об этом не знает.  
  MsgBox, %Buf%
}

GuiClose:
  ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 24 May 2009 05:12:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=23605#p23605</guid>
		</item>
	</channel>
</rss>
