Страница 1 из 3
Автоматический переход в папку при ее создании
Добавлено: Пн янв 07, 2008 11:23
Lari
Здравствуйте!
Имеется vb скрипт для кнопки на панели инструментов, который создает папку с именем файла под курсором и перемещает в нее этот файл.
Подскажите пожалуйста как нужно его дополнить, чтобы при нажатии на кнопку на панели инструментов при нажатой клавише Shift автоматически перейти во вновь созданную папку.
Добавлено: Пн янв 07, 2008 13:38
Volniy
Нажатие Shift средствами VBS не обработать. Если хочешь сразу войти в эту папку, тогда добавь где-то в конце скрипта
Код: Выделить всё
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "{ENTER}"
ЗЫ Сам не проверял, так ведь и скрипта-то твоего я тут не вижу

Добавлено: Пн янв 07, 2008 22:07
Lari
скрипт собственно вот
Код: Выделить всё
Dim NewFolder, CurFile, FileName, CurPath, NPath, FSO, TempFile, SelFile
CurPath = WScript.Arguments(0) '%P
NewFolder = WScript.Arguments(1) '%O
CurFile = WScript.Arguments(2) '%L
FileName = WScript.Arguments(3) '%N
If NewFolder = FileName then
WScript.Quit()
End If
NPath = CurPath + NewFolder
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(NPath) then
FSO.CreateFolder(NPath)
End If
Set TempFile = FSO.OpenTextFile(CurFile, 1)
Do While Not TempFile.AtEndOfStream
Set SelFile = FSO.GetFile(TempFile.ReadLine)
Loop
If Not FSO.FileExists (NPath & "\" & FileName) then
FSO.MoveFile SelFile, NPath & "\" & FileName
End If
WScript.Quit()
но вариант с WshShell.SendKeys "{ENTER}" не подходит, так как курсор находится не на новой папке, которую нужно открыть.
Может есть другое решение?
В идеале хотелось бы, чтобы скрипт работал в двух вариантах:
1. перемещал файл в папку, при нажатии на кнопку на панели инструметов
2. перемещал файл в папку и открывал ее, принажатии на кнопку на панели инструментов и удерживаемой клавише Shift.
Добавлено: Пн янв 07, 2008 22:21
Вахмурка
Нажатие Shift средствами VBS не обработать
А PowerPro - будьте любезны. Например,
вот так.
Добавлено: Вт янв 08, 2008 01:18
Volniy
Вахмурка писал(а):Например,
вот так.
Стар я стал, видать вижу плохо

И где там по ссылке про перехват нажатия кнопки на Тоталовской панели с зажатым шифтом?
2
Lari
Извини, но со скриптом у тя чой-та не таво. Зачем вот тут
Код: Выделить всё
Set TempFile = FSO.OpenTextFile(CurFile, 1)
Do While Not TempFile.AtEndOfStream
Set SelFile = FSO.GetFile(TempFile.ReadLine)
Loop
перебираются
все выделенные файлы, если только
с последним в списке производится следующая далее операция перемещения?
Какой по идее должен быть алгоритм, когда выделено
несколько файлов?
Добавлено: Вт янв 08, 2008 01:44
Вахмурка
Да вы, батенька, педант. Ну, не Shift, а Ctrl - разве это важно?!
По делу. Все сводится вот к чему:
ctrl - это функция, возвращающая "истину", если Ctrl нажат. Есть аналогичная функция shift. А параметр Move ("истина" - уничтожить старый комментарий, "ложь" - сохранить) может быть передан скрипту в явной форме.
Что же до "Тоталовской панели", то нажатие клавиши отслеживается просто в момент отработки оператора. Как именно запущен на выполнение скрипт - абсолютно фиолетово.
Добавлено: Вт янв 08, 2008 02:10
Volniy
Вахмурка писал(а):...нажатие клавиши отслеживается просто в момент отработки оператора. Как именно запущен на выполнение скрипт - абсолютно фиолетово.
Понятно. Наверное, тогда и я в своем хелпере такую же х**ню могу организовать через ту же
GetKeyboardState. Если, конечно, найду его (хелпера) исходники...
PS Ты со словом
педант немного поосторожней. Начало этого слова как-то напрягает

Добавлено: Вт янв 08, 2008 11:42
Вахмурка
А также педаль, педикюр, педиатр, педагог...
Кстати, а не закинуть ли Гислеру пожелание: При нажатии Shift+F7 не только создавать директорию, но и входить в нее. В кодах это - две строки.
Добавлено: Вт янв 08, 2008 13:50
DrShark
Вахмурка писал(а):Кстати, а не закинуть ли Гислеру пожелание: При нажатии Shift+F7 не только создавать директорию, но и входить в нее. В кодах это - две строки.
Закинуть можно. Давай определимся, как ТК должен вести себя при создании нескольких папок способами, упоминавшимися, например,
здесь или
здесь. Вход должен выполнятся в первую папку из перечисленных?
Кстати, интересно, что бы мог означать пост
Valentino писал(а):And with command [F7] "..\D\..\E\..\F" while being in "C:" you can create some additional hard disks if your C drive is out of space... So no need to buy additional HDDs anymore! Cool...
Это метафора такая?
Вообще, подобный способ "создания" дисков мог бы послужить фронтэндом для команды subst.
Добавлено: Ср янв 09, 2008 08:34
Lari
Славненько... м-да
2Volniy
по поводу
Код: Выделить всё
Set TempFile = FSO.OpenTextFile(CurFile, 1)
Do While Not TempFile.AtEndOfStream
Set SelFile = FSO.GetFile(TempFile.ReadLine)
Loop
и правда не совсем корректно... но в написании vbs не силен, поэтому взял какой-то пример и написал то, что хотел. Буду рад, если поправите
2ALL
Каким образом зайти в созданную папку по скрипту??? Без нажатия дополнительных клавиш.
Добавлено: Ср янв 09, 2008 11:46
Вахмурка
Каким образом зайти в созданную папку по скрипту??? Без нажатия дополнительных клавиш.
Открой TOTALCMD.INC и найди команды:
Кроме того, следует поразмышлять о "досовской" команде cd и ее вариациях (скажем, появившаяся в "семерке" команда CD с параметром)
Добавлено: Ср янв 09, 2008 14:09
Volniy
2
Вахмурка
Команды эти в VBS может передавать только с помощью моего хелпера.
Lari писал(а):Буду рад, если поправите

И поправлю

. Только, я повторяюсь, опиши подробно требуемый алгоритм работы скрипта (особенно интересует вариант когда выделен не один файл а несколько).
Предполагаю: создается папка с именем файла под курсором и все выделенные файлы в нее перемещаются. Так?
Добавлено: Ср янв 09, 2008 14:11
Lari
Вообще-то команда cm_GoToDir на сколько я понял работает непосредственно с директорией находящейся под курсором.
Получается не подходит, т.к. после создания папки скриптом курсор на нее не устанавливается. Вот если бы создавать папку командой cm_mkDir без диалога ввода имени, то cm_GoToDir была бы самое то.
И еще можно ли средствами vbs написать в командной строке что-то типа:
cd C:\...\папка_которую нужно открыть ? если да то какаим образом.
Добавлено: Ср янв 09, 2008 14:16
Lari
Volniy писал(а):Предполагаю: создается папка с именем файла под курсором и все выделенные файлы в нее перемещаются. Так?
так НО еще плюс к этому нужно зайти в эту папку.
Добавлено: Ср янв 09, 2008 17:38
DrShark
Lari писал(а):И еще можно ли средствами vbs написать в командной строке что-то типа:
cd C:\...\папка_которую нужно открыть ? если да то какаим образом.
При условии, что TC включена командная строка,
[Layout]
CmdLine=1
можно так:
Код: Выделить всё
WshShell.SendKeys "{RIGHT}"
WshShell.SendKeys "cd папка_которую нужно открыть"
WshShell.SendKeys "{ENTER}"