Создать новый файл из пользовательской кнопки панели проводника

Я хочу создать пользовательскую кнопку на панели инструментов проводника Windows, чтобы создать новый пустой текстовый документ, аналогичный уже существующей кнопке «Новая папка».

введите здесь описание изображения

После эти шаги, я смог создать свою кнопку и заставить ее запускать собственный VBScript:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.CreateTextFile(WshShell.CurrentDirectory & "\NewTextDocument.txt", True)
objFile.Close
Wscript.Quit

Однако значение WshShell.CurrentDirectory равно C:\Windows\system32. (Я думаю, это потому, что вызывается команда wscript.exe, которая находится в этом каталоге.).

Как я могу получить каталог, в котором открыто окно проводника?

-- Отчасти связано: я получаю сообщение об ошибке "Отказано в доступе" при запуске этого скрипта. Я предполагал, что это связано с тем, что каталог system32 защищен. Существуют ли какие-либо другие меры предосторожности для обеспечения возможности создания файла сценарием?

Спасибо.


person Eric    schedule 28.03.2014    source источник
comment
Я знаю только один способ - создать и зарегистрировать inproc COM-сервер вместо VBScript. COM-сервер должен реализовывать IObjectWithSite, IInitializeCommand, IObjectWithSelection, IExplorerCommand, IExplorerCommandState. Необходимо прописать CLSID COM-сервера в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\YouCommandName в значении ExplorerCommandHandler. И будет доступно получение текущей папки внутри IObjectWithSite.SetSite.   -  person Denis Anisimov    schedule 29.03.2014


Ответы (1)


Вам нужен другой подход.

Используйте оболочку, а не файловую систему, чтобы делать то, что вы хотите.

Вот два примера скриптов, использующих нужный вам тип объектов.

'Const NETHOOD = &H14& 'fonts
'Const NETHOOD = &H12& 'Network
Const NETHOOD = &H11& 'My Comp
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(NETHOOD)
Set objFolderItem = objFolder.Self
Wscript.Echo objFolderItem.Path
Set colItems = objFolder.Items
For Each objItem in colItems
    For x = 1 to 79

        Properties = Properties & vbtab & objFolder.GetDetailsOf(ObjItem, x)
    Next
    Wscript.Echo objItem.Name" & Properties 
    Properties=""
Next

и найти нужное окно

Set objShell = CreateObject("Shell.Application")
Set AllWindows = objShell.Windows
For Each window in AllWindows
    msgbox window.locationname
Next
person samd444    schedule 29.03.2014