<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Вызов диалога «Завершение работы Windows»]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9083</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9083&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Вызов диалога «Завершение работы Windows»».]]></description>
		<lastBuildDate>Sat, 28 Dec 2013 12:44:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78584#p78584</link>
			<description><![CDATA[<p>Функции, выполняемые через RunDll32, имеют 4 параметра. Вот пример:<br /></p><div class="codebox"><pre><code>
HRESULT WINAPI LaunchINFSectionEx(
    HWND hwnd,
    HINSTANCE hInst,
    PSTR pszParams,
    INT nShow
);
</code></pre></div><p>Непосредственно в вызове rundll32.exe можно указать только третий, это список аргументов, который функция должна разобрать на отдельные аргументы. Остальные параметры подставляет сама rundll32.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 28 Dec 2013 12:44:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78584#p78584</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78577#p78577</link>
			<description><![CDATA[<p>Работает, но только с параметром, в примере выше с rundll32 не работало.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 28 Dec 2013 00:31:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78577#p78577</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78576#p78576</link>
			<description><![CDATA[<p>Спасибо, работает!<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Параметр UInt, 0 методом тыка подобрал, без него не работало, у меня, по-крайней мере.</p></blockquote></div><p>Т.е. функция работает и на Win7?<br />(У меня работает независимо от наличия параметра и его значения.)</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sat, 28 Dec 2013 00:27:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78576#p78576</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78575#p78575</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Как вызвать по номеру в AHK пока способа не обнаружил.</p></blockquote></div><p>А, хотя вот:<br /></p><div class="codebox"><pre><code>address := DllCall(&quot;GetProcAddress&quot;, Ptr, DllCall(&quot;LoadLibrary&quot;, Str, &quot;Shell32&quot;, Ptr), UInt, 60, Ptr)
DllCall(address, UInt, 0)</code></pre></div><p>Я думал, что #60 — это шестнадцатеричное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Параметр <em>UInt, 0</em> методом тыка подобрал, без него не работало, у меня, по-крайней мере.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 27 Dec 2013 23:57:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78575#p78575</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78574#p78574</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Вероятно, недочет в самом AHK, не позволяющий вызвать из библиотеки функцию с таким именем?</p></blockquote></div><p>Да нет, это не имя, это просто порядковый номер функции в dll, скорее всего. Как вызвать по номеру в AHK пока способа не обнаружил.</p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>У меня также можно безо всякого проводника вызвать само окошко, но затем надо самому как-то обрабатывать код возврата:<br /></p><div class="codebox"><pre><code>result := DllCall(&quot;msgina\ShellShutdownDialog&quot;)
MsgBox %result%
</code></pre></div></blockquote></div><p>Тоже в семёрке не работает. Но обработать код возврата не проблематично. Как вызвать полноценное окошко пока не нашёл, но скорее всего в XP и семёрке будет по-разному.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 27 Dec 2013 23:34:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78574#p78574</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78573#p78573</link>
			<description><![CDATA[<p>Речь идёт именно о первом диалоге.</p><p>Вероятно, недочет в самом AHK, не позволяющий вызвать из библиотеки функцию с таким именем? <em>ErrorLevel</em> принимает значение -4:<br /></p><div class="quotebox"><blockquote><p>-4: The specified function could not be found inside the DLL.</p></blockquote></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Попробуйте так:</p><div class="codebox"><pre><code>DllCall(&quot;shell32\&quot; 0x60)</code></pre></div></blockquote></div><p>Нет, то же самое. А откуда такое выражение? По-моему, это то же, что и<br /></p><div class="codebox"><pre><code>DllCall(&quot;shell32\0x60&quot;)</code></pre></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>На семёрке не работает.</p></blockquote></div><p>Возможно, на «семёрке» есть аналогичная функция с другим названием…<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Первый относится к процессу проводника.</p></blockquote></div><p>Ну, это ещё не значит, что его нельзя вызвать помимо проводника.<br />Например, нажав Ctrl-Alt-Del (если используется классическое окно входа в систему) вызвать диалог «Безопасность Windows» и нажать кнопку «Завершение работы...» (правда, в этом случае в вызванном диалоге нет кнопки «Справка»).</p><p>У меня также можно безо всякого проводника вызвать само окошко, но затем надо самому как-то обрабатывать код возврата:<br /></p><div class="codebox"><pre><code>result := DllCall(&quot;msgina\ShellShutdownDialog&quot;)
MsgBox %result%
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Fri, 27 Dec 2013 22:56:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78573#p78573</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78571#p78571</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>но с помощью <em>DllCall()</em> </p><div class="codebox"><pre><code>DllCall(&quot;shell32\#60&quot;)</code></pre></div><p> ничего не происходит.</p></blockquote></div><p>Попробуйте так:</p><div class="codebox"><pre><code>DllCall(&quot;shell32\&quot; 0x60)</code></pre></div><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Нашёл решение на VB:</p></blockquote></div><p>На семёрке не работает.<br /></p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Программно вызвать диалог «Завершение работы Windows».</p></blockquote></div><p>На семёрке удалось получить только два варианта:</p><p><span class="postimg"><img src="http://content.screencast.com/users/teadrinker/folders/Images/media/c01850e6-2b48-47f0-b016-e4658698b19e/2013.12.28-01.08.37.6.jpg" alt="http://content.screencast.com/users/teadrinker/folders/Images/media/c01850e6-2b48-47f0-b016-e4658698b19e/2013.12.28-01.08.37.6.jpg" /></span></p><p>и</p><p><span class="postimg"><img src="http://content.screencast.com/users/teadrinker/folders/Images/media/738ac1f0-172c-4d4e-b742-5555318811bd/2013.12.28-01.09.29.8.jpg" alt="http://content.screencast.com/users/teadrinker/folders/Images/media/738ac1f0-172c-4d4e-b742-5555318811bd/2013.12.28-01.09.29.8.jpg" /></span></p><p>Первый относится к процессу проводника. Второй можно получить через cmd или WinApi.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 27 Dec 2013 21:16:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78571#p78571</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78567#p78567</link>
			<description><![CDATA[<p><em><span class="bbu">Задача.</span></em> Программно вызвать диалог «Завершение работы Windows». (Его вид зависит от версии ОС и пользовательских настроек — например, в WinXP это окошко с тремя цветными кнопками, если используется экран приветствия, или с выпадающим списком, если используется классическое окно входа.)</p><br /><p>Нашёл <a href="http://www.nirsoft.net/vb/shutdownwin.html">решение на VB</a>:<br /></p><div class="codebox"><pre><code>&#039;The following code snippet displays the &quot;Shut Down Windows&quot; dialog.
&#039;Is uses undocumented API function in shell32.dll

Private Declare Sub ShutDownDialog Lib &quot;shell32.dll&quot; Alias &quot;#60&quot; (ByVal hwndOwner As Long)

Private Sub cmdShowShutDown_Click()
    ShutDownDialog hWnd
End Sub
</code></pre></div><p>С помощью RUNDLL32.EXE </p><div class="codebox"><pre><code>rundll32 shell32,#60</code></pre></div><p> функция <em>#60</em> запускается, то же самое на AHK: </p><div class="codebox"><pre><code>RunWait rundll32 shell32`,#60</code></pre></div><p>но с помощью <em>DllCall()</em> </p><div class="codebox"><pre><code>DllCall(&quot;shell32\#60&quot;)</code></pre></div><p> ничего не происходит.<br />Почему? Какие ещё возможны решения (AHK не обязательно)?</p><p>--------------------</p><p>Да, я знаю, достаточно широко известны следующие два решения:<br /></p><div class="codebox"><pre><code>WinClose Program Manager</code></pre></div><p>(или для большей надёжности<br /></p><div class="codebox"><pre><code>WinClose Program Manager ahk_class Progman ahk_exe explorer.exe</code></pre></div><p>) и<br /></p><div class="codebox"><pre><code>ComObjCreate(&quot;Shell.Application&quot;).ShutdownWindows()</code></pre></div><p>но они работают только при запущенном Проводнике.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Fri, 27 Dec 2013 18:39:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78567#p78567</guid>
		</item>
	</channel>
</rss>
