<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: PeekMessage]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5110&amp;type=atom" />
	<updated>2010-11-01T06:45:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5110</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41119#p41119" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Итого 28 байт, по крайней мере на 32-битной системе.</p></blockquote></div><p>Все равно не работает. Видимо буду копать в сторону многопроцессного режима. Или сделаю что-то типа OPC-сервера для работы с COM-портом.<br />Еще есть вариант с передачей данных между двумя процессами.</p><p>Спасибо за участие.</p>]]></content>
			<author>
				<name><![CDATA[j2]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=7774</uri>
			</author>
			<updated>2010-11-01T06:45:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41119#p41119</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41090#p41090" />
			<content type="html"><![CDATA[<p>Ну, в общем-то, одна бросается. MSG — это не число, а структура.<br /></p><div class="codebox"><pre><code>typedef struct tagMSG {     // msg  
    HWND   hwnd;     
    UINT   message; 
    WPARAM wParam; 
    LPARAM lParam; 
    DWORD  time; 
    POINT  pt; 
} MSG;</code></pre></div><p>POINT внутри неё тоже структура.<br /></p><div class="codebox"><pre><code>typedef struct tagPOINT { // pt  
    LONG x; 
    LONG y; 
} POINT;</code></pre></div><p>Итого 28 байт, по крайней мере на 32-битной системе.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2010-10-31T10:11:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41090#p41090</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41086#p41086" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Честно говоря, мне пока не понятно, в чём конкретно у Вас проблема. Ведь не может быть, что Вам просто лень писать код и Вы хотите, чтобы кто-то сел и сделал это за Вас. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p></blockquote></div><p>Конечно мне не лень. Видимо просто в синтаксис вкрадывается ошибка и поэтому я получаю неверный результат.</p><div class="codebox"><pre><code>VarSetCapacity(message,4,0)
    loop 5
    {
        if DllCall(&quot;PeekMessage&quot;, &quot;UInt*&quot;, message, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0)
        {            
            sleep 100
            if !DllCall(&quot;GetMessage&quot;, &quot;UInt*&quot;, message, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0)
            {
                DllCall(&quot;TranslateMessage&quot;, &quot;UInt&quot;, &amp;message)
                DllCall(&quot;DispatchMessage&quot;, &quot;UInt&quot;, &amp;message)            
            }
            else
                break
        }
        else
            break
            
    }</code></pre></div><p>Возможно ошибка бросится вам в глаза, но я ее не вижу.</p>]]></content>
			<author>
				<name><![CDATA[j2]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=7774</uri>
			</author>
			<updated>2010-10-31T09:42:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41086#p41086</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41076#p41076" />
			<content type="html"><![CDATA[<p>Ну так попробуйте вставить в эти промежутки PeekMessage и посмотреть, есть ли сообщения. Раз Вы вызываете функции из dll, то знаете, как пользоваться DllCall.</p><p>Честно говоря, мне пока не понятно, в чём конкретно у Вас проблема. Ведь не может быть, что Вам просто лень писать код и Вы хотите, чтобы кто-то сел и сделал это за Вас. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2010-10-31T07:58:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41076#p41076</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41074#p41074" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>А что Вы с ней будете делать? Насколько знаю, скрипт выполняется в один поток. И если этот поток пошёл в Вашу dll, когда Вы вызвали функцию из неё, то пока он оттуда не вернётся при возврате этой функции, никаких других действий в скрипте не будет. Будет выполняться код функции из dll. Код скрипта продолжит выполняться, только когда эта функция отработает.</p></blockquote></div><p>Спасибо что откликнулись. Я очень благодарен вам за многочисленные ответы по этому маленькому, но удобному языку программирования. <br />Функции из DLL вызываются друг за другом, т.е. есть место, когда поток возвращается в скрипт, прежде чем вызвать следующую функцию. Именно в эти моменты времени можно поставить запросы к очереди сообщений и узнать есть ли сообщения для текущего окна или они все обработаны. Если есть, то прежде чем вызывать следующую функцию из DLL нужно дождаться пока будут отработаны все текущие сообщения окна.</p>]]></content>
			<author>
				<name><![CDATA[j2]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=7774</uri>
			</author>
			<updated>2010-10-31T06:14:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41074#p41074</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41063#p41063" />
			<content type="html"><![CDATA[<p>А что Вы с ней будете делать? Насколько знаю, скрипт выполняется в один поток. И если этот поток пошёл в Вашу dll, когда Вы вызвали функцию из неё, то пока он оттуда не вернётся при возврате этой функции, никаких других действий в скрипте не будет. Будет выполняться код функции из dll. Код скрипта продолжит выполняться, только когда эта функция отработает.</p><p>Распараллелить можно, запустив два скрипта и наладив общение между ними, например, через оконные сообщения. Ну и на официальном форуме в разделе Scripts &amp; Functions есть проект AutoHotkey.dll, где вроде бы реализована многопоточность. Но в это я не вникал.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2010-10-30T17:30:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41063#p41063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: PeekMessage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=41060#p41060" />
			<content type="html"><![CDATA[<p>Господа обращаюсь за советом.<br />Дело в том, что пытаюсь реализовать программу на AHK с внедренным WebBrowser. Все было хорошо пока не понадобилось вести лог обмена данными через COM-port. Написали dll-библиотеку функций обмена измерительного прибора с компьютером через COM-port и когда есть необходимось вызываем функции обмена и результат размещаем в документе браузера. </p><p>Пока идут одиночные команды обмена лог успевает обновляться, как начинаются групповые опросы лог зависает и пока не произойдет окончание групповых опросов окно программы не откликается и лог не обновляется.</p><p>Посмотрел в интернете видимо это вызвано тем, что притормаживает очередь сообщений в момент вызова функций DllCall. Решают эту проблемму вызовом PeekMessage. Примерно так:<br /></p><div class="codebox"><pre><code>if(PeekMessage (&amp;msg, NULL, 0, 0, PM_NOREMOVE))
{

//Ну здесь понятно идет обработка сообщений
if(!GetMessage (&amp;msg, NULL, 0, 0)) break;
TranslateMessage (&amp;msg); 
DispatchMessage (&amp;msg);
}</code></pre></div><p>Подскажите пожалуйста как реализовать такую функцию на AutoHotKey?</p>]]></content>
			<author>
				<name><![CDATA[j2]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=7774</uri>
			</author>
			<updated>2010-10-30T16:37:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=41060#p41060</id>
		</entry>
</feed>
