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 

Скрипты PowerPro - опыт новичка

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Sat Jun 18, 2005 19:56    Post subject: Скрипты PowerPro - опыт новичка Reply with quote

На создание скриптов меня вдохновила статья Григория Шуренкова aka Gregory "Скриптинг в Total Commander с помощью PowerPro" (http://mirror01.users.i.com.ua/~skorohod/pp_tc.html). Правда, некоторые из его скриптов у меня почему-то не работали. То ли виноваты нововведения версии 4.2 (он писал про 3.9), то ли у меня другие настройки - не знаю. Пришлось повозиться. Данные скрипты работают в TotalCommander 6.52 и PowerPro 4.2 при настройках по умолчанию.

Скрипты, скорее всего, несовершенны и знатокам покажутся убогими. Не стреляйте в пианиста - это мой первый опыт скриптинга. Работают - и слава Богу.


Скрипт 1. Клавиша F2

В старом добром Norton Commander, предшественнике Total Commander, клавише F2 соответствовала команда Menu. Если в текущей директории находился файл меню nc.mnu, то вызывался он (локальный), если нет - глобальный.

Gregory написал скрипт для TC, осуществляющий вызов локального меню (файл _local.bar, если он есть в текущей или в родительских директориях). Я внес усовершенствования - при нажатии на F2 происходит вызов локального меню, если таковое есть. В противном случае клавиша F2 сработает как обычно - cm_RereadSource.

Code:

local path barpath
local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
local tmp=clip.get
win.sendmessage(hwnd,0x400+51,2029,0)
path=clip.get
for (length(path)>1)
   barpath=path++"\_local.bar"
   if (validpath(barpath)) do
      do("путь к TCmenu.exe",barpath)
      break
   else
      path=file.folder(path)
      win.sendmessage(hwnd,0x400+51,540,0)
   endif
endfor
clip.set(tmp) 

Примечания:
1. Вместо TCmenu можно использовать TCToolbar - кому что нравится.
2. Здесь и далее предполагается, что читатель умеет вызвать скрипт или повесить на него горячую клавишу. В противном случае - читайте статью Gregory или документацию к PowerPro.
3. Здесь и далее - работа скриптов не зависит ни от раскладки клавиатуры, ни от языка интерфейса ТС.


Скрипт 2. Поиск по шаблону одной кнопкой

Сложные критерии поиска файлов можно сохранить в виде шаблона и вызывать в случае необходимости. Для вызова поиска по нужному шаблону приходится нажимать очень много клавиш или многократно щелкать крысой:
1. Alt+F7 - вызвать окно поиска;
2. Load/Save - перейти на вкладку шаблонов;
3. Найти в списке нужный шаблон, у меня их всего 17, а вдруг сотня!
4. Load - загрузить шаблон;
5. Start search - начать поиск.

Мой скрипт тупо посылает необходимые клавиши активному окну. Если скрипт повешен на кнопку панели ТС, последний всегда является активным окном.

Code:

*keys %{f7}+{tab}{right}{right}{right}{tab}{tab}{туда-сюда}{enter}{enter}

Примечания:
1. Вместо {туда-сюда} вставляется необходимая комбинация клавиш {down}, {up}, {end} и {home} - в зависимости от конкретного набора шаблонов.
2. Рекомендуется сделать так: шаблон, которым приходится пользоваться часто, должен начинаться с буквы z (например, у меня шаблон "файлы, одинаковые по объему и содержимому" называется zDuplicates), и тогда этот шаблон попадает в конец списка. Тогда {туда-сюда} будет выглядеть как {end} и, возможно, несколько раз {up}. Кроме того, добавление новых или удаление старых шаблонов (если они не начинаются с z) не повлияет на работу скрипта. С тем же успехом можно использовать русские буквы.
3. Разумеется, для каждого шаблона будет свой скрипт, отличающийся только составом {туда-сюда}.


Скрипты 3 и 4. Сохранение и восстановление текущих вкладок (tabs)

Мы долго и кропотливо создавали набор вкладок для определенной работы, но вот беда - временно потребовался совсем другой набор, а терять нажитое непосильным трудом не хочется. В ТС для этого надо:
1. Нажать правой кнопкой крысы на заголовке вкладки;
2. Выбрать "Save tabs to file";
3. Ввести имя (например, temp.tab);
4. Нажать Save.

Хочется сделать это одной кнопкой (одной клавишей или одним щелчком крысы). Будьте любезны:
Code:

local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
win.postmessage(hwnd,0x400+51,3009,0)
*keys {down}{down}{down}{down}{down}{down}{enter}1^{enter}
if (validpath("путь ко вкладкам\1.tab"))
   *keys {right}{enter}
endif

Примечания:
1. "Путь ко вкладкам" соответствует ключу TabDir в файле WINCMD.INI. Впрочем, можно записать и другой путь, и вообще никакого. Но лучше подстраховаться.
2. Благодаря выбору имени "1" скрипт работает в любой раскладке клавиатуры.
3. Если файл 1.tab не существует, он будет создан, в противном случае - перезаписан.

Далее надо восстановить сохраненный набор вкладок, и вот тут нас, возможно, ждет засада. Дело в том, что меню операций со вкладками можно вызвать двумя способами: щелкнув правой кнопкой на любой вкладке или выполнив команду cm_DirTabsShowMenu. Но первое невозможно, если вкладок нет, а команда cm_DirTabsShowMenu не входит в стандартное меню (в расширенное от Panos Davitidis - входит). Но даже если меню вызвано (операция 1), придется сделать еще кое-что:

2. Выбрать "Load tabs from file, replace tabs";
3. Ввести имя (в нашем случае 1.tab);
4. Нажать Open.

А можно проще. Ниже приводится скрипт, который работает даже при отсутствии вкладок:
Code:

if (validpath("путь ко вкладкам\1.tab")) do
   local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
   win.postmessage(hwnd,0x400+51,3001,0)
   win.postmessage(hwnd,0x400+51,3009,0)
   keys {up}{up}{up}{up}{enter}1{down}^{enter}
   win.postmessage(hwnd,0x400+51,3007,0)
endif

Примечания:
1. Разумеется, если файла 1.tab не существует, скрипт не делает ничего.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Fri Jul 15, 2005 17:30    Post subject: Reply with quote

Скрипт 5. Копирование даты и времени
Версия 1.0. См. ниже Скрипт 9


Я уже писал об этом http://wincmd.ru/forum/viewtopic.php?t=424. Для тех, кому лень читать, вкратце изложу суть. Пусть есть цифровая фотография, которую надо отредактировать (в Фотожопе, например). Но при сохранении файла редактор изменяет время создания и/или (в зависимости от редактора) изменения и/или доступа к файлу. А одно из многочисленных достоинств цифровых фотографий состоит как раз в том, что в них зашито время, которое на них запечатлено. Поэтому хорошо бы после редактирования восстановить исходные атрибуты с файла, который, естественно, должен быть сохранен где-то в виде резервной копии.
Можно, конечно, сделать это врукопашную, в том числе командой cm_SetAttrib, но это дьявольски утомительно.
Раньше я это делал утилитой touch.exe (см. пост выше), но она имеет несколько недостатков:
1) Дата записывается в непривычном американском формате;
2) В случае ошибки с target/source надо начинать сначала;
3) Просто некрасиво Smile

Предлагаемый скрипт PowerPro (с его плагином file) лишен этих недостатков. Правда, нельзя изменить дату доступа, но разве она важна?
Code:

local Create, Modify, Source, Target, Date, Time, Temp, FormDate, FormTime, Mess, Result

Source = arg(2)
Target = arg(1)

@start

;;Source file

Create = file.getdate(Source, "c")
Modify = file.getdate(Source, "m")

Date = select(Create, 8)
Time = select(Create, 7, 14)
Temp = select(Create, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = "Source file " ++ Source ++ ":[n[n" ++ "Creation Date & Time:[n" ++ FormDate ++ ", " ++ FormTime

Date = select(Modify, 8)
Time = select(Modify, 7, 14)
Temp = select(Modify, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "[n[nModification Date & Time:[n" ++ FormDate ++ ", " ++ FormTime

;;Target file

Create = file.getdate(Target, "c")
Modify = file.getdate(Target, "m")

Date = select(Create, 8)
Time = select(Create, 7, 14)
Temp = select(Create, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "[n[n[nTarget file " ++ Target ++ ":[n[n" ++ "Creation Date & Time:[n" ++ FormDate ++ ", " ++ FormTime

Date = select(Modify, 8)
Time = select(Modify, 7, 14)
Temp = select(Modify, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "[n[nModification Date & Time:[n" ++ FormDate ++ ", " ++ FormTime ++ "[n[nProceed with copying date from Source to Target?[n(Choose 'No' to exchange Source <-> Target)"

Result = messagebox("yesnocancel question", Mess, "Copy Date & Time")
if(Result == 0) do
   quit
elseif(Result == 6) do
   Create = file.getdate(Source, "c")
   Date = select(Create, 8)
   Time = select(Create, 9, 14)
   file.setdate(Target, "c", Date, Time)
   Create = file.getdate(Source, "m")
   Date = select(Create, 8)
   Time = select(Create, 9, 14)
   file.setdate(Target, "m", Date, Time)
elseif(Result == 7) do
   Mess = Source
   Source = Target
   Target = Mess
   jump start
endif


Примечания:
1) Для тех, кто совсем не в теме:
а) Создаем кнопку на панели Total Commander;
б) В поле Command пишем: "путь к PowerPro\PowerPro.exe runfile.CopyDate", где CopyDate - имя скрипта (с расширением txt);
в) В поле Parameters пишем ("%P%N", "%T%M"). Или наоборот Smile ("%T%M", "%P%N"). Скобки важны!
г) В поле Icon file прописываем симпатичную иконку, которую качаем отсюда: http://t-n-b.narod.ru/CopyDate.ico
д) Теперь ставим курсор сначала на источник (в первом формате параметров), потом на приемник (в противоположной панели, ясен пень);
е) Жмем кнопку и наслаждаемся.
2) В скрипте встречается сочетание "[n". Это - перевод строки, добавляемый для пущей наглядности. Использовать привычную для сишников эскейп-последовательность "\n" опасно, потому что если имя файла начинается с "n", скрипт в лучшем случае выдаст ошибку, а в худшем - обработает совсем не тот файл. Следует учитывать, что TC передает в PowerPro символ материнской директории как "\", хотя сам PowerPro использует "/" (но и "\" обрабатывает корректно). Поэтому, если назначить "\" как эскейп-символ, могут возникнуть большие непрятности. Я изменил его в настройках PowerPro на "[" (ведь это запрещенный в именах файлов символ). Если у вас другие настройки, придется сделать глобальную замену.
3) Как видно из кода, скрипт можно запускать, не особо задумываясь о том, какой из файлов - источник (source), а какой - приемник (target). В случае ошибки надо нажать No, и файлы просто поменяются местами.


Скрипт 6. Список файлов

Бывает необходимо составить список файлов в текущей директории и сохранить его в виде файла. Команда "dir > _files.lst" искажает русские имена (по крайней мере в англоязычной винде). Можно воспользоваться командами ТС cm_SaveSelectionToFile, cm_CopyNamesToClip или cm_CopyFullNamesToClip, но первая из них у меня безбожно глюкает. Да и потом, слишком много надо щелкать крысой. Предлагаемый скрипт, возможно, не слишком эстетичен, зато функционален. Пояснять работу нет смысла - погоняйте его в разных режимах и увидите разницу:
Code:

local List, Result, Subs, NamesOnly

Result = Inputdialog("Subs=Include Subfolders??, NamesOnly=Names Only??", "List Files")
if(Result == 0) do
   quit
endif

Result = arg(1) ++ "_files.lst"

if(NamesOnly != 1) do
   List = file.listfiles(arg(1), Subs, "")
   file.writeall(Result, List)
   do("путь к lister/lister.exe", Result)
   quit
endif

List = file.listfiles(arg(1), 0, "")

local Count, One, Hand
Hand = file.open(Result, "w")
Count = line(List, 0)
for(i = 1; i <= Count; i = i + 1)
   One = line(List, i)
   One = file.nametype(One)
   file.writeline(Hand, One)
endfor

file.close(Hand)

do("путь к lister/lister.exe", Result)

1. В поле Parameters не забываем указать ("%P")
2. Команда do("путь к lister/lister.exe", Result) - откровенное пижонство, но мне удобно. Если вы мое мнение не разделяете, эту строку можно безболезненно снести.


Скрипт 7. Размножение файлов

Бывает необходимо создать несколько копий одного файла, например, при размножении шаблона.
Code:

local Number, NewFile
local Count = input "=2Enter number of files to duplicate"
if(Count == "") do
   quit
endif

local Source = arg(1) ++ "." ++ arg(2)

for(i = 1; i <= Count; i = i + 1)
   Number = i
   if(i < 10) do
      Number = "0" ++ i
   endif
   NewFile = arg(1) ++ Number ++ "." ++ arg(2)
   file.copy(Source, NewFile)
endfor

messagebox ("ok information", "Duplication done", "Report")

Примечания:
1. В поле Parameters пишем ("%P%O", "%E").
2. На запрос вводим число (1-99) файлов, которое необходимо получить в результате размножения (без учета исходного).
3. Полученные файлы, к примеру, при текущем файле a.txt и введении числа 13 будут иметь имена a01.txt, a02.txt, ... , a13.txt.
4. Не пугайтесь, если результат придется подождать несколько секунд - копирование работает относительно медленно. Об окончании процесса вас известят Smile


Last edited by Вахмурка on Mon Aug 29, 2005 22:20; edited 1 time in total
Back to top
View user's profile Send private message
texa



Joined: 18 Jul 2005
Posts: 3
Location: владивосток

Post (Separately) Posted: Mon Jul 18, 2005 06:44    Post subject: Reply with quote

а теперь можно пояснить по пунктам куда вставлять эти скрипты и все все все, а то не понятно на первый взгляд
Back to top
View user's profile Send private message MSN Messenger
LU™



Joined: 15 Dec 2004
Posts: 4
Location: FForum.ru

Post (Separately) Posted: Tue Aug 02, 2005 06:19    Post subject: Reply with quote

texa wrote:
а теперь можно пояснить по пунктам куда вставлять эти скрипты и все все все, а то не понятно на первый взгляд

в PowerPro вестимо
_________________
Храни меня, Господь, от тех, кому я верю.
Кому не верю - тех остерегусь я сам.
©Ж. Санд
Back to top
View user's profile Send private message AIM Address MSN Messenger
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Tue Aug 16, 2005 15:25    Post subject: Reply with quote

texa wrote:
а теперь можно пояснить по пунктам куда вставлять эти скрипты и все все все, а то не понятно на первый взгляд


Внимательно читаем п.2 пояснений к Скрипту 1:
Quote:
Здесь и далее предполагается, что читатель умеет вызвать скрипт или повесить на него горячую клавишу. В противном случае - читайте статью Gregory или документацию к PowerPro


Статья (повторенье - мать ученья): http://mirror01.users.i.com.ua/~skorohod/pp_tc.html

Ссылку на PowerPro берем в посте LU™.

Все предусмотрено.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Mon Aug 29, 2005 22:27    Post subject: Reply with quote

Скрипт 8. Загрузка панели

Для редактирования панели (button bar) необходимо следующее:
1. Выбрать в меню Configuration\Change Button Bar;
2. Найти нужную панель (а лично у меня их 32 глобальных и 5 локальных!);
3. Нажать ОК;
4. Ответить на вопрос.

Куда проше сделать это одним щелчком крысы или одной горячей клавишей, запустив простенький скрипт:
Code:

local hwnd = win.handle("c=TTOTAL_CMD")
win.postmessage(hwnd, 0x400+51, 498, 0)
*keys {enter}
win.sendkeys(arg(1))
*keys ^{enter}{tab}{enter}{tab}{enter}

1. В качестве параметра передаем полное имя панели, например, ("D:\Utils\TotalCmd\Some.BAR").
2. Данный скрипт, в отличие от остальных, НЕ работает в раскладках, отличных от латинской. Русские имена директорий и файлов также будут обрабатываться НЕВЕРНО. Скорее всего, исправлению ситуации поможет плагин unicode. Я не использую русские имена, поэтому и нужды в этом у меня нет. Кто напишет универсальный скрипт, не зависящий ни от раскладки, ни от кодировки имен - честь ему и хвала.
3. Для загрузки панели по умолчанию (как правило, DEFAULT.BAR) последняя строчка должна иметь вид
Code:

*keys ^{enter}{tab}{enter}{enter}

поэтому разумно иметь два разных скрипта - для DEFAULT.BAR (и повесить на него горячую клавишу) и для всех остальных - с вызовом через кнопку. Желающие могут пойти другим путем - через плагин ini всякий раз восстанавливать ключ Buttonbar одноименного раздела в файле конфигурации. Мне кажется, это сложнее.


Скрипт 9. Копирование даты и времени. Версия 2.0

Предыдущая версия скрипта (см. Скрипт 5) имела некоторые недостатки, в частности необходимость менять эскейп-символ в настройках PowerPro, низкая дуракоупорность и неправильное отображение символа &. Во всем остальном скрипты идентичны.
Code:

local Create, Modify, Source, Target, Date, Time, Temp, FormDate, FormTime, Mess, Result

Source = arg(2)
Target = arg(1)

for(i = 1; i <= 2; i = i + 1)
   if(file.isfolder(arg(i)) == 1) do
      Mess = "Parameter 1 (source): " ++ arg(1) ++ "\nParameter 2 (target): "
      Mess = Mess ++ arg(2) ++ "\nParameter " ++ i
      Mess = Mess ++ " must be a file rather than a folder!"
      mpDlgCaption = "Error"
      mpIcon = "ERROR"
      mpDlgText = Mess
      Result = MiscPlugin.MessageBox(1, "OK")
      quit
   endif
endfor

@start

Create = file.getdate(Source, "c")
Modify = file.getdate(Source, "m")

Date = select(Create, 8)
Time = select(Create, 7, 14)
Temp = select(Create, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = "Source file " ++ Source ++ ":\n\n" ++ "Creation Date && Time:\n" ++ FormDate ++ ", " ++ FormTime

Date = select(Modify, 8)
Time = select(Modify, 7, 14)
Temp = select(Modify, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "\n\nModification Date && Time:\n" ++ FormDate ++ ", " ++ FormTime

Create = file.getdate(Target, "c")
Modify = file.getdate(Target, "m")

Date = select(Create, 8)
Time = select(Create, 7, 14)
Temp = select(Create, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "\n\n\nTarget file " ++ Target ++ ":\n\n" ++ "Creation Date && Time:\n" ++ FormDate ++ ", " ++ FormTime

Date = select(Modify, 8)
Time = select(Modify, 7, 14)
Temp = select(Modify, 9, 14)

FormDate = formatdate("longdate", Date)
FormTime = formattime("HH:mm:ss", Temp)

Mess = Mess ++ "\n\nModification Date && Time:\n" ++ FormDate ++ ", " ++ FormTime ++ "\n\nProceed with copying date from Source to Target?\n(Choose 'Exchange' to exchange Source with Target)"

mpDlgCaption = "Copy Date && Time"
mpIcon = "путь к иконке\CopyDate.ico"
mpDlgText = Mess
Result = MiscPlugin.MessageBox(1, "&Go!", "E&xchange", "&Cancel")

if(Result == "&Go!") do
   Create = file.getdate(Source, "c")
   Date = select(Create, 8)
   Time = select(Create, 9, 14)
   file.setdate(Target, "c", Date, Time)
   Create = file.getdate(Source, "m")
   Date = select(Create, 8)
   Time = select(Create, 9, 14)
   file.setdate(Target, "m", Date, Time)
elseif(Result == "E&xchange") do
   Mess = Source
   Source = Target
   Target = Mess
   jump start
endif

Для работы необходим плагин MiscPlugin, который можно скачать с сайта PowerPro ftp://powerpro.dyndns.org/PPlugins.zip.


Скрипт 10. Слияние панелей

При редактировании панелей бывает необходимо перенести кнопку с одной панели на другую. Это можно сделать так:
1. Открываем первую панель;
2. Копируем кнопку в буфер;
3. Открываем вторую панель;
4. Вставляем кнопку.

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

Скрипт сливает вместе две панели, образуя новую с именем _temp.bar.
Code:

local Mess, Result, Key, Number

local First = arg(1)
local Second = arg(2)
mpDlgCaption = "Wrong Parameter"
mpIcon = "ERROR"

if(file.isfolder(First) == 1) do
   mpDlgText = "First bar is " ++ First ++ "\nIt must be a file rather than a folder"
   if(MiscPlugin.MessageBox(1, "&Quit", "&Pick file") == "&Quit") do
      quit
   endif
   First = pickfile(file.listfiles("путь к ТС\*.bar", 0), "Pick First Bar File")
   if(not pproflag(0)) do
      quit
   endif
endif

if(file.type(First) != "bar") do
   mpDlgText = "First bar is " ++ First ++ "\It should have the BAR extension."
   if(MiscPlugin.MessageBox(1, "&Continue", "&Pick file") == "&Pick file") do
      First = pickfile(file.listfiles("путь к ТС\*.bar", 0), "Pick First Bar File")
      if(not pproflag(0)) do
         quit
      endif
   endif
endif

if(file.isfolder(Second) == 1) do
   mpDlgText = "Second bar is " ++ Second ++ "\nIt must be a file rather than a folder"
   if(MiscPlugin.MessageBox(1, "&Quit", "&Pick file") == "&Quit") do
      quit
   endif
   Second = pickfile(file.listfiles("путь к ТС\*.bar", 0), "Pick Second Bar File")
   if(not pproflag(0)) do
      quit
   endif
endif

if(file.type(Second) != "bar") do
   mpDlgText = "Second bar is " ++ Second ++ "\It should have the BAR extension."
   if(MiscPlugin.MessageBox(1, "&Continue", "&Pick file") == "&Pick file") do
      Second = pickfile(file.listfiles("путь к ТС\*.bar", 0), "Pick Second Bar File")
      if(not pproflag(0)) do
         quit
      endif
   endif
endif

@start

Mess = "Second bar " ++ Second ++ " will be appended to the First bar " ++ First ++"\n\n(Choose 'Exchange' to exchange First with Second)"
mpDlgCaption = "Merge Bars"
mpIcon = "INFORMATION"
mpDlgText = Mess
Result = MiscPlugin.MessageBox(1, "&Go!", "E&xchange", "&Cancel")

if(Result == "&Cancel") do
   quit
elseif(Result == "E&xchange") do
   Mess = First
   First = Second
   Second = Mess
   jump start
endif

local Target = "путь к ТС\_temp.bar"

if(file.copy(First, Target) == 0) do
   Mess = "Failure copying " ++ First ++ " to " ++ Result
   messagebox ("ok error", Mess, "FILE plugin error #1")
   quit
endif

local Buttons1 = ini.get(First, "Buttonbar", "Buttoncount")
if(ini_status != "OK") do
   messagebox ("ok error", ini_status, "INI plugin error #1")
   quit
endif

local Buttons2 = ini.get(Second, "Buttonbar", "Buttoncount")
if(ini_status != "OK") do
   messagebox ("ok error", ini_status, "INI plugin error #2")
   quit
endif

Result = ini.set(Target, "Buttonbar", "Buttoncount", Buttons1 + Buttons2)
if(Result != "OK") do
   messagebox ("ok error", Result, "INI plugin error #3")
   quit
endif

v = vec.create(6)
if(v == 0) do
   messagebox ("ok error", "Failure creating vector", "VEC plugin Error")
   quit
endif

v[0] = "button"
v[1] = "cmd"
v[2] = "param"
v[3] = "path"
v[4] = "menu"
v[5] = "iconic"

for(i = 1; i <= Buttons2; i = i + 1)
   Number = i + Buttons1
   for(j = 0; j <= 5; j = j + 1)
      Key = v[j] ++ i
      if(ini.check_exists(Second, "Buttonbar", Key) != 3) do
         break
      endif
      Mess = ini.get(Second, "Buttonbar", Key)
      if(ini_status != "OK") do
         messagebox ("ok error", ini_status, "INI plugin error #4")
         quit
      endif
      Key = v[j] ++ Number
      Result = ini.set(Target, "Buttonbar", Key, Mess)
         if(Result != "OK") do
            messagebox ("ok error", Result, "INI plugin error #5")
            quit
         endif
   endfor
endfor

vec.destroy(v)
vec.unload
ini.unload

Mess = "First bar " ++ First ++ " and Second bar " ++ Second
Mess = Mess ++ "\nare successfully merged in " ++ Target
mpDlgCaption = "Congratulations!"
mpIcon = "QUESTION"
mpDlgText = Mess
Result = MiscPlugin.MessageBox(1, "&Open Bar", "to &First", "to &Second", "&to...", "&Quit")

if(Result == "&Open Bar") do
   runfile.LoadBar(Target)
elseif(Result == "to &First") do
   Result = file.move(Target, First)
      if(Result == 0) do
         Mess = "Failure renaming " ++ Target ++ " to " ++ First
         messagebox ("ok error", Mess, "FILE plugin error #2")
         quit
      endif
elseif(Result == "to &Second") do
   Result = file.move(Target, Second)
      if(Result == 0) do
         Mess = "Failure renaming " ++ Target ++ " to " ++ Second
         messagebox ("ok error", Mess, "FILE plugin error #3")
         quit
      endif
elseif(Result == "&to...") do
@NewName
   Key = inputcancel("New name for bar")
   Key = "путь к ТС\" ++ Key ++ ".bar"
   if(file.validpath(Key) == 1) do
      Mess = "File " ++ Key ++ " already exists! Overwrite?"
      Result = messagebox("yesno warning", Mess, "Warning")
      if(Result == 7) do
         jump NewName
      endif
   Result = file.move(Target, Key)
      if(Result == 0) do
         Mess = "Failure renaming " ++ Target ++ " to " ++ Key
         messagebox ("ok error", Mess, "FILE plugin error #4")
         quit
      endif
   endif
endif

1. Не забудьте заменить слова "путь к..." на истинные пути.
2. В скрипт передаются те же параметры, что и в скрипты 5 и 9. Впрочем, скрипт достаточно дуракоупорен - строго говоря, параметры могут быть любыми.
3. Для работы скрипта необходимы плагины: file, vec, miscplugin и ini. Первые два входят в стандартную поставку, на последние два ссылка после Скрипта 9.
4. При вызове плагина ini мне не удалось заставить команды error_dialog_off и raiseErrors работать так, как описано в руководстве. Зато функция check_exists меня полностью удовлетворила.
5. Поясню вещи, которые и так очевидны из кода. После успешного создания суммарной панели _temp.bar предлагается следующее:
"Open Bar": Загрузить новую панель для редактирования;
"to First" и "to Second": переименовать ее в первую и вторую соответственно - удобно, если целью являлся перенос нескольких кнопок;
"to...": ввести имя для новой панели.
6. Созданная панель является сугубо временной (что подчеркивает имя) и при следующем запуске скрипта будет затерта.
7. LoadBar - имя файла, содержащего Скрипт 8.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Sun Mar 12, 2006 11:37    Post subject: Reply with quote

А вот мой первый скрипт.
Скрипт. Поиск файла с именем из буфера по всему жесткому диску

Code:
%{f7}+{ins}{tab 2}{enter}{tab 1}{enter}{tab 1}{enter}{tab 1}{enter}


Вроде ищет.


Last edited by Zorroz on Fri Mar 17, 2006 05:52; edited 1 time in total
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Mon Mar 13, 2006 13:14    Post subject: Reply with quote

Есть такая задача. При нажатии кнопки в панели инструментов тотала или нажатии сочетания горячих клавиш поставить винамп на паузу через 5 мин.
Как вообще в PowerPro работать с таймером.


Last edited by Zorroz on Tue Mar 14, 2006 06:23; edited 1 time in total
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Mon Mar 13, 2006 14:33    Post subject: Reply with quote

2Zorroz
Компаративная фаллометрия Smile
http://powerpro.wincmd.ru/Scripts/Find.htm#clipfile
Quote:
Есть такая задача. При нажатии кнопки в панели инструментов тотала или нажатии сочетания горячих клавиш поставить винам на паузу через 5 мин.
Как вообще в PowerPro работать с таймером.

1) Кто такой винам?
2) Как работать с таймером? Дык, команда *timer Smile
А если нужно тупо организовать паузу, то для этого есть *wait n, где n - ожидание в секундах.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Mon Mar 13, 2006 16:57    Post subject: Reply with quote

Вахмурка
Quote:
1) Кто такой винам?

Винамп, я так понимаю. Smile
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Fri Mar 17, 2006 02:20    Post subject: Reply with quote

Zorroz
Сам винампом не пользую, но посмотри тут
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Mar 17, 2006 05:19    Post subject: Reply with quote

2LocKtaR-o-DarK
Я не совсем это имел ввиду.
Мне надо чтобы после N минут Winamp ставился на паузу. С PowerPro по-моему это можно сделать.
WinWin? Лучше для этого использовать WAC.exe идущею вместе с плугином TWinAmp2 Павла Дубровского.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Mar 17, 2006 05:43    Post subject: Reply with quote

Все решил задачу сам.
Скрипт. Поставить Winamp на паузу через 5 минут

Повешал на:
Code:
c+s+F10

Enter command:
Code:
*Wait

Select wait option:
Code:
300

Enter more commands:
Code:
C:\totalcmd\Plugins\wfx\twinamp2\WAC.exe pause

Вот так, после нажатия Ctrl+Sift+F10 ждем 5 минут и ставим Winamp на паузу с помощью WinAmp Controller.
Сразу вопрос, а как можно это же действие повешать на кнопочку в тотале?

2Вахмурка
А есть еще что-нибудь по Total Commander+PowerPro.
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Fri Mar 17, 2006 11:02    Post subject: Reply with quote

Zorroz
Ну, раз у тебя есть утилита, передающая команды Winamp-у, я могу написать требуемое на VisualBasicScript. (Кстати, сам я для этого использую утилитку MesAmp - очень простая и маленькая - 20k.)
Предлагаю это, поскольку Вахмурка не отозвался.
Но, это не соответствует данной теме, поэтому, если надо, пиши в ЛС.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Fri Mar 17, 2006 21:45    Post subject: Reply with quote

2Zorroz
Quote:
А есть еще что-нибудь по Total Commander+PowerPro

Любая ссылка под любым моим постом.

2Batya
Да, Вахмурка не отозвался. Я не имею физической возможности часто сюда заходить (раза два в неделю, а то и реже). Так что не гоните лошадей - если от меня что нужно, я все сделаю, только не сразу.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
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
Page 1 of 1

 
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