<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Вызов диалога «Завершение работы Windows»]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9083&amp;type=atom" />
	<updated>2013-12-28T12:44:42Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9083</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78584#p78584" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-12-28T12:44:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78584#p78584</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78577#p78577" />
			<content type="html"><![CDATA[<p>Работает, но только с параметром, в примере выше с rundll32 не работало.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-12-28T00:31:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78577#p78577</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78576#p78576" />
			<content type="html"><![CDATA[<p>Спасибо, работает!<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Параметр UInt, 0 методом тыка подобрал, без него не работало, у меня, по-крайней мере.</p></blockquote></div><p>Т.е. функция работает и на Win7?<br />(У меня работает независимо от наличия параметра и его значения.)</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-12-28T00:27:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78576#p78576</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78575#p78575" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-12-27T23:57:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78575#p78575</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78574#p78574" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-12-27T23:34:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78574#p78574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78573#p78573" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-12-27T22:56:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78573#p78573</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78571#p78571" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-12-27T21:16:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78571#p78571</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Вызов диалога «Завершение работы Windows»]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78567#p78567" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-12-27T18:39:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78567#p78567</id>
		</entry>
</feed>
