<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBA: Объект Shell для Windows 7]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10217&amp;type=atom" />
	<updated>2014-12-07T12:57:12Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10217</id>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88926#p88926" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[McConst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32735</uri>
			</author>
			<updated>2014-12-07T12:57:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88926#p88926</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88921#p88921" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[McConst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32735</uri>
			</author>
			<updated>2014-12-07T09:53:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88921#p88921</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Объект Shell для Windows 7]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88919#p88919" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-12-07T09:18:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88919#p88919</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBA: Объект Shell для Windows 7]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88918#p88918" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[McConst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32735</uri>
			</author>
			<updated>2014-12-07T08:54:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88918#p88918</id>
		</entry>
</feed>
