Script Content Plugin
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4 ... 14, 15, 16  Next  :| |:
Total Commander -> Плагины Total Commander

#31: signatur.vbs Author: Anger PostPosted: Thu Apr 29, 2010 16:58
    —
Lev, спасибо за скрипт на первой странице - пригодился.
Lev wrote:
Небольшой скрипт, который может быть полезен для поиска файлов с определенной сигнатурой (первые байты в файле).
...
content = content_str
...


Если в получаемой строке есть символы hex(00) (как например в первых 3 байтах контейнера MP4) - в текстовом виде строка вообще не выводится.

Поэтому нужно заменить на
content=Replace(content_str,Chr(0),Chr(1))
или на
content=Replace(content_str,Chr(0)," ")

Немного доработал скрипт ув.ricobautsch:
Code:
'signatur.vbs by ricobautsch
'edited by Anger 29.04.2010

'Script for Script Content Plugin (c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html
'
'Этот скрипт показывает 11 байт файла (nCharCnt=11) начиная с начала (nCharStart=0) в hex
'и тектовом представлении - может быть полезен для поиска файлов с определенной сигнатурой
'Возвращаемые параметры: Result=HEX, Result1=Text

const nCharStart = 0
const nCharCnt = 11

Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)

oTextStream.Skip(nCharStart)
If not oTextStream.AtEndOfStream Then
  content_str = oTextStream.Read(nCharCnt)

' Выводим Text в result1
  content1=Replace(content_str,Chr(0),Chr(1))

' Выводим HEX в result
    For i=1 To Len(content_str)
      If content <> "" Then
        content = content & " "
      End If
     
      hex_value = Hex(Asc(Mid(content_str,i,1)))
     
      content = content & string(2 - len(hex_value), "0")
      content = content & hex_value
    Next
'Else
'  content="EOF"
'  content1="EOF"
End If

oTextStream.Close


PS. Использую для поиска видео-файлов из кеша оперы.
Wincmd.ini
Code:
[Searches]
Video по содержимому > 500 кБ_SearchFor=
Video по содержимому > 500 кБ_SearchIn=
Video по содержимому > 500 кБ_SearchText=
Video по содержимому > 500 кБ_SearchFlags=0|000002000020|||||1|500|1||0000|
Video по содержимому > 500 кБ_plugin=script.Result1 contains FLV | script.Result1 contains mp4 | script.Result1 contains 3gp | script.Result1 contains AVI


Last edited by Anger on Fri Apr 30, 2010 10:03; edited 5 times in total

#32:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 16:12
    —
В продолжение обсуждения в теме "Поиск папок с частично одинаковыми названиями" хотелось бы вернуться к вопросу возможности произвольно именовать колонки результатов.
Также хотелось бы увеличения количества колонок результатов.

Lev
Если не хочется запуска некольких скриптов, сделай приём результатов из скрипта, например, через ассоциированный массив (объект "Scripting.Dictionary"), у которого ключ - это имя результирующей колонки. Т.е. нечто вроде
Code:
content.Add "Новая колонка", "Результат"

#33:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 16:48
    —
Lev wrote:
Автору плагина составляет труд даже понять, чего от него хотят Sad
конфиг-параметр-отображаемое поле - я уже заблудился.
Может в обсуждение Script Content plugin'а перебраться?

ОК, переберемся и уточним.
При инициализации плагина читаешь конфиг и строишь список полей из специальной секции, а дальше - выдаешь эти поля Тоталу, когда тот вызывает ContentGetSupportedField, и потом при вызове ContentGetValue вызываешь тот или иной скрипт, в зависимости от индекса - каждое поле будет иметь свой индекс, который ТК будет сообщать, так что тут не запутаешься. Работы - чуть-чуть, просто хранить не одну строку на запуск скрипта, а два массива - названий полей и строк запуска скрипта, и обращаться к ним по мере необходимости.
В результате юзер при настройке набора колонок будет видеть не одно поле, которое плагин может вернуть, а несколько полей, которые он предварительно настроил, и будет достаточно одной копии плагина для запуска любого числа скриптов.

Посмотрел формат файла script.ini, если я так понял, в секции [Script] указано, какой из блоков файла используется в данный момент. Вполне можно в этой секции обрабатывать строки вида "имя поля"="имя блока скрипта", при этом все имеющиеся параметры секции можно получить, вызвав функцию перечисления параметров INI-файла.


Last edited by MVV on Tue May 25, 2010 16:56; edited 1 time in total

#34:  Author: Lev PostPosted: Tue May 25, 2010 16:50
    —
Quote:
произвольно именовать колонки результатов.
В редакторе колонок можно дать любое желаемое имя колонкам.
Насколько я разобрался - список выводимых результатов плагина грузится при прописывании плагина в тотале, имена при первом вызове, при смене количества колонок и их имён надо будет перепрописывать плагин в тотале.
Теоретически можно динамически перепрописывать имёна колонок в wincmd.ini при каждом вызове плагина, но займусь ли я этим не знаю.
Переписывать имя колонок и количество при выдаче результата каждого файла для директории из тысячи файлов имхо не очень оптимально. Не знаю сохранятсяуже выданные результаты, при изменении количества колонок.
---
Ставил ли кто-нибудь опыты с созданием ссылки на плагин вместо заведения его дубля?


Last edited by Lev on Tue May 25, 2010 16:57; edited 1 time in total

#35:  Author: Lev PostPosted: Tue May 25, 2010 16:55
    —
Quote:
При инициализации плагина читаешь конфиг...

Т.е. в ини файле будет прописано:
[Columns]
колонка1 = script1.vbs;content
колонка2 = script1.vbs;content1
Заголовок = script2.vbs;content
MyContent=script3.js;content
?
или ещё как-то?

#36:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 16:59
    —
Lev wrote:
Quote:
При инициализации плагина читаешь конфиг...

Т.е. в ини файле будет прописано:
[Columns]
колонка1 = script1.vbs;content
колонка2 = script1.vbs;content1
Заголовок = script2.vbs;content
MyContent=script3.js;content
?
или ещё как-то?

Я там дополнил пост. Да, смысл такой. Совсем несложно делать переменное число полей плагина, просто один раз их Тоталу выдавать. А обновить список полей можно, вызвав cm_UnloadPlugins - при этом ТК загрузит плагин заново, тем самым запросив список полей еще раз.
В общем, если юзер имеет несколько скриптов, чтобы он мог видеть несколько контентных полей в плагине - например, поля AddZeroes, ExeUp, Ext, Html и т.п. (можно настроить их в дефолтном конфиге).
А как именно устроить конфиг - тут уж тебе как автору виднее. Smile

Lev wrote:
Ставил ли кто-нибудь опыты с созданием ссылки на плагин вместо заведения его дубля?

Да. Правда, не с твоим плагином, но результат будет таким же - винда не загрузит новую копию уже загруженной в память библиотеки, просекает, что жесткая ссылка. Подробности.

#37:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 17:40
    —
Lev wrote:
Цитата:
произвольно именовать колонки результатов.
В редакторе колонок можно дать любое желаемое имя колонкам.

Сорри, за введение в заблуждение. Я имел ввиду произольные наименования полей плагина. Именно о чём дальше идёт обсуждение.

А чем не устраивает преложенный мной ранее вариант?
Batya wrote:
[Script]
Section=Defaults|Extension|AddZeros|exe-arc up|js

Batya wrote:
content.Add "Новая колонка", "Результат"

Т.е. начитываем поля из инишника из значения "Section".
Запускаем единственный скрипт. Результат работы скрипта - это массив content с ключами по именам описанных ранее в инишнике полей:
Code:
content.Add "Defaults", "Результат 1"
content.Add "Extension", "Результат 2"
content.Add "AddZeros", "Результат 3"
content.Add "exe-arc up", "Результат 4"
content.Add "js", "Результат 5"

#38:  Author: Lev PostPosted: Tue May 25, 2010 19:08
    —
Quote:
будет достаточно одной копии плагина для запуска любого числа скриптов
Можно ведь запускать скрипты скриптом, т.е. можно не переделывать плагин, а написать скрипт вызывающий скрипты по заданному условию - имени текущей папки, ключу в некотором файле и т.п.
О наименованиях полей выдаваемых плагином подумаю. Я так понял, что имеются в виду всё-таки не произвольные и не динамически генерируемые, а заранее вписанные в ini, свои для каждого скрипта в его секции.

#39:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 19:23
    —
Да, поля задаются только конфигурационным файлом. Поле - одно на каждый скрипт. А по условию - это какая-то морока получится. Вдруг кто-то захочет видеть сразу несколько колонок в одном месте. Удобнее все-таки иметь возможность делать несколько полей.

#40:  Author: Lev PostPosted: Tue May 25, 2010 19:26
    —
В данный момент плагин поддерживает 10 колонок, или я чего-то недопонял.

#41:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 21:16
    —
Ну, было бы удобнее с любым числом колонок, особенно если это ограничение не связано с какими-либо сложностями. Кому-то хватит 3, кому-то надо 20, а все видят ровно 10, и названия у них малоговорящие (править файл локализации - не дело).

#42:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 23:40
    —
MVV wrote:
Поле - одно на каждый скрипт.

Меня, конечно, игнорируют, но я выскажусь, что мне не нравится концепция - для каждого поля по скрипту.
Во-первых, это заставит плодить скрипты.
Во-вторых, результат некоторых полей может быть весьма похожим, и нет смысла размножать одинаковую логику.
Ну и наконец, результаты некоторых полей могут зависеть друг от друга. Тогда опять приходим к умножению одинаковых сущностей.

Подумайте, как, например, при новой логике может быть реализован вот этот вариант.

#43:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Sep 13, 2010 17:49
    —
Новый скриптик:
Code:
'=================================================
' Колонка Result возвращает владельца файла\папки
'=================================================

content = Result

Function Result
  On Error Resume Next
  Dim wmiSecSettings 'WMI объект для параметров безопасности
  Dim wmiSecurityDescriptor 'Дескриптор защиты файла

  Dim FOResult 'Результат выполнения операции чтения дескриптора безопасности
  Dim wmiOwner 'Объект владельца файла

  Set wmiSecSettings = GetObject ("winmgmts:Win32_LogicalFileSecuritySetting.path='" & filename & "'") 'Создание WMI объекта файла

  FOResult = wmiSecSettings.GetSecurityDescriptor(wmiSecurityDescriptor) 'Считывание дескриптора безопасности
  Set wmiOwner = wmiSecurityDescriptor.Owner 'Создание объекта владельца файла

  If Err.Number <> 0 Then 'Ошибка при определении владельца файла
    Result = "Can't get file owner. Error: " & Err.Description
  Else 'Владелец файла определен - вывод результата
    Result = wmiOwner.Domain & "\" & wmiOwner.Name
  End If
End Function

#44: Путь к ini-файлу Author: vsz PostPosted: Thu Nov 18, 2010 19:18
    —
Здравствуйте!
Обнаружил проблему с использованием плагина в Portable установке. Подозреваю, что плагин не может найти свой ini-файл.

Как вариант можно всегда брать ini-файл в той же папке, где находится и сам файл плагина:

Code:

uses Windows;

function GetModuleFileNameStr: String;
 var
   buffer : array [0..MAX_PATH] of Char;
 begin
   GetModuleFileName( Hinstance, buffer, MAX_PATH);
   Result := buffer;
 end;

iniPath := ExtractFilePath(GetModuleFileNameStr);

#45:  Author: Lev PostPosted: Thu Nov 18, 2010 20:44
    —
Quote:
можно всегда брать ini-файл в той же папке, где находится и сам файл плагина

Плагин всегда берёт ini-файл в той же папке, где находится и сам файл плагина.
Никакого другого поведения я не закладывал.
Quote:
Подозреваю, что плагин не может найти свой ini-файл.

Когда плагин не может найти свой ini-файл он пишет - No script or ini file, снимая этим все подозрения.



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4 ... 14, 15, 16  Next  :| |:
Page 3 of 16

Powered by phpBB © 2001, 2005 phpBB Group