TWinKey - шорткаты, табы, диски и всякая всячина

Обсуждение только плагинов и утилит для Total Commander.

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

Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

HEXFIX
Чтобы получить однозначный ответ, надо задать точный и полный вопрос. Сейчас мало данных. Для начала разбираемся с шаблонами автопереключения на конкретные схемы. Секцию [AutoView] файла TWinKey.ini — в студию. И заодно проверяем, выставлены ли галки у всех визуальных схем на соответствующей странице и не отменяет ли вышележащая в списке схема действие последующей.
Даже самая богатая фантазия
Не представит себе наши безобразия.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

ask-rus писал(а):cm_ и em_ команды в них не установишь.
Ну может какую другую программу можно найти.

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

Мне смутно помнится, что для PowerPro были какие-то скрипты, сажающие туда кнопки, надо бы у Вахмурки уточнить, он спец по PowerPro.
HEXFIX
Сообщения: 177
Зарегистрирован: Пт июн 25, 2010 19:54
Откуда: Калининград

Сообщение HEXFIX »

Avada
Вот, пожалуйста:

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

[AutoView]
Книги=?*Книги*
Музыка=?*Музыка*
По умолчанию=?*.*
Изображения=?*Изображения*
Торренты=?*Торренты*
и не отменяет ли вышележащая в списке схема действие последующей.
Аааа... Теперь понятно! Визуальную схему "По умолчанию" надо ставить последней. Спасибо! :)

Добавлено спустя 9 минут 7 секунд:

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

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

Мне смутно помнится, что для PowerPro были какие-то скрипты, сажающие туда кнопки, надо бы у Вахмурки уточнить
Я тоже хотел бы уточнить, куда надо "сажать" кнопки. Что такое "заголовок окна"? Это который "caption"? Если да, то "посадить" туда панель или меню - как два байта об асфальт. С cm_-командами тоже проблем не возникнет. А вот em_-команды... Можно, но сложнее. Открыть usercmd.ini, по названию команды найти раздел, считать из него ключи cmd и param и выполнить. Никогда этим не занимался, но если нужно, могу нацарапать.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Вахмурка писал(а):Что такое "заголовок окна"? Это который "caption"?
Да, совершенно верно.
Вахмурка писал(а):А вот em_-команды... Можно, но сложнее.
Никаких сложностей. Механизм отработан, давно есть програмы, скрипты, посылающие cm_ и em_ команды в тотал.
И в любом случае не надо ничего читать из usercmd.ini. Просто в случае cm_ команды надо в окно тотала послать WM_USER+51 а в случае em_ надо послать WM_COPYDATA. Все остальное тотал сделает сам.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

В PowerPro это выглядит так:

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

win.sendmessage(hwnd, 0x400+51, 523, 0)
где 523 - номер внутренней команды. По поводу COPYDATA сказано следующее:
sendcopydata(cl, dword, string) sends wm_copydata first window matching cl, with dwdata=dword and lpdata=string
Буду признателен, если программеры подскажут, что надо указывать вместо dwdata и lpdata.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вахмурка, dwdata='ME' (=0x4D45), lpdata="em_command_name\0" (нулевой байт должен являться частью передаваемого блока, поэтому указываю его в строке, у себя в коде я просто размер данных указываю на 1 больше - это третье поле структуры, передаваемой WM_COPYDATA).
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Я за портабельность, посему PowerPro мне не подходит, уже много где говорил об этом.
VadiMGP писал(а):Ну может какую другую программу можно найти.
Искать не буду, потому что мне эти кнопки не как кровь из носу нужны. Есть кнопки - хорошо, нет кнопок - бог с ними. А что касается Твинков, то для меня важны фиксы следующих проблем:

1. Мерцание;
2. Скрытие процесса на Панели задач при прямоугольном выделении;
3. Смещение вниз на пиксель компонентов окна TC;
4. Список дисков без отжатия Alt;
5. "Home" и "End" в Список дисков.

Обо всём этом говорилось.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Я считаю, что string должен содержать текст em_ команды (в кодировке UTF8), а dword - 0x00004d45

Добавлено спустя 6 минут 12 секунд:
MVV писал(а):это третье поле структуры, передаваемой WM_COPYDATA
Я думаю, что Вахмурка не видит эту структуру. PowerPro сам создает её. Потому он и требует только строку и dwData
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вижу, в упомянутой им функции нет такого параметра. Потому я и включил \0 в строку. :)
А кодировка там, мне кажется, должна быть Win-1251. А если UTF-8, то скорее всего с BOM, по аналогии с сообщением для cd.
Вот с командой cd у меня в своё время были проблемы, когда я не включал нулевой байт в размер - когда стало ясно, в чём дело, Гислер сказал, что тотал не смотрит на длину буфера, а ожидает нулевого байта в конце, поэтому этот байт обязательно нужно включать в пересылаемый блок.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

MVV писал(а):А кодировка там, мне кажется, должна быть Win-1251.
В принципе можно и 1251, но тогда если wincmd.ini содержит текст более, чем на двух языках (как у меня, например), то работать будут только английский и русский. UTF8 дает решение для любого количества языков.
И да, еще один \0 там в конце действительно нужен.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

2VadiMGP, MVV
Спасибо за информацию. Сейчас у меня много работы, но как-нибудь надо поиграться. Не пользы ради, а саморазвития для.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Здесь есть более-менее пример на Си. Очень неоптимизированный и без UTF-8, но пример.
И да, еще один \0 там в конце действительно нужен.
Ну как, нуля там хватило бы и одного, главное - учесть его при подсчете числа символов строки. В случае, когда длину вычисляют без нас, нужно указывать в конце строки \0.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

MVV писал(а):Здесь есть более-менее пример на Си. Очень неоптимизированный и без UTF-8, но пример.
Ну, UTF8 это всего одна строчка. У меня вот так

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

		
BYTE utf8name[1024];
int tlen;
      tlen=wcstombs((char*)utf8name,CmdName,sizeof(utf8name));
		if (tlen!=-1)
		{
			cds.dwData = 'E' + 256 * 'M';
			cds.cbData = tlen+1;
			cds.lpData = (PVOID)utf8name;
			SendMessage(ghTC, WM_COPYDATA, 1, (LPARAM)&cds);
		}
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Боюсь, BOM придется указывать в случае с UTF-8. Гислер уделяет большое внимание совместимости, поэтому вряд ли без BOM станет читать UTF-8.

А вместо wcstombs я всегда использую WideCharToMultiByte(CP_UTF8, ...), не люблю эти CRT-шные функции, они много лишнего за собой тянут. :)
Ответить