<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Определить процесс выделенного файла и закрыть его]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9335&amp;type=atom" />
	<updated>2017-04-06T11:29:43Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9335</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114665#p114665" />
			<content type="html"><![CDATA[<p><strong>becauseim</strong><br />Вы же по ссылке <a href="http://forum.script-coding.com/viewtopic.php?pid=114624#p114624">отсюда</a> пришли. Так и чем не вариант?</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2017-04-06T11:29:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114665#p114665</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114657#p114657" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>, тогда не понял, который из предложенных вариантов использовать отдельно для проводника, т.к. перепробовал вроде бы все, но заметил результат работы только тех примеров, которые ориентированы на рабочий стол.</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2017-04-06T08:46:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114657#p114657</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114645#p114645" />
			<content type="html"><![CDATA[<p><strong>becauseim</strong><br />Я бы не тащил в функцию, т.к. проводниковый SelectedItems из неё не лезет, в ином случае будет лишний цикл с переменной как в первых примерах.<br />По приложению: если оно поддерживает списки, то почему нет? Пути же возвращаются.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2017-04-05T23:05:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114645#p114645</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114635#p114635" />
			<content type="html"><![CDATA[<p>Какую функцию наряду с <em>GetDesktopIShellFolderViewDual()</em> использовать для работы с проводником?<br />Может ли данная функция использоваться, например, для импорта выделенных файлов в определенное приложение?</p>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2017-04-05T19:45:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114635#p114635</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83600#p83600" />
			<content type="html"><![CDATA[<p>Ну, &quot;писал&quot; — это громко сказано. Так, скорректировал просто.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-06-02T15:07:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83600#p83600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83599#p83599" />
			<content type="html"><![CDATA[<p>Ну, в том смысле, что интересно стало, вот и спросил.<br /></p><div class="quotebox"><blockquote><p>Универсальностью, наверное.</p></blockquote></div><p>В смысле, &quot;наверное&quot;? Код-то ты писал или нет? <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>2014-06-02T15:01:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83599#p83599</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83598#p83598" />
			<content type="html"><![CDATA[<p>В смысле? Универсальностью, наверное. Получаем IShellFolderViewDual для рабочего стола, можем использовать и другие его методы.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-06-02T14:49:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83598#p83598</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83597#p83597" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Наверное, лучше так:</p></blockquote></div><p>А чем лучше?</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-06-02T14:46:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83597#p83597</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83596#p83596" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>И возможно ли получать его для других окон проводника?</p></blockquote></div><p>А зачем для других окон? В других работает Shell.Application.<br /></p><div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Вот так, например.</p></blockquote></div><p>Наверное, лучше так:<br /></p><div class="codebox"><pre><code>IShellFolderViewDual := GetDesktopIShellFolderViewDual()
Return
    
F11::
    for item in IShellFolderViewDual.SelectedItems
        MsgBox, % item.Path
Return
    

GetDesktopIShellFolderViewDual()
{
    IShellWindows := ComObjCreate(&quot;{9BA05972-F6A8-11CF-A442-00A0C90A8F39}&quot;)
    desktop := IShellWindows.Item(ComObj(19, 8)) ; VT_UI4, SCW_DESKTOP                
   
    ; Retrieve top-level browser object.
    if ptlb := ComObjQuery(desktop
        , &quot;{4C96BE40-915C-11CF-99D3-00AA004AE837}&quot;  ; SID_STopLevelBrowser
        , &quot;{000214E2-0000-0000-C000-000000000046}&quot;) ; IID_IShellBrowser
    {
        ; IShellBrowser.QueryActiveShellView -&gt; IShellView
        if DllCall(NumGet(NumGet(ptlb+0)+15*A_PtrSize), &quot;ptr&quot;, ptlb, &quot;ptr*&quot;, psv) = 0
        {
            ; Define IID_IDispatch.
            VarSetCapacity(IID_IDispatch, 16)
            NumPut(0x46000000000000C0, NumPut(0x20400, IID_IDispatch, &quot;int64&quot;), &quot;int64&quot;)
           
            ; IShellView.GetItemObject -&gt; IDispatch (object which implements IShellFolderViewDual)
            DllCall(NumGet(NumGet(psv+0)+15*A_PtrSize), &quot;ptr&quot;, psv
                , &quot;uint&quot;, 0, &quot;ptr&quot;, &amp;IID_IDispatch, &quot;ptr*&quot;, pdisp)
           
            IShellFolderViewDual := ComObjEnwrap(pdisp)
            ObjRelease(psv)
        }
        ObjRelease(ptlb)
    }
    return IShellFolderViewDual
}</code></pre></div><p>Пробовал получить IShellBrowser для XP через WM_GETISHELLBROWSER, указатель возвращает, но выяснилось, что он в адресном пространстве проводника, так что для нас бесполезен.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-06-02T14:27:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83596#p83596</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83589#p83589" />
			<content type="html"><![CDATA[<p>Собственно, там проблема выше, где получается объект desktop. Константа SCW_DESKTOP введена только в Висте. Поэтому в XP получить таким образом desktop не удаётся.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-06-02T06:51:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83589#p83589</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83588#p83588" />
			<content type="html"><![CDATA[<p>А почему так, ведь:</p><div class="quotebox"><cite>IShellFolderViewDual&nbsp; пишет:</cite><blockquote><p> Minimum supported client	Windows XP desktop apps only</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2014-06-02T06:37:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83588#p83588</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83587#p83587" />
			<content type="html"><![CDATA[<p>Кстати, на XP SP3 вот это не работает:<br /></p><div class="codebox"><pre><code>
if ptlb := ComObjQuery(desktop
        , &quot;{4C96BE40-915C-11CF-99D3-00AA004AE837}&quot;  ; SID_STopLevelBrowser
        , &quot;{000214E2-0000-0000-C000-000000000046}&quot;) ; IID_IShellBrowser
</code></pre></div><p>No valid COM object.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-06-02T06:31:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83587#p83587</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83586#p83586" />
			<content type="html"><![CDATA[<p>Нет, это <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd894076(v=vs.85).aspx">IShellFolderViewDual</a>, насколько понимаю. Про другие окна не знаю пока.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-06-02T05:48:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83586#p83586</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83583#p83583" />
			<content type="html"><![CDATA[<p><strong>YMP</strong>, круто!<br />А тут </p><div class="codebox"><pre><code>ComObjEnwrap(pdisp)</code></pre></div><p> мы получаем объект <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb775541(v=vs.85).aspx">IFolderView2</a> принадлежащий рабочему столу, и можем использовать все методы по ссылке? И возможно ли получать его для других окон проводника?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2014-06-02T05:19:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83583#p83583</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить процесс выделенного файла и закрыть его]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83582#p83582" />
			<content type="html"><![CDATA[<p>Да, это работает. Вот так, например.<br /></p><div class="codebox"><pre><code>
F11::
    SelectedItems := DesktopGetSelectedItems()
    Loop, % SelectedItems.Count
        MsgBox, % SelectedItems.Item(A_Index - 1).Name
Return
    

DesktopGetSelectedItems()
{
    shellWindows := ComObjCreate(&quot;{9BA05972-F6A8-11CF-A442-00A0C90A8F39}&quot;)
    
    desktop := shellWindows.Item(ComObj(19, 8)) ; VT_UI4, SCW_DESKTOP                
   
    ; Retrieve top-level browser object.
    if ptlb := ComObjQuery(desktop
        , &quot;{4C96BE40-915C-11CF-99D3-00AA004AE837}&quot;  ; SID_STopLevelBrowser
        , &quot;{000214E2-0000-0000-C000-000000000046}&quot;) ; IID_IShellBrowser
    {
        ; IShellBrowser.QueryActiveShellView -&gt; IShellView
        if DllCall(NumGet(NumGet(ptlb+0)+15*A_PtrSize), &quot;ptr&quot;, ptlb, &quot;ptr*&quot;, psv:=0) = 0
        {
            ; Define IID_IDispatch.
            VarSetCapacity(IID_IDispatch, 16)
            NumPut(0x46000000000000C0, NumPut(0x20400, IID_IDispatch, &quot;int64&quot;), &quot;int64&quot;)
           
            ; IShellView.GetItemObject -&gt; IDispatch (object which implements IShellFolderViewDual)
            DllCall(NumGet(NumGet(psv+0)+15*A_PtrSize), &quot;ptr&quot;, psv
                , &quot;uint&quot;, 0, &quot;ptr&quot;, &amp;IID_IDispatch, &quot;ptr*&quot;, pdisp:=0)
           
            Items := ComObjEnwrap(pdisp).SelectedItems()
            ObjRelease(psv)
        }
        ObjRelease(ptlb)
    }
    return Items
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-06-02T04:58:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83582#p83582</id>
		</entry>
</feed>
