Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[VBS] Вставка команы cd в начало командной строки TC

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Tue May 02, 2017 03:10    Post subject: [VBS] Вставка команы cd в начало командной строки TC Reply with quote

Code:
' cd2cmdline.vbs - inserts CD command at the beginning of the Total Commander command line
' v. 04052017
' Replaces clipboard content without restoring
' Requires Internet Explorer and its option "Allow Programmatic clipboard access"
' for "Scripting" set to either "Enable" or "Prompt".
' (if set to "Disable", the script will try to change it to "Prompt" only for its run time and then restore to previous state)
' Written in 2017 by DrShark
' To the extent possible under law, the author(s) have dedicated all copyright and related
' and neighboring rights to this software to the public domain worldwide.
' This software is distributed without any warranty.
' A copy of the CC0 Public Domain Dedication for this software is available at
' <http://creativecommons.org/publicdomain/zero/1.0/>.

Public WSH, objHTML
Set WSH = CreateObject("WScript.Shell")
Set objHTML = CreateObject("htmlfile")
clpaccesskeylocation = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
On Error Resume Next
clpacckessvalue = WSH.RegRead(clpaccesskeylocation)
If clpacckessvalue > 1 Or Err.Number <> 0 Then WSH.RegWrite clpaccesskeylocation, 1, "REG_DWORD"

main

Sub main
Set clpbrdtext = Nothing
' Inserting CD command to TC cmdline:
WSH.SendKeys "+{Right}{Home}CD "

' Selecting the CD command in the cmdline:
WSH.SendKeys "{Home}"
WSH.SendKeys "{Right}{Right}"
WSH.SendKeys "+{Home}"
' Copy the selected command to clipboard
WSH.SendKeys "^C"
WScript.Sleep 10
clpbrdtext = objHTML.ParentWindow.ClipboardData.GetData("text")
' Check whether command was copied with English keyboard layout:
compstr = StrComp(clpbrdtext, "CD")
 If compstr = 0 Then
  WSH.SendKeys "{Home}"
  quitscript
 Else
  keyblayoutchange
End If
End Sub

Sub keyblayoutchange
togglevalue = WSH.RegRead("HKCU\Keyboard Layout\Toggle\Hotkey")
Select Case togglevalue
  Case 1 togglehotkey = "%+" : Case 2 togglehotkey = "^+" : Case 4 togglehotkey = "`"
End Select
WSH.SendKeys togglehotkey
WSH.SendKeys "{Home}{Right}{Right}{Right}"
WSH.SendKeys "+{Home}"
WSH.SendKeys "{BACKSPACE}"
main
End Sub

Sub quitscript
If clpacckessvalue > 1 Then WSH.RegWrite clpaccesskeylocation, clpacckessvalue, "REG_DWORD"
WScript.Sleep 100
Set clpbrdtext = Nothing
Set objHTML = Nothing
Set WSH = Nothing
End Sub

После запуска из TC скрипт устанавливает фокус на командную строку TC и вставляет в её начало команду CD с последующим пробелом, не затирая уже введенное содержимое. Вроде работает, как ожидается.
Если способ установки фокуса в ком. строку кажется недостаточно надёжным, в TC 9 в кнопке можно перед em_ командой, которая вызывает скрипт, прописать cm_FocusCmdLine.
Требования: Internet Explorer. Его настройка "Сценарии"->
"Разрешить программный доступ к буферу обмена" должна быть установлена в "Предлагать" или "Включить". Если выбрано "Отключить", скрипт в начале своей работы попытается изменить на "Предлагать", а после её окончания вернуть предыдущее состояние.
Скрипт заменяет (и не восстанавливает после завершения работы) содержимое буфера обмена.
Распространяется без каких-либо гараний, в т.ч. на поддержку и исправление багов (я не программист и не могу обещать их исправления).
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4


Last edited by DrShark on Thu May 04, 2017 23:10; edited 5 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue May 02, 2017 11:33    Post subject: Reply with quote

На Win7 cкрипт забивается в цикле, печатает "СВ ", переключая туда-сюда NumLock.

Зачем такие костыли, когда есть простые решения?:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef tcm(4003,1) eval(settext_wait(`cd `,findwnd(Edit,,,0,1))) send({END})
wciconex.dll,156
Вставить 'cd ' в командную строку ТС
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef tcm(4003,1) send(`{HOME}~(cd) {END}`)
wciconex.dll,156
Вставить спереди 'cd ' в командной строке ТС

P.S.: И на всякий случай, у нас на русском форуме шапку скрипта принято писать/дополнять на нашем языке. Тут далеко не все такие продвинутые англофилы с оффорума.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Tue May 02, 2017 16:44    Post subject: Reply with quote

Flasher wrote:
На Win7 cкрипт забивается в цикле, печатает "СВ ", переключая туда-сюда NumLock.
Когда будет доступ к машине с Win 7 - проверю.

Flasher wrote:
у нас на русском форуме шапку скрипта принято писать/дополнять на нашем языке. Тут далеко не все такие продвинутые англофилы с оффорума.
Шапка скрипта и комментарии в его теле является частью скрипта, т.е. частью ПО. Такого правила форума, которое обязывает локализировать распространяемое на форуме ПО на русский язык, нет. Описание скрипта в целом продубировано на русском в посте, где опубликован скрипт (позже его дополню). Условия использования скрипта свободнее некуда, так что те, кому принципиальны шапка и комментарии на русском, могут скопировать/изменить скрипт (и любую его часть) и заменить комментарии на русскоязычные.
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue May 02, 2017 17:03    Post subject: Reply with quote

DrShark
Без обид, но я сомневаюсь, что в таком виде кроме вас этим скриптом кто-то захочет на постоянной основе пользоваться.
Даже безотностельно оптимизации (много лишнего и не учтена блокировка работы с буфером).
А касаемо русского, то я вообще-то не о правилах писал, а о том, как тут принято. Это разные вещи. Из памятки:
Quote:
Общие положения и рекомендации
Описание работы скрипта выносится в его шапку (верхние строки комментариев).
Если описание соответствует вашей задаче, то необходимо сделать следующее:
Если человек не знает языка из этого описания, то ему весьма трудно в этом разбираться, тем более новичку. А к скрипту пользователь возвращается без траты времени на поиск нужного топика на форуме (а тут уже другие факторы роль играют: наличие связи с интернетом и с форумом), заглядывая прежде всего в код. Кстати, вы не первый, кому приходится это объяснять.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed May 03, 2017 15:58    Post subject: Reply with quote

Flasher wrote:
На Win7 cкрипт забивается в цикле, печатает "СВ "
Обновил код, попытка исправить зацикливание связанное с неотработкой ^C на быстром ПК.
Flasher wrote:
переключая туда-сюда NumLock.

Это воспроизвести пока не удалось (проверялось на машине с Winows 7 32 bit и клавиатуре с Num pad). И статус NumLock не похоже чтобы влиял на корректность отработки скрипта.
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed May 03, 2017 17:48    Post subject: Reply with quote

Короче говоря, вариант в моих условиях нерабочий. Язык по Alt+Shift не переключается ни так ни эдак:
Code:
CreateObject("WScript.Shell").SendKeys "%+"
'CreateObject("WScript.Shell").SendKeys "+{ALT}"
'CreateObject("WScript.Shell").SendKeys "%{SHIFT}"

А так весь скрипт это:
Code:
With CreateObject("WScript.Shell")
  .SendKeys "+{Left}{Home}cd {Left}+{Home}^c"
  If CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") = "cd" Then _
  .SendKeys "{End}" : WSH.Quit
  Select Case .RegRead("HKCU\Keyboard Layout\Toggle\Hotkey")
     Case 1 HK = "+%" : Case 2 HK = "^+" : Case 4 HK = "`"
  End Select : .SendKeys HK & "{Del}cd {End}"
End With

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed May 03, 2017 19:52    Post subject: Reply with quote

Flasher wrote:
вариант в моих условиях нерабочий. Язык по Alt+Shift не переключается ни так ни эдак

Просьба написать, если выяснится, что это связано с каким-то сторонним ПО, которое имеет приоритет на обработку этой комбинации клавиш.
Flasher wrote:
не учтена блокировка работы с буфером

Можете объяснить, что имеется в виду? Она в вашем варианте также не учтена?
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4


Last edited by DrShark on Wed May 03, 2017 21:38; edited 2 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed May 03, 2017 20:23    Post subject: Reply with quote

DrShark wrote:
это связанно с каким-то строрнним ПО
Нет, не связано. Возможно, это связано с тем, что в отличии от старых версий при эмуляции нажатия сочетания этих модификаторов ожидается нажатие иных клавиш. Также имеется побочный эффект, когда Ctrl автоматически включает Shift. Да и сам метод SendKeys не добавляет надёжности. Например, при указании кириллицы ничего не печатается. Т. е. проблем хватает.

DrShark wrote:
Она в вашем варианте таже не учтена?
Нет. Я лишь натолкнул на лаконичность. А учтена она в куче моих других скриптов (1, 2, 3, 4 и т.д.).
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Wed May 03, 2017 23:50; edited 1 time in total
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed May 03, 2017 22:16    Post subject: Reply with quote

Flasher wrote:
блокировка работы с буфером
Flasher wrote:
учтена она в куче моих других скриптов (1, 2, 3, 4 и т.д.).
Вы присваиваете значение 0 ключу HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407 в случае, если его значение отличается от нуля.
У меня на Vista 32 bit значение ключа: 1, и буфер обмена в скриптах прекрасно работает. Насколько корректно ваше решение?
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed May 03, 2017 22:39    Post subject: Reply with quote

Вообще 0 - это разрешить, а 1 - это предлагать. Видимо, "предлагать" без обозревателя воспринимается аналогично. Можно поставить If A > 1. Но скрипт всё равно вернёт прежнее значение, т. ч. и текущий вариант тоже корректен.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Thu May 04, 2017 22:44    Post subject: Reply with quote

Flasher wrote:
не учтена блокировка работы с буфером
Добавил.
Flasher wrote:
Вообще 0 - это разрешить, а 1 - это предлагать. Видимо, "предлагать" без обозревателя воспринимается аналогично.
Проверил: объект InternetExplorer.Application делает запрос и на запись и на чтение, объект htmlfile умеет только читать и получает текст буфера обмена без запроса, видимо MS считает его более безопасным.
Flasher wrote:
много лишнего
Не так много, как кажется на первый взгляд:
1) Ctrl+Enter ставит имя файла/папки в ком. строку, раскладка русская. Далее запуск вашего варианта скрипта: он ставит 2 пробела после cd, мой же, как положено, 1.
2) переход в ком. строку, ввод руками cd c:\, затем дважды Esc для очистки и выхода из ком. строки, затем запускаем ваш скрипт: в ком. строке будет
св \
или
cd \
У моём варианте будет
cd c:\
(да, мой скрипт в этом случае не убирает то, что вставляется автодополнением, но и не делает из пути огрызок).
3) у меня 4 раскладки: английская, украинская, русская, японская (идут в этом порядке). Ваш вариант скрипта не работает, если текущая раскладка украинская: переводит раскладку на русскую и останавливается, оставляя в ком. строке "св ".
Flasher wrote:
Alt+Shift ... при эмуляции нажатия сочетания этих модификаторов ожидается нажатие иных клавиш. ... Ctrl автоматически включает Shift ... при указании кириллицы ничего не печатается.
У вас Internet Explorer 11, который на Windows 7 будет поддерживаться до начала 2020 г. Попробуйте сообщить об ошибках в Microsoft, есть небольшой шанс, что их исправят.
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 05, 2017 21:26    Post subject: Reply with quote

DrShark
Никогда не имел дел с мелкомягкими именно из-за сверхмалой вероятности положительного исхода. Да и в данном случае мне это не особо интересно, ибо пользуюсь более годными для этих вещей инструментами (примеры выше).
Что касаемо всяких мелочей типа неубранного в предпоследней строке пробела и подводки к сумме переключений, то это секундные вопросы, которые даже обсуждать не хочется. Если считаете, что многократные вызовы SendKeys, бессмысленные процедуры, объявления переменных объектов, присвоения Nothing, многострочные записи условий - это всё не лишнее, то флаг вам в руки. Нравится - пользуйтесь.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Fri May 05, 2017 22:32    Post subject: Reply with quote

Flasher wrote:
Если считаете ... флаг вам в руки. Нравится - пользуйтесь.
Забавно, я вроде достаточно понятно выразился и я не делал однозначных утвержений о том, что якобы всё перечисленное вами нужно обязательно. Но вы, разумеется, не могли не проявить своего хамства и высокомерия. За эти 3 с копейками года начитался здесь подобного (не только от вас), и не жалею, что оставил активное участие на этом форуме.
В общем, спасибо за дискуссию и за сэкономленное время (я всё равно, пусть не так и не сейчас, но написал бы этот скрипт).
_________________
"the light is coming to give back everything the darkness stole"
—©@AG4
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat May 06, 2017 01:11    Post subject: Reply with quote

DrShark wrote:
не могли не проявить своего хамства и высокомерия
Я лишь констатирую те очевидности, от которых вы по неясной мне причине отказываетесь, как и от более грамотных решений. Потому моя реакция такая, какая есть, но слово "высокомерие" и тем более "хамство" к ней ни в коей мере не относится. У вас весьма искажённое представление сути моих слов, а точнее ложная их оценка, которая по меньшей мере тянет на оскорбление. И прежде чем искать минусы в других, стоило бы начать с себя:
DrShark wrote:
Я попросил ..., а вы навязываете ... Если нет желания ..., напишите прямо

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group