Windows Script Host

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Andrey_A писал(а):В Helper есть функция SetTextToClip(Text) - отправить текст в буфер обмена.... при большом куске текста, эта функция не срабатывает.
В апреле этого года Volniy собирался это поведение исправить:
Volniy писал(а):Подтверждаю. Не заметил раньше, потому что на больших количествах файлов попросту не пробовал. Ограничение возникает на объеме буфера около 32 кб. Тут я сам виноват - с панталыку неверно указал тип переменной для хранения размера буфера. Исправим, не проблема.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A писал(а):Ниже описанный код, сохраненный в vbs - не работает.
Что-то с настройками безопасности IE. Ты у нас по методам тыка спец, найдёшь брешь - доложи, если не трудно. :wink:

Есть ещё пару вот таких интересных штучек(требуют установки и реги библиотек): 1, 2.
2-я, кстати, ещё и ini-шники править умеет (это к недавнему P.S. Samwatas).
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Есть ещё пару вот таких интересных штучек(требуют установки и реги библиотек)
- о портативности, как я понимаю, не стоит даже и заикаться?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Может речь о портабельности, а не портативности? Если да, то при желании можно в скрипте регистрировать библиотеку, и поставить на проверку для следующих запусков. Будет почти аналогия.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Script Helper ActiveX for TC beta12
Скачать файл: http://wincmd.ru/download.php?id=script_helper

Исправлены баги: 1) ограниченный до 32 кб размер помещаемого в Буфер обмена текста, 2) ошибка (Несоответствие типа) при вызове методов SetSrcPath и SetTrgPath, если в качестве параметра передавалась переменная, а не просто строка.

Для указания нескольких нажатий клавиши пробела теперь можно использовать синтаксис {SPACE x} или {SP xx} (одиночный пробел {SPACE} или {SP}). Сделано для лучшей читаемости скриптов.

Добавлены Англоязычные доки (спасибо Lev)

PS Пример использования SetSrcPath для выделения файла в панели - http://forum.wincmd.ru/viewpost.php?p=68875
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Volniy писал(а):Исправлены баги: 1) ограниченный до 32 кб размер помещаемого в Буфер обмена текста
Проверил: зебра (ZebraMark-3.vbs) для папки Windows, к которой предварительно применён Ctrl+B (больше 9000 файлов), теперь выдаёт верный результат. Спасибо за обновление!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Volniy
Что-то у меня SetTrgPath перестал устанавливать курсор в другой панели и выделять файл, и после него не работает SendKeyStore.
Добавлено: похоже SetTrgPath ни при чём, через WSH.Run то же самое.. :(
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Нужна такая вещь: задаём список
Set List = CreateObject("Scripting.Dictionary")
List.Add "бла", ""
List.Add "блабла", ""
List.Add "блаблабла", ""
......
Сравниваем значение ранее заданной переменной со всеми элементами списка. Если один из этих элементов совпал, то используем найденное значение из списка в каком-нибудь последующем методе. Как правильно записать?
Последний раз редактировалось Flasher Вт ноя 23, 2010 15:12, всего редактировалось 1 раз.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher
Каждый элемент ассоциированного массива "Scripting.Dictionary" имеет ключ и значение.
Для добавления элемента к массиву используется метод Add:

Код: Выделить всё

Set List = CreateObject("Scripting.Dictionary")
List.Add Key1, Value1
List.Add Key2, Value2
Поэтому запись "EXT.List "бла", """ мне совершенно непонятна.
Если необходимо найти значение элемента массива по ключу, который содержится в некой переменной, то используются конструкции вида:

Код: Выделить всё

MyVar = "бла"
Set List = CreateObject("Scripting.Dictionary")
List.Add "бла"   , "Значение 1"
List.Add "блабла", "Значение 2"
If List.Exists(MyVar) Then
  MsgBox "По ключу """ & MyVar & """ найдено значение """ & List(MyVar) & """"
Else
  MsgBox "По ключу """ & MyVar & """ ничего не найдено"
End If
Здесь List(MyVar) возвращает значение элемента ассоциированного массива List по ключу MyVar.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):Поэтому запись "EXT.List "бла", """ мне совершенно непонятна.
Пардон, поправил. В темпе делал, не ту часть поменял.
Batya писал(а):Здесь List(MyVar) возвращает значение элемента ассоциированного массива List по ключу MyVar.
Хм. Довольно просто. А я в цикл пихал то же самое, откуда глюки и возникли. Только мне не нужно искать значение ключа, мне нужно искать сам ключ, совпадающий со значением переменной, поэтому я и ставлю пустые значения "".
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher писал(а):Только мне не нужно искать значение ключа, мне нужно искать сам ключ, совпадающий со значением переменной

Код: Выделить всё

If List.Exists(MyVar) Then MsgBox MyVar
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Это не то. Я же написал
Flasher писал(а): то используем найденное значение из списка в каком-нибудь последующем методе
Т.е., если перефразировать, то - найденный ключ, но вовсе не значение переменной.
Хотя это даёт один и тот же результат, всё-таки хотелось бы узнать, каким способом выдернуть этот найденный ключ? Это нужно в случае, когда из этого ключа будет браться только его синтаксический кусок, в то время как из значения переменной его выделить не получится.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher
Ничего не понял. А можно более предметно описать задачу?
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ну, не знаю, к примеру:

Код: Выделить всё

D = "D:\"
C = "C:\"
Set List = CreateObject("Scripting.Dictionary") 
List.Add  WScript.Arguments(0), ""
List.Add  WScript.Arguments(1), ""
If List.Exists(D) And List.Exists(C) Then MsgBox (Найденный ключ аля C) & vbnewline & (Найденный ключ аля D)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher
Опять не понял. Что значит "Найденный ключ аля C", если C - это и есть ключ?
Итак, есть массив. Т.к. в массиве заданы только ключи, то можно сказать, что это список ключей.
Проверяем, есть ли некоторый ключ в этом списке.
Дальше что?
Нет, я не сплю. Я просто медленно моргаю.
Ответить