Добавление пользовательской «новой папки» в контекстное меню проводника Windows - PullRequest
4 голосов
/ 02 февраля 2011

Я часто использую текущую дату и время для именования новых папок, и я создал программу, которая делает это (т.е. она принимает один аргумент, а затем создает новую папку на основе текущей даты и времени и аргумента).

Мне было интересно, как я могу сделать так, чтобы я отображал «Новая папка DateTime» в моем контекстном меню в проводнике Windows (чуть ниже «Новая папка») и чтобы она автоматически добавляла дату и времяспереди и позволяет пользователю ввести имя.На самом деле это очень похоже на стандартную «Новую папку», за исключением того, что вместо имени по умолчанию «Новая папка» это должно быть «DateTime» и текст по умолчанию не должен быть помечен.Спасибо.

Ответы [ 2 ]

7 голосов
/ 03 февраля 2011

Поработав немного, я нашел способ добавить базовую версию, просто отредактировав реестр.Он не запрашивает имя (он просто использует базовый формат ДД.ММ.ГГГГ ЧЧ; ММ; СС) и не входит в режим переименования проводника:

Explorer New menu

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate]
@="NewDirectoryBasedOnDate"

[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate\ShellNew]
"Command"="\"CMD\" /D /E:ON /c for /F \"tokens=1-9 delims=.,\\:/\" %%A IN (\"%%date%%.%%time%%\") DO for /F \"tokens=*\" %%a IN (\"%1\") do md \"%%~dpa\\%%A.%%B.%%C %%D;%%E;%%F\""
"nullfile"=hex:

[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate]
"FriendlyTypeName"="Directory Based On Date"

[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\DefaultIcon]
@="shell32.dll,3"

[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open]
"LegacyDisable"=hex:

[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open\command]
@="."

Я только протестировал это на WinXP, и это немного хакерский (мне пришлось добавить поддельную клавишу Shell\open\command, чтобы появился новый пункт меню)

Изменив команду на wscript.exe //nologo "C:\path\to\NewDateDir.wsf" "%1" исохраняя следующий код в NewDateDir.wsf, вы получите следующее:

Explorer New menu and WSH script

<?xml version="1.0" ?><job><script language="VBScript"><![CDATA[

if WScript.Arguments.Count < 1 then
    MsgBox("Bad parameter!")
    WScript.Quit(1)
end if

Set FSO=CreateObject("Scripting.FileSystemObject")

Function StrFilter(s,ch,rep)
StrFilter=Join(Split(s,ch,-1),rep)
End Function

basedir=FSO.GetParentFolderName(WScript.Arguments(0))
defname=Date&" "&Time
defname=StrFilter(defname,"/",".")
defname=StrFilter(defname,":",";")
name=InputBox("New folder in "&basedir,"New folder",defname)

if not IsEmpty(name) and Len(name) > 0 then
    FSO.CreateFolder(FSO.BuildPath(basedir,name))
end if
]]></script></job>

Даже если вы решите написать расширение оболочки, я думаю, что активация режима переименования проводников будетбыть тяжелым, особенно если вы хотите частичный отбор.Вы также должны помнить, что другие программы могут реализовывать контекстные меню оболочки, поэтому вы не можете использовать все виды недокументированных проводников.

0 голосов
/ 02 февраля 2011

Вы должны реализовать расширение оболочки, в частности контекстное меню. Здесь - довольно хороший пример того, как это сделать.Существует также некоторая документация более низкого уровня по MSDN здесь (для контекстных меню в частности) и здесь (для расширений оболочки в целом).В вашем конкретном случае я думаю, что вы зарегистрируете расширение вашей оболочки под ключом "Directory \ Background".

...