<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBA: Объект Shell для Windows 7]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=10217</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10217&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBA: Объект Shell для Windows 7».]]></description>
		<lastBuildDate>Sun, 07 Dec 2014 12:57:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=88926#p88926</link>
			<description><![CDATA[<p>Сделал открепление иконки приложения от панели задач следующим образом<br /></p><div class="codebox"><pre><code>Public Function DeleteTaskbarIcon(ByVal FilePath As String, FileName As String) As Boolean
&#039;Удаление иконки с панели быстрого запуска Windows 7
&#039;FilePath для Windows 7 - C:\Users\ИмяПользователя\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
&#039;FileName - имя открепляемого ярлыка. Например Mail.Ru.lnk
&#039;Возвращает признак успешности открепления ярлыка
Dim objShell, objFolder, colVerbs, objVerb
Dim text As String

DeleteTaskbarIcon = False &#039; Возвращаем False, если ярлык не закреплен на панели задач или команды на открепление в меню нет
Set objShell = CreateObject(&quot;Shell.Application&quot;)
Set objFolder = objShell.NameSpace(FilePath &amp; &quot;\&quot;)
Set colVerbs = objFolder.ParseName(FileName).verbs

For Each objVerb In colVerbs
    text = LCase(Replace(objVerb.Name, &quot;&amp;&quot;, &quot;&quot;))
    &#039;Команда на открепление иконки, взятая из контекстного меню чувствительна к языку операционной системы Windows
    If (InStr(text, &quot;unpin&quot;) &gt; 0) Or (InStr(text, &quot;изъять&quot;) &gt; 0) Or (InStr(text, &quot;открепить&quot;) &gt; 0) Then
        objVerb.DoIt &#039;Выполняем открепление
        DeleteTaskbarIcon = True &#039;Функция открепила иконку
    End If
Next

End Function</code></pre></div><p>Есть один момент. Правда функция чувствительна к языку операционной системы. В данном случае будет работать только в английской и русской версиях Windows 7<br />Лучше, конечно, реализовать открепление через API, но так как на решение данной задачи и так потрачено более двух суток на Гугл, то пойдет и так.</p>]]></description>
			<author><![CDATA[null@example.com (McConst)]]></author>
			<pubDate>Sun, 07 Dec 2014 12:57:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=88926#p88926</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=88921#p88921</link>
			<description><![CDATA[<p>Я выполняю последовательный поиск всех ярлыков &quot;mail.ru&quot; и удаляю их из папок где они расположены, в том числе и из папки панели задач Windows 7:<br />У меня C:\Users\Home\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar</p><br /><p>Вот кусок кода<br /></p><div class="codebox"><pre><code>FileName = Dir(Folders(i).path &amp; &quot;\*.lnk&quot;)
    Do While FileName &lt;&gt; &quot;&quot;
        If FileName &lt;&gt; &quot;&quot; Then
            FullFileName = Folders(i).path &amp; &quot;\&quot; &amp; FileName
            Set TextFile = FSO.getfile(FullFileName).OpenAsTextStream(1) &#039;Открываем файл для чтения
            text = TextFile.ReadAll
            TextFile.Close
            If (InStr(LCase(FileName), &quot;mail.ru&quot;) &gt; 0) Or (InStr(LCase(text), &quot;mail.ru&quot;) &gt; 0) Then
                DeletedCount = DeletedCount + 1&#039;Счет удаленных объектов
                Form1.Text1.text = Form1.Text1.text &amp; &quot;- удален ярлык &quot; &amp; FullFileName &amp; vbCrLf
                FSO.deletefile FullFileName, True
            End If
        End If
        FileName = Dir()
    Loop</code></pre></div><p>В Folders(i) перебираются все папки диска C: Физически удаление происходит, проверил<br />Но этого пока не достаточно. Даже после перезагрузки Explorer хвост от ярлыка висит на панели задач.</p><br /><p>По поводу поиска в гугле спасибо. Дело в том, что надо ещё уметь правильно составить поисковый запрос. Например запрос &quot;VBA TaskBar icon delete&quot; или &quot;VBA remove taskbar icon&quot; мне не помогли.<br />По вашему запросу нашел кое-что полезное. Там для удаления иконок используются кроме всего прочего объекты <br />ShellApp.NameSpace(&quot;C:\Users\UserName\Desktop&quot;).Items.Verbs и метод .verbs.DoIt<br />Нужно почитать про verbs, спасибо за подсказку</p>]]></description>
			<author><![CDATA[null@example.com (McConst)]]></author>
			<pubDate>Sun, 07 Dec 2014 09:53:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=88921#p88921</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=88919#p88919</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Средствами VBA пытаюсь удалить ярлык с панели быстрого запуска панели задач Windows 7. Пока не получается.</p></blockquote></div><p>Покажите Ваш код.</p><div class="quotebox"><blockquote><p>На данном ресурсе есть хорошая справочная статья про Shell<br />http://www.script-coding.com/WSH/Shell.html<br />, но для варианта Windows XP.</p></blockquote></div><p>Ничего особенно не поменялось.</p><p>Чем Вас не устраивает <a href="https://www.google.ru/search?q=VBA+Unpin+from+taskbar">VBA Unpin from taskbar - Поиск в Google</a>?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 07 Dec 2014 09:18:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=88919#p88919</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Объект Shell для Windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=88918#p88918</link>
			<description><![CDATA[<p>Здравствуйте<br />Средствами VBA пытаюсь удалить ярлык с панели быстрого запуска панели задач Windows 7. Пока не получается. Список иконок в windows 7 прописан по адресу:<br />C:\Users\Пользователь\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar</p><p>Однако удаление ярлыка по этому адресу и перезагрузка Проводника Windows приводит только к появлению на месте удаляемой из панели быстрого запуска иконки белого несвязанного с объектами ярлычка. В Windows 7 видимо TaskBar имеет самостоятельные методы удаления ярлыков. Где-то в интернете попался форум для C++, в котором упоминалось, что TaskBar является объектом класса Windows Shell. На данном ресурсе есть хорошая справочная статья про Shell<br />http://www.script-coding.com/WSH/Shell.html<br />, но для варианта Windows XP.</p><p>У Microsoft в документации есть упоминания про работу с TaskBar средствами .Net Framework<br />http://msdn.microsoft.com/ru-ru/library/system.windows.shell(v=vs.110).aspx<br />Но как получить доступ к объекту .Net Framework через VBA или VB6 - без понятия. Или может быть объект Shell в Windows 7 имеет больше методов и свойств?</p><p>Знающие люди, отзовитесь, помогите решить проблему удаления ярлыка с панели задач Windows 7</p>]]></description>
			<author><![CDATA[null@example.com (McConst)]]></author>
			<pubDate>Sun, 07 Dec 2014 08:54:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=88918#p88918</guid>
		</item>
	</channel>
</rss>
