<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Способ получения данных с dll скрипта Ahk]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17284&amp;type=atom" />
	<updated>2022-07-31T18:54:56Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=17284</id>
		<entry>
			<title type="html"><![CDATA[AHK: Способ получения данных с dll скрипта Ahk]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=154122#p154122" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Clannad5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39853</uri>
			</author>
			<updated>2022-07-31T18:54:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=154122#p154122</id>
		</entry>
</feed>
