Открылся сайт "Total Commander и PowerPro"
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Открылся сайт "Total Commander и PowerPro" Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Sep 23, 2005 21:05
    —
Открылся сайт, посвященный совместной работе Total Commander и PowerPro:
http://pprotcmd.narod.ru
Скрипты, статьи, ссылки, советы, плагины, утилиты, иконки.
Добро пожаловать!

#2:  Author: LocKtaR-o-DarKLocation: Москва PostPosted: Sat Sep 24, 2005 11:23
    —
Посмотрел сайт, но, честно говоря, большинство описанных операций делаются тоталом и без применения скриптов.

#3:  Author: VolniyLocation: Местный PostPosted: Sun Sep 25, 2005 10:41
    —
Многие скрипты весьма накручены и в них даже трудновато разобраться. А некоторые просто некий набор клавиатурных команд, посылаемых Тоталу, тоесть могут быть реализованы и без тяжелой артиллерии PowerPro.

ЗЫ Вахмурка, нарисуй скрипт для установки разделителя файловых панелей в определенное положение. Я потом свой вариант покажу. Померяемся Question Wink

#4:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sun Sep 25, 2005 20:18
    —
LocKtaR-o-DarK wrote:
Посмотрел сайт, но, честно говоря, большинство описанных операций делаются тоталом и без применения скриптов.

Разумеется. Ничего другого и ждать было нельзя. Но можно попробовать с секундомером засечь, что быстрее. Smile
Вот это, разве что, ТС не делает ну никак:
http://pprotcmd.narod.ru/Scripts/TabTools.htm
Сделаешь - напиши как. Всем будет интересно.
А вообще скрипты (имеется в виду именно приложение их к ТС) не могут сделать того, что выходит за рамки возможностей самого ТС. Скрипт упрощает и ускоряет работу, но не более того. Об этом я написал во Введении.

2Volniy
Quote:
Многие скрипты весьма накручены и в них даже трудновато разобраться

И не надо. Где надо разбираться, я пометил синеньким. Smile
Напишешь то же проще - пришли, выложу.

Quote:
А некоторые просто некий набор клавиатурных команд, посылаемых Тоталу, тоесть могут быть реализованы и без тяжелой артиллерии PowerPro

Пиши - выложу.

Quote:
Вахмурка, нарисуй скрипт для установки разделителя файловых панелей в определенное положение. Я потом свой вариант покажу. Померяемся

Не обещаю. Оно мне не надо. А это очень трудно - писать то, что не надо.

#5:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Sep 27, 2005 21:03
    —
2Volniy
Volniy, ты редиска. Ты меня взял на слабо, как сопливого пацана. И я в течение часа занимался тем, что я никогда не буду использовать. Только чтобы слиться с тобой в экстазе "компаративной фаллометрии". Бяка ты, Volniy.
Ну, а если серьезно. Ты не совсем четко поставил задачу, и я имел право решить ее для частного случая, а именно:
1) используются только "стандартные положения" разделителя;
2) предполагается, что разделитель вертикальный, а не горизонтальный.
Больше мериться с тобой не буду (обещала лиса кур не таскать...). Хотя пути решения могу наметить, если хочешь, там все тривиально.
Code:

;arg(1) is "1" for 20% from left, "2" for 30%, ... etc ..., "7" for 80%
local Where = arg(1)
local i
local Hand = win.handle("c=TTOTAL_CMD")

flag set 1

for(i = 1; 1; i = i + 1)
   hh = childwin.handle(Hand, i)
   if(hh != "" && win.width(hh) == 3) do
      flag clear 1
      break
   endif
endfor

if(pproflag(1))
   quit

local HCenter = (win.left(hh) + win.right(hh))/2
local VCenter = (win.top(hh) + win.bottom(hh))/2
local expr = "ab " ++ HCenter ++ " " ++ VCenter
win.mouse(expr)
wait.for(10)
mouse rightdown
wait.for(10)
mouse rightup

for(i = 1; i <= Where; i = i + 1)
   *keys {down}
endfor

*keys {enter}

#6:  Author: VolniyLocation: Местный PostPosted: Wed Sep 28, 2005 15:47
    —
Вахмурка wrote:
Бяка ты, Volniy.
Ну, а если серьезно. Ты не совсем четко поставил задачу, и я имел право решить ее для частного случая

То, что я бяка спорить не стану Smile Даже больше, чем бяка, потому как скрипта на PowerPro я и не собирался писать (хотя, могу и попробовать, конечно). Все гораздо проще: в моем варианте это скрипт на моем TC WSH Helper-е. Там для этой цели я написал отдельный метод (ну просто для понту). То есть установить разделитель в нем можно всего лишь одной командой.
Quote:
Больше мериться с тобой не буду (обещала лиса кур не таскать...). Хотя пути решения могу наметить, если хочешь, там все тривиально.

В принципе да, произвольная установка тоже достаточно просто реализуется (поиск окна панели разделителя - установка указателя мышки на нем - программное перемещение указателя в нужную позицию экрана - отпускание ), но и мне повозиться прилично пришлось. Но зато теперь этот метод может установить разделитель (пока тоже только вертикальный) в нужное положение (при любом положении и размере окна Тотала) с точностью 0,1% (!, только кому это нафиг нужно Question Smile ).

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

#7:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Thu Sep 29, 2005 14:42
    —
Volniy wrote:
с точностью 0,1% (!, только кому это нафиг нужно Question.

2Volniy
Золотые слова! Хватит позориться нам с тобой, зас...ая инет бессмысленными скриптами.
У меня к тебе проф. вопрос. Задача: закрыть заданную вкладку, не активизируя ее (если путь указывает в несуществующее место, например). Среда разработки не имеет никакого значения. Там фишка - в арифметике: учесть количество вкладок, названия, ширину окна. Если все аккуратно продумать, можно точно указать координату над нужной вкладкой. Остается открыть вкладочное меню и послать Ctrl+W.
Есть какие-нибудь мысли на этот счет? Если хочешь, вдвоем что-нибудь сваляем. Цель стоящая, по себе знаю. Часто приходится такое делать. Я написал скрипт http://pprotcmd.narod.ru/Scripts/Subs/Subs.htm#PathVal, который лишь находит "тухлую" вкладку, но закрывать ее приходится врукопашную, а это не есть хорошо.

#8:  Author: VolniyLocation: Местный PostPosted: Fri Sep 30, 2005 02:01
    —
Вахмурка wrote:

У меня к тебе проф. вопрос. Задача: закрыть заданную вкладку, не активизируя ее (если путь указывает в несуществующее место, например). Среда разработки не имеет никакого значения. Там фишка - в арифметике: учесть количество вкладок, названия, ширину окна. Если все аккуратно продумать, можно точно указать координату над нужной вкладкой. Остается открыть вкладочное меню и послать Ctrl+W.
Есть какие-нибудь мысли на этот счет?

Есть. Я бы (сходу) предложил 2 варианта:
1) Отредактировать файл с вкладками и загрузить его (или изменить непосредственно сам ини-файл Тотала и перезагрузить последний)
2) Послать немножко мессаг таб контролам TMyTabControl
TCM_GETITEMCOUNT -> в цикле TCM_GETITEM -> для невалидных TCM_DELETEITEM.
Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать).

PS Твой вариант пока не продумывал.

#9:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sun Oct 02, 2005 12:58
    —
Volniy wrote:

1) Отредактировать файл с вкладками и загрузить его (или изменить непосредственно сам ини-файл Тотала и перезагрузить последний)

Это очевидное решение, но относительно долгое и некрасивое - на экране мигание сплошное, окна то открываются, то закрываются...
Quote:

2) Послать немножко мессаг таб контролам TMyTabControl
TCM_GETITEMCOUNT -> в цикле TCM_GETITEM -> для невалидных TCM_DELETEITEM.

Volniy, а где про это почитать? Я сейчас на С++ пишу, хотя раньше много на чем писал, но ведь здесь немножко не то - ТС на Дельфи написан... Я понимаю, что посылка сообщений от языка не зависит, но в Микрософтовских продуктах, насколько я понимаю, эти сообщения пишутся не как TCM_... а как WM_... Не силен я пока в посылке сообщений, просто другими темами занимался. Не подкинешь ссылочку на мануал?
Quote:
Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать).

...и, скорее всего, последствия будут грустные.
Так или иначе, за ответ спасибо. А мое предложение, согласись, и покрасивее и поуниверсальнее будет. Если его реализовать, конечно...

#10:  Author: VolniyLocation: Местный PostPosted: Sun Oct 02, 2005 14:36
    —
Вахмурка wrote:
Volniy, а где про это почитать? Я сейчас на С++ пишу, хотя раньше много на чем писал, но ведь здесь немножко не то - ТС на Дельфи написан... Я понимаю, что посылка сообщений от языка не зависит, но в Микрософтовских продуктах, насколько я понимаю, эти сообщения пишутся не как TCM_... а как WM_... Не силен я пока в посылке сообщений, просто другими темами занимался. Не подкинешь ссылочку на мануал?

Язык программирования тут ни причем - Tab это же из Common Controls. Эта ссылка на статьи MSDN в сетке, файлик из CD версии MSDN называется Shellcc.chm. А для экспериментов с окнами и сообщениями настоятельно рекомендую InqSoft Window Scanner (must have однозначно!).
Quote:
Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать).

Quote:
...и, скорее всего, последствия будут грустные.

Не торопись... Я вот сейчас попробовал реализовать все это - и не обнаружил никаких проблем (только не удаляй активную вкладку, а она легко определяется через мессагу TCM_GETCURSEL).
Короче, я считаю, что этот мой вариант все-таки COOL Smile Будет время и желание - впихну как новый метод в свой TC Helper.

#11:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Mon Oct 03, 2005 20:03
    —
MSDN у меня и самого есть Smile. Я даже прогу писал с табконтролами. Я пока не разобрался с посылкой сообщений извне. То есть когда я сам создал табконтрол, послать ему сообщение - как два байта об асфальт. А вот из скрипта, да еще в чужое приложение... У-у-у!
Ладно, Volniy, если ты считаешь, что sapienti sat est (для умного достаточно), буду делать вид, что я умный. Спасибо

#12:  Author: VolniyLocation: Местный PostPosted: Tue Oct 04, 2005 02:16
    —
Вахмурка wrote:
То есть когда я сам создал табконтрол, послать ему сообщение - как два байта об асфальт. А вот из скрипта, да еще в чужое приложение... У-у-у!

Странно, что тебя это смущает...Ты же в своих скриптах шлешь мессаги окну Тоталу? Тут те же яйца Smile Чтобы послать сообщение Tab контролу всего-то надо вычислить хендл его окна (для этого достаточно FindWindow(Ex). Я не пойму, в чем тут у тебя загвоздка? Или в PowerPro недостает функциональности (извини, плохо знаю набор его функций) ? Мне-то кажется найти окно по классу там просто плевое дело.

#13:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Oct 05, 2005 23:07
    —
Видимо, ты прав. У меня до этого просто руки не дошли (надеюсь, что уже доросли, но просто не дошли). Я мыслил в точности так, как ты написал, только надо было просто сесть и попробовать. Есть, есть в PowerPro средства посылки сообщения окну с известным хэндлом (сиречь декриптором). И хэндл определить я умею. В любом случае, ты мне очень продуктивно советуешь. Если удастся все это сделать, пропишу тебя в качестве соавтора скрипта.
Еще раз спасибо.

#14:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Thu Nov 24, 2005 15:18
    —
2Volniy
Предлагаю отчет о достигнутых успехах и вопрос. Напомню - ты предложил использовать сообщения TCM_ для управления вкладками.

Пункт I. Команда TCM_DELETEITEM
1. Открываем две вкладки: корни дисков c и d;
2. Делаем текущей первую (c);
3. Пытаемся удалить вкладку №0 (т. е. c). Выходит очень грустная картина, о чем ты и предупреждал;
4. Теперь вместо п. 2 делаем текущей вторую (d);
5. Опять удаляем №0. На первый взгляд - все зашибись. Сохранив конфигурацию, видим отсутствие раздела [righttabs], как и должно быть. Но:
а) Несмотря на то, что флаг "Show tab header also when there is only one tab" сброшен, действительность противоречит настройке;
б) При попытке выдать команду opentabs "что-нибудь.tab" вылезает скукота.

6. Продолжаем. Теперь открываем три вкладки: c, d и е;
7. Делаем активной третью;
8. Удаляем первую;
9. Получаем следующее: две вкладки "с вывесками" d и е. Казалось бы, зашибись. Но "под вывеской" d видим корень c (это написано в строке Current directory). А вот вкладка с названием е: показывает на е:. То же происходит с бОльшим числом вкладок - заголовки вкладок уничтожаются, а список файлов, путь, содержание вкладки, как хочешь назови - нет. Получается асинхронность;
10. Команда opentabs по-прежнему ведет к скукоте.

Так что скажи мне честно, Volniy: это в голове моей опилки и руки не оттуда растут, или Тотал просто не приспособлен к такому насилию над собой?

Пункт II. Команда TCM_DELETEALLITEMS
Ну о-очень грустный результат...

Пункт III. Команды TCM_GETCURFOCUS, TCM_GETCURSEL, TCM_GETITEMCOUNT, TCM_GETROWCOUNT,
TCM_GETUNICODEFORMAT, TCM_SETCURFOCUS, TCM_SETCURSEL, TCM_SETMINTABWIDTH

Работают!

Пункт IV. Команда TCM_HIGHLIGHTITEM
Забавно выходит... Может, когда-нибудь и использую. Странно, что этого не сделал Гислер.

#15:  Author: VolniyLocation: Местный PostPosted: Thu Nov 24, 2005 17:54
    —
Вахмурка wrote:
Так что скажи мне честно, Volniy: это в голове моей опилки и руки не оттуда растут, или Тотал просто не приспособлен к такому насилию над собой?

Да нормально у тебя с головой, раз уж так лихо с посылкой сообщений разобрался Smile Скорее тут второе, и я это предполагал. Я думаю, что Ghisler ведет какой-то свой учет закладок и их индексацию тоже, не сверяясь с их реальным количеством (да и чего ему сверяться-то, он ведь ощущает себя полным хозяином, а ту мы со своими хаковыми делами влезаем). В любом случае нужно будет еще хорошенько подумать до использования этих команд в скриптах. А жаль.

Кстати, я тут на днях пробовал посылать файловым панелям сообщения для списков, они в основном тоже работают (например, можно произвольно выставлять высоту строк).



Total Commander -> Автоматизация Total Commander


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

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group