Помогите запустить скрипты от Вахмурки

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

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

Ответить
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Помогите запустить скрипты от Вахмурки

Сообщение Paranoik »

Помогите запустить скрипты от Вахмурки.
Вроде все плагины нужные стоят. А не работает Ж(

TC 7.02a
WinXP SP2
PowerPro 4.7.07


Установленные плагины для PPro

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

au.dll
AutoItDLL.dll
childwin.dll
class.dll
clip.dll
date.dll
event.dll
file.dll
float.dll
float2.dll
ini.dll
int64.dll
map.dll
math.dll
menu.dll
miscplugin.dll
mousegesture.dll
note.dll
pcre.dll
pcreposix.dll
regex.dll
sample.dll
tc.dll
vec.dll
volume.dll
win.dll
HighLightCurrentTab

Описание Выделяет текущую вкладку цветом или снимает выделение
Параметры "1" - выделить текущую вкладку
"0" - убрать выделение

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

local hwnd = win.handle("c=TTOTAL_CMD")
local Panel = ifelse(tc.active(hwnd) == "left", 2, 3)
local TMP = childwin.handle(hwnd, "TMyPanel", Panel)
local TMTC = childwin.handle(TMP, "TMyTabControl")
local CurTab = win.sendmessage(TMTC, 4875, 0, 0)
win.sendmessage(TMTC, 4915, CurTab, arg(1))
Запускаю с параметрами. Ошибок не выдает, но и не чего не происходит.

TabTools

Выдает список всех вкладок на обеих панелях с названиями, путями и обозначением статуса. Содержит подменю операций со вкладками.

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

TabTools.powerpro
TabTools.ini
TabTools.icl
В папке Subs:

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

Sub_TreatCL.powerpro
Sub_ReadTabs.powerpro
Sub_PathVal.powerpro
Sub_MultiFind.powerpro
Sub_HighLight.powerpro
Sub_CloseDups.powerpro
Sub_CloseAllTabs.powerpro
Sub_Alias.powerpro
При запуске TabTools.powerpro выдает INI Plugin error #1
Такая же ошибка вылетает при запуске Sub_ReadTabs.powerpro

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

if(ini.check_exists(Config, Single, "path") != 3) do
	Temp = "Key 'path' does not exist in section '" ++ Single ++ "'"
	messagebox("ok error", Temp, "INI plugin error #1")
	quit all
endif

F2 и localBar от Gregory

Открывает локальное меню, если оно есть, в противном случае повторно считывает путь. Желательно повесить скрипт на клавишу F2. Скрипт для тех, кто ностальгирует по Нортону

Вызываемые модули Утилиты TCMenu или TCToolbar (установлены обе и работают)

F2

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

local hwnd = win.handle("c=TTOTAL_CMD")
local Panel = ifelse(tc.active(hwnd) == "left", 2, 3)
local TMP = childwin.handle(hwnd,"TMyPanel", Panel)
local TMTC = childwin.handle(TMP,"TMyTabControl")
local Path = childwin.gettext(ifelse(TMTC, TMTC, TMP), "TMyPanel", 2)
Path = file.folder(Path)

for (length(Path) > 1)
	Panel = Path ++ "\_local.bar" 
	if (validpath(Panel)) do 
		do("c:\totalcmd\programs\TCmenu.exe", Panel)
		quit 
	else 
		Path = file.folder(Path)
	endif 
endfor

win.sendmessage(hwnd, 0x400+51, 540, 0)
localBar

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

local path barpath hh
;получим дескриптор окна TC
hh=win.handle("c=TTOTAL_CMD")
;сохраним буфер обмена в переменную
local tmp=clip.get
;скопируем в буфер активную директорию
win.sendmessage(hwnd,0x400+51,2029,0)
;получим активную директорию
path=clip.get

;если в ней или в родительских находится файл _local.bar
;запускаем его с помощью TCMenu
for (length(path)>1)
barpath=path++"\_local.bar"
if (validpath(barpath)) do
barpath="'""++barpath ++"'" -$"
do("c:\totalcmd\programs\TCmenu.exe",barpath)
break
else
path=file.folder(path)
endif
endfor

;восстановим буфер обмена
clip.set(tmp)
в папке лежит _local.bar

Ни один из двух скриптов не работает. При запуске бар не выскакивает.
С панели ТС и через командную строку работает…..
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

DirColor
http://pprotcmd.narod.ru/Scripts/DirColor.htm

Позволяет задать цвет директории в зависимости от ее содержимого
args Path

local hwnd = win.handle("c=TTOTAL_CMD")
local IniFile = pprofolder ++ "scripts\ini\DirColor.ini" (мой путь)
local Masks = ini.enum_keys(IniFile, "Colors")
local MCounter = line(Masks, 0)
local Dirs = file.listfiles(Path, 4)
local DCounter = line(Dirs, 0)
local i, j, OneDir, OneMask, OneKey
local Desc = file.open(Path ++ "descript.ion", "w")

if(Desc <= 0) do
messagebox("ok error", "File not opened", "FILE plugin error")
quit
endif

for(i = 1; i <= DCounter; i++)
OneDir = line(Dirs, i)
for(j = 1; j <= MCounter; j++)
OneMask = line(Masks, j)
if(file.validpath(OneDir ++ "\" ++ OneMask)) do
OneKey = ini.get(IniFile, "Colors", OneMask)
file.writeline(Desc, file.nametype(OneDir) ++ " " ++ OneKey)
endif
endfor
endfor

file.close(Desc)
win.sendmessage(hwnd, 0x400+51, 540, 0)
Выдает ошибку:

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

ERROR: ini.enum_keys: INI FILE DOESN'T EXIST

ERROR occurred near line 5 of script DirColor:
local Masks = ini.enum_keys(IniFile, "Colors")
плагины win, ini, file установлены
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Пути "под себя" поправить не забыл? Не напутал, когда поправлял?
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Попробую помочь.

1) Прежде всего убедись, что все скрипты живут в подпапке scripts той директории, куда установлена PowerPro (по умолчанию, кажется, c:\Program Files\PowerPro).

2) Попробуй запустить такой скрипт:

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

win.debug("Hello World")
Должно вылезти окошко с текстом Hello World. Если вылезет, будем разбираться дальше. Если нет, см. выше.

TabTools
Попробуй поменять расширения скрипта на txt, хотя вряд ли поможет.

INI plugin error #1 означает, вероятно, что файл wincmd.ini не находится там, где указано (см. код скрипта TabTools). То, что файла wincmd.ini нет совсем, я исключаю :)

3) Скопируй все *.powerpro в *.txt - чтобы были два одинаковых файлв с одним именем, но разными расширениями. На сайте pprotcmd.narod.ru я объяснил, почему использую расширение txt вместо powerpro.

LocalMenu
Обрати внимание на следующую строчку:

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

      do("c:\totalcmd\programs\TCmenu.exe", Panel)
Там должен быть указан твой собственный путь к TCmenu.

Попробуй и сообщи, что получилось. Единственный случай, когда мои скрипты вообще не работали, был когда человек не туда их положил, так что начни с первого пункта.

Желаю удачи
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

2Paranoik
Может, он прав, когда говорит

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

INI FILE DOESN'T EXIST
, то есть "ini-файл не существует"? Проверь, есть ли он по указанному пути. Если PowerPro установлена в c:\Program Files\PowerPro, то путь к файлу настроек должен быть:

c:\Program Files\PowerPro\scripts\ini\DirColor.ini

либо можешь положить его куда угодно и прописать путь в явном виде, например:

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

local IniFile = "c:\MyPath\MyDirColor.ini"
- лишь бы указанный файл существовал в указанном месте.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

Спасибо с TabTools разобрался. Там было %COMMANDER_PATH%/wincmd.ini
Как можно задать относительный путь чтоб работало с флэшки?
PowerPro у меня стоит в подпапке тотала.... Но если вписать точный путь, то с флэшки скрипт уже не будет работать....

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


LocalMenu
Обрати внимание на следующую строчку

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

  do("c:\totalcmd\programs\TCmenu.exe", Panel)
Там должен быть указан твой собственный путь к TCmenu.
Так и есть.....
В командной строке пишу:

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

c:\totalcmd\programs\TCmenu.exe c:\totalcmd\programs\_local.bar
И все работает. А через скрипт не хочет.....
При запуске скрипта видно, что он запускается, но ничего не выдает.....

DirColor
либо можешь положить его куда угодно и прописать путь в явном виде, например

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

local IniFile = "c:\MyPath\MyDirColor.ini"
- лишь бы указанный файл существовал в указанном месте.
Прописал

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

local IniFile = "c:\totalcmd\programs\ppro\scripts\ini\DirColor.ini"
Именно там и лежит. Но не работает.
Содержание файла:

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

[Colors]
;mask=keyword
*.pcf=Red
blank.ico=Green
Что значит эта строчка?

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

local Masks = ini.enum_keys(IniFile, "Colors")
ЗЫ Как сделать, чтоб панелька TabTools выскакивала по середине экрана, а не у курсора мышки?
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Как можно задать относительный путь чтоб работало с флэшки?
Есть такая переменная pprofolder. Из названия ясно, что она всегда имеет значение того пути, куда установлена PowerPro. Впрочем, для решения таких изощренных задач без RTFM обойтись...

Что касается LocalMenu, то этот скрипт написал Gregory, а было это очень давно. С тех пор синтаксис команд поменялся, и работа скрипта может сильно отличаться от планируемой. Попробуй мой скрипт http://powerpro.wincmd.ru/Scripts/F2.htm.

Насчет DirСolor. Ты почитай описание - все ли сделано правильно? В частности, если ты не менял инишник, то результат будет лишь при наличии файлов *.pcf и конкретного файла blank.ico. Они есть? Если нет, то скрипт и не будет работать.

Попробуй сначала проследовать по описанному пути. Если все пашет, создай свои маски и цвета, а не те, которые я привел чисто для примера.
Что значит эта строчка?
См. документацию к плагину ini.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

Есть такая переменная pprofolder. Из названия ясно, что она всегда имеет значение того пути, куда установлена PowerPro. Впрочем, для решения таких изощренных задач без RTFM обойтись...
Это я уже понял что за переменная. Пытался задавать с этой переменной путь вида ../../ не получилось.
Что касается LocalMenu, то этот скрипт написал Gregory, а было это очень давно. С тех пор синтаксис команд поменялся, и работа скрипта может сильно отличаться от планируемой. Попробуй мой скрипт http://powerpro.wincmd.ru/Scripts/F2.htm.
В первом посте написал, что оба пробовал. Ни один не работает.
Насчет DirСolor. Ты почитай описание - все ли сделано правильно? В частности, если ты не менял инишник, то результат будет лишь при наличии файлов *.pcf и конкретного файла blank.ico. Они есть? Если нет, то скрипт и не будет работать.

Попробуй сначала проследовать по описанному пути. Если все пашет, создай свои маски и цвета, а не те, которые я привел чисто для примера.
Все проверил по статье. Вроде все правильно. DirColor.ini изменил под себя.
Только проблема осталась. Скрипт выдает ошибку.

ЗЫ Вызываю меню горячей клавишей из PowerPro. Там клавой перехожу на отображение папки Program Files. Она открывается в менюшки, но если мышка в стороне, то через 1-2 сек она исчезает (папка-меню). (Первоначальная менюшка держится сколь угодно долго, т.к. Скрывать через (мс): отключено)
Собственно вопрос: как заставить подменю (в виде папки) не закрываться, если мышка в стороне?
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

путь вида ../../
Это в смысле - переход на два уровня вверх? Не, не должно покатить, надо использовать file.folder. Попробуй это.

Вот только что тупо взял вот отсюда код скрипта, заменил путь к TCmenu и запустил без проблем!

Возможно, дело в винде. У меня 2000, и под ХРюшей я скрипты не тестировал.

А другие скрипты работают? Не работают только те, о которых ты говорил, а другие работают?

Еще мысль. Попробуй вместо параметра %P указывать %p (и т.п.). Еще попробуй поставить знак вопроса перед параметрами:Если и это ничего не даст, то пока у меня идеи кончились.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

Нашел косяк.
for (length(Path) > 1)
Panel = Path ++ "/_local.bar"
if (validpath(Panel)) do
do("c:/totalcmd/programs/TCmenu.exe", Panel)
quit
else
Path = file.folder(Path)
endif
endfor
Замечена недоработка. Если менюшка лежит в родительской(ских) папках, то она всегда отображается! Т.е. если ее положить в корень диска С, то во всех папках будет менюшка....


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

Hello World
Работает Ж)

Divider
Работает. Хотя есть косяк. Частенько вызывает менюшку, и тутже она исчезает. Видимо какая то команда её отменяет. А так в принципе работает.

TabTools
Сам скрипт работает.
Подскрипты вызываемые этим скриптом пока не работают.
Пара скриптов запускалась. Теперь почему-то ни один из них не работает :shock:
Позже буду разбираться.

После запуска скрипта MoveTab другие скрипты, которые выдавали ошибки добавляют вниз 2-3 строки вида:

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

Called from line 26 of script MoveTab
Called from line 26 of script MoveTab
Called from line 26 of script MoveTab
Помогает перезапуск PowerPro
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

Запустил DirColor. Ошибок не выдает. Поменял в пути \ на /

DirColor.ini

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

[Colors]
;mask=keyword
*.html=Green
Делаю папку. Кидаю туда пачку *.html
Выхожу из папки запускаю скрипт. захожу, читаю descript.ion слова Green там нет.
В папке запускаю скрипт. читаю descript.ion опять ничего.
Ни в дочерних ни в родительских папках в файлах descript.ion данные слова не прописываются.
Georgе
Сообщения: 99
Зарегистрирован: Вт авг 28, 2007 06:00

Сообщение Georgе »

Paranoik, ты перепутал назначение скриптов.
Название DirColor
Имя файла (*.txt) DirColor.txt
Описание Позволяет задать цвет директории в зависимости от ее содержимого
Для работы с файлами descript.ion предназначен другой скрипт.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Замечена недоработка. Если менюшка лежит в родительской(ских) папках, то она всегда отображается! Т.е. если ее положить в корень диска С, то во всех папках будет менюшка....
Это не недоработка, это следование идеологии Нортона! Происходит вот что: при запуске скрипта РР пытается найти _local.bar в текущей директории. Если не находит, смотрит в родителе. Если не находит - в прародителе и далее до корня. То есть можно иметь менюшку, скажем, для всех языков (c:\Languages) и отдельно для английского (c:\Languages\English), французского ( c:\Languages\Francais) и т.д. Частное всегда сильнее общего (локальное - глобального) - это везде так.
Нашел косяк.
"Это не ошибка, это системная функция!"
Вообще Свитцер (автор РР) настаивает на использовании в скриптах именно прямого слеша, а не обратного. Обосновывает он это тем, что обратный применяется во всяких эскейп-последовательностях типа \n. Я не обнаружил абсолютно никакой разницы, поэтому пишу когда как. Если тебе это помогло - я рад.
Делает копию на другой панели. Потом перемещает курсор на 2 пункта вниз и жмет Enter.
Спасибо за разьяснение :)
В общем криво, но работает. Видимо что-то подправить надо в скрипте....
Попробуй вместо

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

*keys {down 5}{enter}
написать

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

*keys {slow}{down 5}{enter}
Делаю папку. Кидаю туда пачку *.html
Выхожу из папки запускаю скрипт. захожу, читаю descript.ion слова Green там нет
1) Проверь, есть ли цветовой фильтр Green;
2) Проверь, определен ли цвет для фильтра
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Paranoik
Сообщения: 9
Зарегистрирован: Чт окт 05, 2006 01:52

Сообщение Paranoik »

"Это не ошибка, это системная функция!"
Вообще Свитцер (автор РР) настаивает на использовании в скриптах именно прямого слеша, а не обратного. Обосновывает он это тем, что обратный применяется во всяких эскейп-последовательностях типа \n. Я не обнаружил абсолютно никакой разницы, поэтому пишу когда как. Если тебе это помогло - я рад.
Для меня ошибка. Т.к. по другому просто не работает.
Спасибо за разьяснение
Это не разъяснение. Это у меня так скрипт работал. Вместо перемещения делал копию на другой панели а на исходной запускал файл на 2 позиции ниже....

Подправил.

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

*keys {slow}{down 5}{enter}
Теперь делает 2 копии на противоположной панели. Потом секунд 5 над чем-то думает... Исходная панель остается.
1) Проверь, есть ли цветовой фильтр Green;
2) Проверь, определен ли цвет для фильтра
Проверил. Все есть. Только вопрос в другом. Какой смысл от фильтра, если в descript.ion не добавляется ни строчки? Ведь фильтр раскрашивает папку в зависимости от содержания файла descript.ion? А там пусто.....
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Я прокомментирую скрипт DirColor как очень несложный. Не знаю, зачем я это делаю, но больше ничем тебе помочь не смогу. У меня все работает. Более того, я знаю еще минимум двух человек, у кого тоже работает.

args Path
;;путь (%P)
local hwnd = win.handle("c=TTOTAL_CMD")
;;получаем дескриптор окна ТС
local IniFile = pprofolder ++ "scripts\ini\DirColor.ini"
;;указываем, где искать файл настроек
local Masks = ini.enum_keys(IniFile, "Colors")
;;какие маски в разделе [Colors]
local MCounter = line(Masks, 0)
;;сколько их
local Dirs = file.listfiles(Path, 4)
;;список поддиректорий текущего пути
local DCounter = line(Dirs, 0)
;;сколько их
local i, j, OneDir, OneMask, OneKey
local Desc = file.open(Path ++ "descript.ion", "w")
;;открыли файл descript.ion в текущей директории

if(Desc <= 0) do
messagebox("ok error", "File not opened", "FILE plugin error")
quit
endif
;;если не открылся, завершить

for(i = 1; i <= DCounter; i++)
;;цикл по директориям
OneDir = line(Dirs, i)
;;одна директория
for(j = 1; j <= MCounter; j++)
;;цикл по маскам
OneMask = line(Masks, j)
;;одна маска
if(file.validpath(OneDir ++ "\" ++ OneMask)) do
;;подходящая директория найдена
OneKey = ini.get(IniFile, "Colors", OneMask)
;;получить имя фильтра
file.writeline(Desc, file.nametype(OneDir) ++ " " ++ OneKey)
;;записать его в дескрипт.ион в формате "директория фильтр"
endif
endfor
endfor

file.close(Desc)
;;закрыть дескрипт.ион
win.sendmessage(hwnd, 0x400+51, 540, 0)
;;обновить панель

Вот. Если хочешь, чтобы скрипт работал, вставляй отладочную печать

win.debug(переме1, перем2, ...)

Я не знаю, чем еще я могу тебе помочь.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Ответить