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 

Script Content Plugin
Goto page Previous  1, 2, 3, 4 ... 14, 15, 16  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Anger



Joined: 06 Nov 2007
Posts: 7

Post (Separately) Posted: Thu Apr 29, 2010 16:58    Post subject: signatur.vbs Reply with quote

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
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue May 25, 2010 16:12    Post subject: Reply with quote

В продолжение обсуждения в теме "Поиск папок с частично одинаковыми названиями" хотелось бы вернуться к вопросу возможности произвольно именовать колонки результатов.
Также хотелось бы увеличения количества колонок результатов.

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

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue May 25, 2010 16:48    Post subject: Reply with quote

Lev wrote:
Автору плагина составляет труд даже понять, чего от него хотят Sad
конфиг-параметр-отображаемое поле - я уже заблудился.
Может в обсуждение Script Content plugin'а перебраться?

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

Посмотрел формат файла script.ini, если я так понял, в секции [Script] указано, какой из блоков файла используется в данный момент. Вполне можно в этой секции обрабатывать строки вида "имя поля"="имя блока скрипта", при этом все имеющиеся параметры секции можно получить, вызвав функцию перечисления параметров INI-файла.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Tue May 25, 2010 16:56; edited 1 time in total
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue May 25, 2010 16:50    Post subject: Reply with quote

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


Last edited by Lev on Tue May 25, 2010 16:57; edited 1 time in total
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue May 25, 2010 16:55    Post subject: Reply with quote

Quote:
При инициализации плагина читаешь конфиг...

Т.е. в ини файле будет прописано:
[Columns]
колонка1 = script1.vbs;content
колонка2 = script1.vbs;content1
Заголовок = script2.vbs;content
MyContent=script3.js;content
?
или ещё как-то?
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue May 25, 2010 16:59    Post subject: Reply with quote

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:
Ставил ли кто-нибудь опыты с созданием ссылки на плагин вместо заведения его дубля?

Да. Правда, не с твоим плагином, но результат будет таким же - винда не загрузит новую копию уже загруженной в память библиотеки, просекает, что жесткая ссылка. Подробности.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue May 25, 2010 17:40    Post subject: Reply with quote

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"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue May 25, 2010 19:08    Post subject: Reply with quote

Quote:
будет достаточно одной копии плагина для запуска любого числа скриптов
Можно ведь запускать скрипты скриптом, т.е. можно не переделывать плагин, а написать скрипт вызывающий скрипты по заданному условию - имени текущей папки, ключу в некотором файле и т.п.
О наименованиях полей выдаваемых плагином подумаю. Я так понял, что имеются в виду всё-таки не произвольные и не динамически генерируемые, а заранее вписанные в ini, свои для каждого скрипта в его секции.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue May 25, 2010 19:23    Post subject: Reply with quote

Да, поля задаются только конфигурационным файлом. Поле - одно на каждый скрипт. А по условию - это какая-то морока получится. Вдруг кто-то захочет видеть сразу несколько колонок в одном месте. Удобнее все-таки иметь возможность делать несколько полей.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue May 25, 2010 19:26    Post subject: Reply with quote

В данный момент плагин поддерживает 10 колонок, или я чего-то недопонял.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue May 25, 2010 21:16    Post subject: Reply with quote

Ну, было бы удобнее с любым числом колонок, особенно если это ограничение не связано с какими-либо сложностями. Кому-то хватит 3, кому-то надо 20, а все видят ровно 10, и названия у них малоговорящие (править файл локализации - не дело).
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue May 25, 2010 23:40    Post subject: Reply with quote

MVV wrote:
Поле - одно на каждый скрипт.

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

Подумайте, как, например, при новой логике может быть реализован вот этот вариант.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Sep 13, 2010 17:49    Post subject: Reply with quote

Новый скриптик:
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

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
vsz



Joined: 18 Nov 2010
Posts: 1

Post (Separately) Posted: Thu Nov 18, 2010 19:18    Post subject: Путь к ini-файлу Reply with quote

Здравствуйте!
Обнаружил проблему с использованием плагина в 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);
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu Nov 18, 2010 20:44    Post subject: Reply with quote

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

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

Когда плагин не может найти свой ini-файл он пишет - No script or ini file, снимая этим все подозрения.
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
Goto page Previous  1, 2, 3, 4 ... 14, 15, 16  Next
Page 3 of 16

 
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