View previous topic :: View next topic |
Author |
Message |
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue May 02, 2017 03:10 Post subject: [VBS] Вставка команы cd в начало командной строки TC |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue May 02, 2017 11:33 Post subject: |
|
|
На 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 |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue May 02, 2017 16:44 Post subject: |
|
|
Flasher wrote: | На Win7 cкрипт забивается в цикле, печатает "СВ ", переключая туда-сюда NumLock. | Когда будет доступ к машине с Win 7 - проверю.
Flasher wrote: | у нас на русском форуме шапку скрипта принято писать/дополнять на нашем языке. Тут далеко не все такие продвинутые англофилы с оффорума. | Шапка скрипта и комментарии в его теле является частью скрипта, т.е. частью ПО. Такого правила форума, которое обязывает локализировать распространяемое на форуме ПО на русский язык, нет. Описание скрипта в целом продубировано на русском в посте, где опубликован скрипт (позже его дополню). Условия использования скрипта свободнее некуда, так что те, кому принципиальны шапка и комментарии на русском, могут скопировать/изменить скрипт (и любую его часть) и заменить комментарии на русскоязычные. _________________ "the light is coming to give back everything the darkness stole"
—©@AG4 |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue May 02, 2017 17:03 Post subject: |
|
|
DrShark
Без обид, но я сомневаюсь, что в таком виде кроме вас этим скриптом кто-то захочет на постоянной основе пользоваться.
Даже безотностельно оптимизации (много лишнего и не учтена блокировка работы с буфером).
А касаемо русского, то я вообще-то не о правилах писал, а о том, как тут принято. Это разные вещи. Из памятки:
Quote: | Общие положения и рекомендации
Описание работы скрипта выносится в его шапку (верхние строки комментариев).
Если описание соответствует вашей задаче, то необходимо сделать следующее: | Если человек не знает языка из этого описания, то ему весьма трудно в этом разбираться, тем более новичку. А к скрипту пользователь возвращается без траты времени на поиск нужного топика на форуме (а тут уже другие факторы роль играют: наличие связи с интернетом и с форумом), заглядывая прежде всего в код. Кстати, вы не первый, кому приходится это объяснять. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed May 03, 2017 15:58 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed May 03, 2017 17:48 Post subject: |
|
|
Короче говоря, вариант в моих условиях нерабочий. Язык по 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 |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed May 03, 2017 19:52 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed May 03, 2017 20:23 Post subject: |
|
|
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 |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed May 03, 2017 22:16 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed May 03, 2017 22:39 Post subject: |
|
|
Вообще 0 - это разрешить, а 1 - это предлагать. Видимо, "предлагать" без обозревателя воспринимается аналогично. Можно поставить If A > 1. Но скрипт всё равно вернёт прежнее значение, т. ч. и текущий вариант тоже корректен. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Thu May 04, 2017 22:44 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri May 05, 2017 21:26 Post subject: |
|
|
DrShark
Никогда не имел дел с мелкомягкими именно из-за сверхмалой вероятности положительного исхода. Да и в данном случае мне это не особо интересно, ибо пользуюсь более годными для этих вещей инструментами (примеры выше).
Что касаемо всяких мелочей типа неубранного в предпоследней строке пробела и подводки к сумме переключений, то это секундные вопросы, которые даже обсуждать не хочется. Если считаете, что многократные вызовы SendKeys, бессмысленные процедуры, объявления переменных объектов, присвоения Nothing, многострочные записи условий - это всё не лишнее, то флаг вам в руки. Нравится - пользуйтесь. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Fri May 05, 2017 22:32 Post subject: |
|
|
Flasher wrote: | Если считаете ... флаг вам в руки. Нравится - пользуйтесь. | Забавно, я вроде достаточно понятно выразился и я не делал однозначных утвержений о том, что якобы всё перечисленное вами нужно обязательно. Но вы, разумеется, не могли не проявить своего хамства и высокомерия. За эти 3 с копейками года начитался здесь подобного (не только от вас), и не жалею, что оставил активное участие на этом форуме.
В общем, спасибо за дискуссию и за сэкономленное время (я всё равно, пусть не так и не сейчас, но написал бы этот скрипт). _________________ "the light is coming to give back everything the darkness stole"
—©@AG4 |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat May 06, 2017 01:11 Post subject: |
|
|
DrShark wrote: | не могли не проявить своего хамства и высокомерия | Я лишь констатирую те очевидности, от которых вы по неясной мне причине отказываетесь, как и от более грамотных решений. Потому моя реакция такая, какая есть, но слово "высокомерие" и тем более "хамство" к ней ни в коей мере не относится. У вас весьма искажённое представление сути моих слов, а точнее ложная их оценка, которая по меньшей мере тянет на оскорбление. И прежде чем искать минусы в других, стоило бы начать с себя: DrShark wrote: | Я попросил ..., а вы навязываете ... Если нет желания ..., напишите прямо |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|
|
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
|