<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Размещение скриптов в меню проводника "Отправить"]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14680&amp;type=atom" />
	<updated>2019-03-31T11:51:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14680</id>
		<entry>
			<title type="html"><![CDATA[VBS: Размещение скриптов в меню проводника "Отправить"]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=133256#p133256" />
			<content type="html"><![CDATA[<p>Всем привет! В моей практике бывали случаи, когда нужно было многократно запускать скрипт с какой-нибудь самописной утилиткой, перетаскивая на него разные файлы в проводнике. У меня таких набралось несколько. Для удобства, сначала я вручную кидал ярлыки в папку shell:sendto и запускал скрипты, щелкая правой кнопой на файле и выбирая нужный скрипт в контекстном меню проводника &quot;Отправить&quot;. Позднее автоматизировал добавление и удаление скриптов в это меню. Вот шаблон, позволяющий это сделать:</p><div class="codebox"><pre><code>Option Explicit

If WSCript.Arguments.Count = 0 Then
	AddItemToSendTo
	WSCript.Quit
End If

&#039; Здесь располагается рабочая часть скрипта
MsgBox &quot;Передан параметр &quot; &amp; WSCript.Arguments(0)

Sub AddItemToSendTo()
	
	Dim sLocMsgTitle, sLocShCutName, sLocAskAdd, sLocItemAdded, sLocAskRemove, sLocItemRemoved, oWshShell, oFSO, sAppDataPath, sScriptPath, sShCutPath
	
	If GetLocale = 1049 Then
		sLocMsgTitle = &quot;Заголовок&quot;
		sLocShCutName = &quot;Название&quot;
		sLocAskAdd = &quot;Добавить подпункт &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; в пункт &#039;Отправить&#039; контекстного меню Проводника?&quot;
		sLocItemAdded = &quot;Подпункт &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; добавлен&quot;
		sLocAskRemove = &quot;Удалить подпункт &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; из контекстного меню Проводника?&quot;
		sLocItemRemoved = &quot;Подпункт &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; удален&quot;
	Else
		sLocMsgTitle = &quot;Title&quot;
		sLocShCutName = &quot;Name&quot;
		sLocAskAdd = &quot;Add &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; subitem to Explorer context menu &#039;Send To&#039; item?&quot;
		sLocItemAdded = &quot;&#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; subitem added&quot;
		sLocAskRemove = &quot;Remove &#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; subitem from Explorer context menu?&quot;
		sLocItemRemoved = &quot;&#039;&quot; &amp; sLocShCutName &amp; &quot;&#039; subitem removed&quot;
	End If
	Set oWshShell = CreateObject(&quot;WScript.Shell&quot;)
	Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
	sAppDataPath = oWshShell.SpecialFolders.Item(&quot;AppData&quot;)
	sScriptPath = sAppDataPath &amp; &quot;\&quot; &amp; WScript.ScriptName
	sShCutPath = oWshShell.SpecialFolders.Item(&quot;SendTo&quot;) &amp; &quot;\&quot; &amp; sLocShCutName &amp; &quot;.lnk&quot;
	If oFSO.FileExists(sScriptPath) And oFSO.FileExists(sShCutPath) Then
		If MsgBox(sLocAskRemove, vbOKCancel + vbCritical, sLocMsgTitle) = vbOK Then
			oFSO.DeleteFile sScriptPath, True
			oFSO.DeleteFile sShCutPath, True
			MsgBox sLocItemRemoved, vbInformation, sLocMsgTitle
		End If
	Else
		If MsgBox(sLocAskAdd, vbOKCancel + vbQuestion, sLocMsgTitle) = vbOK Then
			oFSO.CopyFile WScript.ScriptFullName, sScriptPath, True
			With oWshShell.CreateShortcut(sShCutPath)
				.Arguments = &quot;&quot;
				.Description = &quot;&quot;
				.HotKey = &quot;&quot;
				.IconLocation = &quot;shell32.dll, 238&quot;
				.TargetPath = sScriptPath
				.WindowStyle = 1
				.WorkingDirectory = sAppDataPath
				.Save
			End With
			MsgBox sLocItemAdded, vbInformation, sLocMsgTitle
		End If
	End If
	
End Sub</code></pre></div><p>Получилось что-то вроде простенького &quot;инсталлятора&quot;: при обычном запуске двойным щелчком скрипт спросит, нужно ли добавить соответствующий пункт в меню &quot;Отправить&quot;, или удалить, если он там уже есть, а при запуске c параметрами управление передается рабочей части скрипта. При добавлении пункта в меню происходит копирование скрипта в папку AppData и создание ярлыка в папке SendTo. При удалении пункта - оба файла удаляются. В шаблоне необходимо кастомизировать заголовок для диалогов, название и иконку для пункта в меню, ну и собственно, вставить Ваш рабочий код вместо MsgBox&#039;а.</p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2019-03-31T11:51:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=133256#p133256</id>
		</entry>
</feed>
