View previous topic :: View next topic |
Author |
Message |
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Sat Oct 03, 2009 21:48 Post subject: Использование wdx-плагинов в скриптах |
|
|
Из темы Сортировка mp3 по каталогам с учётом id3 тегов.:
Lev wrote: | Имхо, лучше в отдельной теме.
Для скриптов было бы интересно оформление в виде ActiveX, чтобы не возиться с WshShell.Exec, StdOut... |
Решил начать тему.
Кто-нибудь имеет опыт вытаскивания информации с помощью wdx-плагинов в скриптах, по возможности через COM? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Wed Oct 07, 2009 18:24 Post subject: |
|
|
Накидал краткий пример получения поля контентного плагина при помощи wdxtest.exe. Получаем все поля с помощью утилиты, а затем RegExp'ами выкусываем из текстовки нужные значения. Без обработки ошибок.
Code: | 'получение поля контентного плагина при помощи wdxtest.exe
'lev
wdxtest="c:\WINCMD\utils\wdxtest\wdxtest.exe"'путь к wdxtest.exe
wdxplug="c:\WINCMD\Content_wdx\NameChrCount\Filename_ChrCount.wdx"'путь к контентному плагину
filename="c:\WINCMD\Content_wdx\NameChrCount\Filename_ChrCount.wdx"'путь к файлу инфу о котором получаем
Set WshShell = CreateObject("WScript.Shell")
Set res=WshShell.Exec(wdxtest & " " & wdxplug & " " & filename)
c=res.StdOut.ReadAll
'MsgBox c 'для отладки, для составления правильного паттерна
Dim re
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.MultiLine = False
re.Pattern = "1: Filename \(ChrCount\): (.*)" 'кол-во букв в имени файла
Set field=re.Execute(c)
MsgBox field(0).Submatches(0) | Теперь можем создавать директории, двигать и переименовывать файлы и т.д. и т.п.
Когда рассекретится wdx.exe, возможно, сможем получать нужные поля напрямую, что ускорит обработку большого количества файлов. Чем работать с wdx по ActiveX пока не знаю, самому писать обёртку лень. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Thu Oct 08, 2009 09:49 Post subject: |
|
|
Lev
Отлично!
Я вот, правда, хочу оформить в vbs-скрипте вызов wdx непосредственно как dll. Только пока, к сожалению, нет возможности уделить на это время _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1293
|
(Separately) Posted: Thu Oct 08, 2009 11:09 Post subject: |
|
|
Если интересно, вот моя реализация на Autoit, я с помощью этого скрипта тестирую плагины. Переделать под конкретные нужды и прикрутить обработку регэкспами - дело нескольких десятков минут.
Code: |
#include <Array.au3>
Global $sFile = @ScriptDir & "\TestTorrent.torrent"
Global $sWdxPlugin = @ScriptDir & "\TCTorrent.wlx"
Global $nUnitIdx = 0
Global Const $ft_nomorefields = 0
Global Const $ft_numeric_32 = 1
Global Const $ft_numeric_64 = 2
Global Const $ft_numeric_floating = 3
Global Const $ft_date = 4
Global Const $ft_time = 5
Global Const $ft_boolean = 6
Global Const $ft_multiplechoice = 7
Global Const $ft_string = 8
Global Const $ft_fulltext = 9
Global Const $ft_datetime = 10
Global Const $ft_stringw = 11
Global $aFields[1][3]
For $i = 0 To 255
$aRet = DllCall($sWdxPlugin, "int", "ContentGetSupportedField", "int", $i, "str", "", "str", "", "int", 65535)
If @error Then ExitLoop
If $aRet[0] = $ft_nomorefields Then ExitLoop
ReDim $aFields[$i+1][3]
$aFields[$i][0] = $aRet[0]
$aFields[$i][1] = $aRet[2]
$aFields[$i][2] = $aRet[3]
Next
If UBound($aFields) = 0 Then
MsgBox (0, "", "No fields.")
Exit
EndIf
Global $aValues[UBound($aFields)][2]
Global $nMaxBuffSize = 65535
Global $pBuffer = DllStructCreate("byte[65535]")
For $i=0 To UBound($aFields) - 1
$aRet = DllCall($sWdxPlugin, "int", "ContentGetValue", "str", $sFile, "int", $i, "int", $nUnitIdx, "ptr", DllStructGetPtr($pBuffer), "int", $nMaxBuffSize, "int", 0)
If @error Then ExitLoop
Switch $aFields[$i][0]
Case $ft_numeric_32
$pValue = DllStructCreate("int", DllStructGetPtr($pBuffer))
Case $ft_numeric_64
$pValue = DllStructCreate("int64", DllStructGetPtr($pBuffer))
Case $ft_numeric_floating
$pValue = DllStructCreate("double", DllStructGetPtr($pBuffer))
Case $ft_string, $ft_fulltext
$pValue = DllStructCreate("char[" & $nMaxBuffSize & "]", DllStructGetPtr($pBuffer))
Case $ft_datetime
$pFileTime = DllStructCreate("dword;dword", DllStructGetPtr($pBuffer))
$pLocalTime = DllStructCreate("dword;dword")
DllCall("Kernel32.dll", "int", "FileTimeToLocalFileTime", "ptr", DllStructGetPtr($pFileTime), "ptr", DllStructGetPtr($pLocalTime))
$pValue = DllStructCreate("short;short;short;short;short;short;short;short")
DllCall("Kernel32.dll", "int", "FileTimeToSystemTime", "ptr", DllStructGetPtr($pLocalTime), "ptr", DllStructGetPtr($pValue))
$aValues[$i][0] = $aFields[$i][1]
$aValues[$i][1] = StringFormat("%04d-%02d-%02d %02d:%02d:%02d", _
DllStructGetData($pValue, 1), _
DllStructGetData($pValue, 2), _
DllStructGetData($pValue, 4), _
DllStructGetData($pValue, 5), _
DllStructGetData($pValue, 6), _
DllStructGetData($pValue, 7))
ContinueLoop
Case Else
ContinueLoop
EndSwitch
$aValues[$i][0] = $aFields[$i][1]
$aValues[$i][1] = DllStructGetData($pValue, 1)
Next
_ArrayDisplay($aValues)
|
Готовой реализации через COM не знаю, писать тоже неохота, т.к. предпочитаю максимально портабельные решения, и в этом Autoit очень помогает. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon Jan 25, 2010 10:37 Post subject: Re: Использование wdx-плагинов в скриптах |
|
|
Batya wrote: | Кто-нибудь имеет опыт вытаскивания информации с помощью wdx-плагинов в скриптах, по возможности через COM? |
Batya wrote: | хочу оформить в vbs-скрипте вызов wdx непосредственно как dll | С помощью вот этого не получится?
Пишут: предоставляет возможность из скриптов на JScript и VBScript вызывать функции, экспортируемые dll-библиотеками |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Jan 26, 2010 19:56 Post subject: |
|
|
Tol!k
Спасибо, но ...
Batya wrote: | Только пока, к сожалению, нет возможности уделить на это время |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Fri Jan 29, 2010 02:25 Post subject: |
|
|
wdx ActiveX
Решил создать отдельную тему, чтобы не валить всё в кучу. |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Sun Oct 03, 2010 16:45 Post subject: |
|
|
Lev wrote: |
Когда рассекретится wdx.exe, возможно, сможем получать нужные поля напрямую, что ускорит обработку большого количества файлов. |
Рассекреченный wdx.exe (точнее это переписанная с нуля утиль) выложил в родительской теме (см. ссылку в первом посте в этой теме), так что можете получать все поля напрямую, без выкусывания нужных значений регулярками.
П.С. Кстати, Loopback выложил хороший скрипт, но там есть мелкие ошибки и плюс не со всеми плагами он будет работать (в частности с ShellDetails.wdx вряд ли заработает, равно как и wdxtest.exe). |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Mon Oct 04, 2010 15:25 Post subject: |
|
|
[off]Для меня секретность заключалась не в закрытости кода, а выкладывании утилитки на обменнике "только для украинцев", т.е. я её даже погонять не мог :)[/off] |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Mon Oct 04, 2010 17:52 Post subject: |
|
|
Странно, вроде раньше не было проблем, тогда куда лучше переложить? |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Mon Oct 04, 2010 19:11 Post subject: |
|
|
[off]Любой долгонеудаляемый обменник без пометки "только для AU-IX", или как его там. Например, завести сайтик второго уровня на каком-нибудь из кучи позволяющих это сайтов типа почтовых сервисов.
А лучше всего получить статус автора на totalcmd.net/wincmd.ru, а заодно и поддоменчик у наших уважаемых админов.[/off] |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Mon Oct 04, 2010 20:01 Post subject: |
|
|
[off] Lev wrote: | а заодно и поддоменчик у наших уважаемых админов. | Сразу уточню, что поддоменчик не получится. А вот акк — запросто.
[/off] _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon Oct 04, 2010 21:09 Post subject: |
|
|
[offtop]
Lev wrote: | Для меня секретность заключалась не в закрытости кода, а выкладывании утилитки на обменнике "только для украинцев", т.е. я её даже погонять не мог | Ты бы описал проблему попроще и кто-нибудь обязательно переложил бы утиль на другой обменник.
Я без проблем скачал обе утилиты не смотря на карточку "Non AU-IX IP ..."
[/offtop] |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Sun Jun 12, 2016 16:35 Post subject: |
|
|
Loopback
А с какой версией AutoIt вы используете (или использовали) скрипт для тестирования плагинов? 3.3.8.1 и 3.3.12.0 падают, попробовал версии старее, ориентируясь на дату поста: с 3.2.12.1-3.3.2.0 не работает.
Вроде код очевиден, но не пойму куда копать. |
|
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
|