<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Способ получения данных с dll скрипта Ahk]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=17284</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17284&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Способ получения данных с dll скрипта Ahk».]]></description>
		<lastBuildDate>Sun, 31 Jul 2022 18:54:56 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Способ получения данных с dll скрипта Ahk]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=154122#p154122</link>
			<description><![CDATA[<p>Здравствуйте!</p><p>У меня имеется два скрипта, один преобразован в .exe формат, другой в .dll формат.<br />С помощью .exe скрипта я вызываю Dll скрипт и тот начинает работать.</p><p>Вот код первого скрипта Untitled.exe:<br /></p><div class="codebox"><pre><code>
global  hModule
f10::
	SetTimer, ErrorSend, On
	SetTimer, ErrorSend, 10000
;избегает загрузки библиотеки в цикле
hModule := DllCall(&quot;LoadLibrary&quot;, &quot;str&quot;, &quot;msg.dll&quot;)
OnMessage(CloseMyScript, &quot;CloseScriptMonitor&quot;) ; мониторим наше сообщение
return

ErrorSend:
    DllCall(&quot;FreeLibrary&quot;, &quot;UInt&quot;, hModule)
	SetTimer, ErrorSend, Off
	return
	
	CloseScriptMonitor()
{
	SetTimer, ErrorSend, 10000
	SoundBeep, 100, 800
	SetTimer, ErrorSend, 10000
}
return
</code></pre></div><p>Вот код второго скрипта msg.dll:</p><div class="codebox"><pre><code>
SetTimer, ErrorSend, 5000
Loop, 10
    {
       SoundBeep, 500, 500
       Sleep, 2000
    }
    	ExitApp
    return
ErrorSend:
DetectHiddenWindows, On ; искать в скрытых окнах
    PostMessage, CloseMyScript,,,, % &quot;ahk_exe&quot; &quot;Untitled.exe&quot;
return
</code></pre></div><p>Все эти файлы компилируются AHK Protector&#039;ом mini: <a href="https://www.blast.hk/threads/22092/">https://www.blast.hk/threads/22092/</a><br />Благодаря этому протектору, я могу выгружать dll файл, при этом скрипт не крашит.</p><p>Но есть одна проблема.<br />Если выгрузить dll в момент, пока скрипт не завершил своё состояние чекрез ExitApp<br /></p><div class="codebox"><pre><code>DllCall(&quot;FreeLibrary&quot;, &quot;UInt&quot;, hModule)</code></pre></div><p>То скрипт крашнет.<br />Но если dll завершил свою работу через ExitApp, то dll может быть спокойна выгружена и скрипт не крашнется.</p><p>Проблема у меня с PostMessage и OnMessage.<br />При первом запуске dll на F10, dll запускает таймер и спокойно передаёт информацию о своей работоспособности, тем самым не давая скрипту преждевременно выгрузить dll.</p><p>Когда dll заканчивает свою работу, он обязательно должен выйти из него через ExitApp, но иногда dll может просто вылетить, при этом оставляя msg.dll в процессе.<br />Поэтому я и придумал подобную проверку с таймеров в 10 секунд. Если в течение 10 секунд сигнал от dll не поступает, значит dll либо крашнулся, либо закончил свою работу и можно его выгружать из процесса.</p><p>Хотелось бы получить совет как лучше это реализовать, т.к после второго запуска скрипта на F10, dll должен отправлять запросы .exe скрипту, но по непонятным мне причинам, он этого не делает.</p><p>В голове крутится способ изменять в текстовике значение каждый раз на +1, чтобы если он не изменился - значит dll не работает.<br />Не знаю как еще можно проверить dll на неактивность.</p>]]></description>
			<author><![CDATA[null@example.com (Clannad5)]]></author>
			<pubDate>Sun, 31 Jul 2022 18:54:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=154122#p154122</guid>
		</item>
	</channel>
</rss>
