Войти

Показать полную графическую версию : Создание Нового текстового документа через контекстное меню пкп


Александр Котов
16-05-2013, 11:33
Цель: В Windows 7 вынести создание Нового текстового документа из подменю команды Создать в основное контекстное меню пкм. Нужен тот же эффект, т.е. создаётся Новый текстовый документ с уже выделенным для переименования именем. Повторное создание документа получает название Новый текстовый документ (2) и т. д.

Пробовал прописывать в реестр:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\newtxtfile]
"MUIVerb"="Создать текстовый файл"
"Icon"="notepad.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\newtxtfile\command]
@="cmd.exe /s /c pushd \"%V\" @echo >> Текст.txt"

или создавать батник с последующим закреплением в контекстном меню пкм:

chcp 1251
@echo off >> "Новый текстовый документ".txt

Это было ближе, но не то, что хотелось бы в итоге получить.

OSArev
21-05-2013, 23:06
Так? Хотя на форуме есть подобные темы...
CreateObject.vbs
Option Explicit

Dim FSO, WshShell, objRegExp, sFile, PathName, i, strName, Ext, r

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set objRegExp = new regexp

Call CreateFile

WScript.Quit 0

Function CreateFile

Ext = ".txt"
sFile = inputbox("Создание текстового документа." & vbCrLf & _
"При совпадении имён к имени будут добалены" & vbCrLf & _
"приставка ""копия"" и порядковый номер." & vbCrLf & vbCrLf & _
"ВВЕДИТЕ НАЗВАНИЕ:", "Создание текстового документа.", "Новый текстовый документ",000,000)
If Len(sFile) = 0 Then
sFile = WScript.Quit
End If

objRegExp.Pattern = "[\*\\\/\?\<\>\:\""\|]"
If objRegExp.Test(sFile) Then
R = MsgBox("ОШИБКА!!! " & vbCrLf & _
"Введены недопустимые символы в имени файла." & vbCrLf & _
"Попробуйте снова", 64+5 , "Создание текстового документа.")
Select Case r
Case vbRetry
Call CreateFile
Case vbCancel
WScript.Quit
End Select
Else

If WScript.Arguments.Count = 1 Then
PathName = WScript.Arguments.Item(0)
End if

If not FSO.FileExists(PathName & "\" & sFile & Ext) Then
fso.CreateTextFile(PathName & "\" & sFile & Ext)
WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & Ext)
Else

If not FSO.FileExists(PathName & "\" & sFile & " - копия" & Ext) Then
fso.CreateTextFile(PathName & "\" & sFile & " - копия" & Ext)
WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & " - копия" & Ext)
Else

If FSO.FileExists(PathName & "\" & sFile & Ext) Then

With FSO
i = 0
Do
i = i + 1

If i <> 0 Then strName = sFile & " - копия (" & CStr(i) & ")" & Ext
If Not .FileExists(.BuildPath(PathName, strName)) Then
fso.CreateTextFile(PathName & "\" & strName)
WshShell.Run("%windir%\notepad " & PathName & "\" & strName)
Exit Do
End If
Loop
End With

End if
End If
End If
End If
End Function

И REG-файл для добавления в реестр:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новый текстовый документ]
"icon"="C:\\Windows\\ТВОЯ_ПАПКА\\ТВОЯ_ИКОНКА.ico"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новый текстовый документ\command]
@="WScript C:\\Windows\\ТВОЯ_ПАПКА\\CreateObject.vbs \"%V\""

Александр Котов
22-05-2013, 10:10
Не так. Нужно как это делается в Windows по-умолчанию один в один, только не из подменю команды "Создать", а сразу через контекстное меню пкм.

OSArev
22-05-2013, 21:52
Вы добавляли в реестр данные? Там как раз для правой кнопки мыши... А по поводуНужно как это делается в Windows по-умолчанию один в один » то уже можно в скрипте «допилить», как надо.

Александр Котов
23-05-2013, 00:14
Если бы знал, как допилить, не обращался бы к специалистам.
А предложеный вами скрипт создаёт файл аж в корневой папке диска. Тогда уж на крайняк лучше так:

Dim FSO, MyFile

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

FileName=Inputbox("Введите имя нового текстового документа После нажатия кнопки ОК документ сохранится в ЗАКРЫТОМ виде","Создание текстового документа.")
'Для кнопки Отмена или для пустого поля ввода
If FileName=Empty Then
WScript.Quit
End If

'Проверка на существование файла и создание.
'Добавил открытие файла
If FSO.FileExists(FileName & ".txt") Then
WScript.Echo "Документ ''"& FileName & ".txt" & "'' - уже существует."
WScript.Quit 0
Else
fso.CreateTextFile(FileName & ".txt")
End If

или вот так:

Dim FSO, MyFile

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

FileName=Inputbox("Введите имя нового текстового документа После нажатия кнопки ОК документ сохранится в ОТКРЫТОМ виде для ввода текста","Создание текстового документа.")
'Для кнопки Отмена или для пустого поля ввода
If FileName=Empty Then
WScript.Quit
End If

'Проверка на существование файла и создание.
'Добавил открытие файла
If FSO.FileExists(FileName & ".txt") Then
WScript.Echo "Документ ''"& FileName & ".txt" & "'' - уже существует."
WshShell.Run("Explorer" &" " & FileName & ".txt")
WScript.Quit 0
Else
fso.CreateTextFile(FileName & ".txt")
End If
WshShell.Run("Explorer" &" " & FileName & ".txt")

но это всё не один в один как в Windows, цель не достигнута.

Iska
23-05-2013, 00:20
Александр Котов, Вам давно пора ознакомиться с тегами форума (http://forum.oszone.net/misc.php?do=bbcode) и, в особенности — с тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).

OSArev
23-05-2013, 06:53
Все там работает, как надо. Проверьте пути, где лежит файл. Надо обязательно в папке Windows.

Александр Котов
23-05-2013, 09:52
OSArev, может там все и работает, но ищется решение конкретной задачи, без похожих вариантов.

OSArev
24-05-2013, 00:06
но ищется решение конкретной задачи, без похожих вариантов. »
Вы бы показали свои искания, людям было бы интересно... :dont-know
Вот пока без выделения
Option Explicit

Dim FSO, sFile, PathName, i, strName, Ext

Set FSO = CreateObject("Scripting.FileSystemObject")

Call CreateFile

WScript.Quit 0

Function CreateFile

Ext = ".txt"
sFile = "Новый текстовый документ"

If WScript.Arguments.Count = 1 Then
PathName = WScript.Arguments.Item(0)
End if

If not FSO.FileExists(PathName & "\" & sFile & Ext) Then
fso.CreateTextFile(PathName & "\" & sFile & Ext)
Else

If FSO.FileExists(PathName & "\" & sFile & Ext) Then

With FSO
i = 0
Do
i = i + 1

If i <> 0 Then strName = sFile & " - копия (" & CStr(i) & ")" & Ext
If Not .FileExists(.BuildPath(PathName, strName)) Then
fso.CreateTextFile(PathName & "\" & strName)
Exit Do
End If
Loop
End With

End if
End If
End Function

Александр Котов
25-05-2013, 09:43
OSArev, свои изыскания привёл выше (#5). Это всё, что есть.

OSArev
25-05-2013, 15:07
Понял, Вас. А без выделения имени файла для переименования ни как? Как в выше изложеном скрипте?
Посмотрю, может как-то можно будет через реестр извратиться...

Александр Котов
26-05-2013, 10:57
OSArev, без выделения имени файла для переименования никак. Ищу именно это для образца, чтобы по этому шаблону проделать то же для файлов с другими расширениями.

OSArev
26-05-2013, 18:49
Угу, понятно... Просьба, если найдёте, что-нибудь поделитесь, пожалуйста. Самому стало интересно.

denis19
18-08-2024, 18:36
sFile = inputbox("Создание текстового документа." & vbCrLf & _ »
Скажите пожалуйста, а можно ли подправить так, чтоб документ создавался с содержимым из буфера обмена?




© OSzone.net 2001-2012