[Tools] Open File Shell For TC

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

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

Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

2CaptainFlint:
Посмотреть, что в настоящий момент используется в качестве редактора по F4 в Тотале
Прикольно получится :) Откроется окно OFTC, в нём - открыть выбранный файл при помощи Choice Editor :D
А если серьёзно - хорошая идея, так и сделаю. Учту оба пункта - А и Б. Всё равно старый редактор я запоминаю в ini-файле.

2Alextp:
Думаю, сам процесс будет таким: откроется дополнительное окно, в котором можно будет галочками выбрать желательные редакторы. На некоторых редакторах галочки уже будут стоять.
Будут кнопки "выбрать всё", "убрать всё", "восстановить исходное выделение".
Перед сканированием будет диалоговое окно "А хотите ли вы..." с кнопкой НЕТ по умолчанию, соглашусь с CaptainFlint.

Саму возможность сделаю доступной и для тех, у кого запуск программы далеко не первый :)

Добавлено:
2Alextp:
Спасибо за предложение! Исходники загрузил :)
In Pascal we trust
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Yams
На вс. случай подскажу :)
это ф-ция

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

function FindPluginsInDir(const Dir: string; List: TStringList): boolean;
//Она проходит по Dir рекурсивно, заполняет список List именами плагинов. Если поменять расширения на '.EXE', будет заполнять именами экзешников
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

Решил, что стоит опубликовать для тестирования данную версию. Эта версия более-менее стабильная, но советую на всякий случай старую не удалять :) Для общего обозрения программа будет опубликована, думаю, не раньше июня - буду ждать переводов и корпеть над файлом справки :)

Загрузить версию 1.7с (beta) можно отсюда.

Что сделано:
  • Добавлено: Возможность указать общую командную строку для всех расширений сразу
    Добавлено: программа считывает переменную окружения PATH
    Добавлено: программы Notepad, Wordpad, MSPaint добавляются при первом старте программы
    Исправлено: не всегда программа правильно работала со строками, в которых присутствовали переменные окружения
    Исправлено: при выборе языка (первый старт) не анализировалась позиция мыши при щелчке. Вследствие этого был возможен выбор не того языка
    Исправлено: большое количество мелких исправлений в окне для редактирования расширений
    Добавлено: поддержка %1 (по значению совпадает с указанием %FullFileName%)
    Добавлено: кнопка "Горячая клавиша" в окне настроек программы
    Исправлено: нельзя было удалить горячую клавишу, только заменить новой
    Добавлено: реализована поддержка замены разделителя между расширениями в ini-файле программы.
    Добавлено: реализована поддержка указания разделителя в языковых файлах (при смене языка меняются все разделители)
    Добавлено: было произведено значительное изменение внутреннего кода, в результате которого обращение к ini-файлу происходит только 2 раза - при старте программы и при выходе из программы. Во время работы вся информация держится в памяти. Раньше малейшее изменение сразу записывалось в ini-файл.
    Добавлено: программа зпоминает свои размеры в режиме настроек и в режиме открытия файла раздельно друг от друга
    Добавлено: при принудительном вызове выделяется та программа, которая должна была открыть этот файл без показа OpenFileTC
    Добавлено: теперь можно указать, в каком положении будет галочка "Всегда использовать выбранную программу..." при перезапуске OFTC - включена, выключена или по последнему состоянию
    Исправлено: в подсказке к программам теперь список поддерживаемых расширений умещается на нескольких строчках, раньше было всё на одной
Что ещё планирую сделать:
  • В окне настроек для редакторов не работает пока что кнопка "Составить командную строку". Что будет - при нажатии на кнопку откроется новое окно, в котором можно будет быстро и понятно (я надеюсь что так будет :) ) составить ком.строку к приложению.
    Если не обленюсь - добавлю тулбар с кнопками. В основном будет дублирование выпадающего меню.
    При нажатии F4 на exe-файле программа сначала предложит добавить exe в список редакторов. Если ответом будет НЕТ, то произведётся обычное действие OpenFileTC - либо открытие окна программы, либо запуск редактора exe-файлов. Данная штука будет опциональной, по умолчанию опция будет включенной.
    Если успею - экспорт/импорт настроек между моей программой и Choice Editor. Ибо нужно.
Что в этой версии точно не сделаю:
  • Обещанную поддержку папок - сделано не будет. оказалось всё не так просто как я думал
    Отказ программы редактировать несколько выделенных файлов при кратком виде в Total Commander'е - всё-таки TC не передаёт мне весь список файлов. Чувствую, снова придётся откатываться на буфер обмена для этого случая :(
    При первом старте - сканирование некоторых папок на наличие exe-файлов. Сделаю к версии 1.8
Попиннайте программу, пожалуйста :) уверен, опять 10 тысяч скрытых глюков в программе. Прошу сообщать даже о невоспроизводимых ошибках и помарках :D
In Pascal we trust
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Yams писал(а):Отказ программы редактировать несколько выделенных файлов при кратком виде в Total Commander'е - всё-таки TC не передаёт мне весь список файлов.
Как это, не передаёт? Всё очень даже передаёт. Сейчас наклепал мини-прожку:

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

CWnd* TC_ListBox = // Окно листбокса;
int i = 0;
char buf[1024];
do
{
	LRESULT len = TC_ListBox->SendMessage(LB_GETTEXTLEN, i, 0);
	if (len == LB_ERR)
		break;
	len = TC_ListBox->SendMessage(LB_GETTEXT, i, (LPARAM)buf);
	if ((len == LB_ERR) || (len == 0))
		break;
	len = TC_ListBox->SendMessage(LB_GETSEL, i, 0);
	printf("Item %02d: '%s'. It is %s.\n", i, buf, (len == 0) ? "not selected" : "selected");
	++i;
} while (true);
Создал те же файлы, что в этом посте (c:\tmp\1 a.txt и т.д.), выделил первый, второй и четвёртый файлы, включил краткий режим, запустил прогу - вот вывод:
Item 00: '..'. It is not selected.
Item 01: '1 a.txt'. It is selected.
Item 02: '2 a.txt'. It is selected.
Item 03: '3 a.txt'. It is not selected.
Item 04: '4 a.txt'. It is selected.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

Так, посмотрю в чём дело. Понял куда копать, кажется =) Спасибо за пример!
Я во втором SendMessage немного не те параметры передаю.
In Pascal we trust
Аватара пользователя
sergeich
Сообщения: 185
Зарегистрирован: Вт апр 25, 2006 22:36
Откуда: Москва

Сообщение sergeich »

Поставил WinXP SP2 Rus, но проблема так и осталась. В версии 1.7с (beta) все те же баги
"При передаче нескольких выделенных файлов, OpenFileTC передает программе путь к файлам: С:\Docum\?С???
Естественно, ничего не открывается"
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

sergeich
Вот как :( Можно тогда несколько вопросов?
1. Какой редактор используете? Для любого редактора такая вот строка отсылается?
2. Какие файлы открываете? Если можно, приведите пример строк, когда у вас OpenFileTC точно не отрабатывает
3. Были ли варианты, когда всё нормально открывалось? Можете привести пример таких имён файлов?
4. Открываете из-под Total Commander'а? А какой версии коммандер? Какой режим показа файлов - краткий, подробный... ?
In Pascal we trust
Аватара пользователя
sergeich
Сообщения: 185
Зарегистрирован: Вт апр 25, 2006 22:36
Откуда: Москва

Сообщение sergeich »

Yams
1. До редактора дело не доходит, т.к. вверху программы при выборе редактора при выделении 2 и более файлов соообщение: Открыть файл "?C??" с помощью...
Понятно, файлы с такими названиями не откроются никаким редактором :-( Названия выделенных файлов могут меняться в зависимости от количества: "?С0??" и т.д.
2. Файлы любые, выделенные правой кнопкой мыши в TC, причем как с одинаковыми расширениями, так и с разными. Пробовал txt и т.д. Имена файлов на английском, например, Win.ini, Boot.ini
3. Нормально открываются файлы, если нет выделения. То есть 1 файл открывается нормально.
4. Открываю естественно из под TC 6.56 Менял режим показа - тоже самое, что в кратком, что в подробном.
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

sergeich
Понял я, в чём дело. Вот оно:
1.
Нормально открываются файлы, если нет выделения. То есть 1 файл открывается нормально.
2.
Открываю естественно из под TC 6.56
Дело в том, что для получения списка выделенных файлов я использую новую команду, которую Гислер ввёл в версиях 7.хх, а в 6.5х не вводил. Эта команда позволяет обходить буфер обмена при получении списка выделенных файлов.

Но в старых версиях при вызове этой команды Total Commander всегда возвращал одно и то же значение. Именно это значение вы и видите в заголовке OpenFileTC. Потому при получении списка выделенных файлов программа не отрабатывает.

В любом случае, это ошибка OpenFileTC - моя программа не распознаёт версии Total Commander'а. Спасибо за баг-репорт, буду исправлять :)
In Pascal we trust
Аватара пользователя
sergeich
Сообщения: 185
Зарегистрирован: Вт апр 25, 2006 22:36
Откуда: Москва

Сообщение sergeich »

Yams
Ну хоть разобрались, в чем дело. :-)
Я думаю, надо действительно сделать распознавание версий TC и в зависимости от этого использовать либо буфер обмена, либо команду.
Удачи!
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

CaptainFlint
Исправил ошибку, о которой говорилось выше - неточность была с моей стороны, неправильно обрабатывал принимаемую от TC строку. Обновлённая версия лежит здесь (та же ссылка что и выше). У меня отработало на ура и в кратком, и в подробном виде (TCpb2). Попробуй, погоняй у себя.

Удивительно, как программа в принципе открывала файлы. Я там такого наворотил... :oops:

Да, по поводу кода. В программе механизм немного другой - у тебя предлагается сканировать весь список файлов и проверять для каждого - выделен ли он. Я делаю по-другому: запрашиваю у TListView массив из номеров тех строк, которые выделены пользователем, и с ними работаю :) Получается быстрее, если пользователь в system32-папке выделил log-file.log и на нём нажал F4 :D

sergeich
Как исправлю ошибку, обязательно сообщу. Буду гонять программу на версии 6.56. Ещё раз спасибо за подсказку :wink:
In Pascal we trust
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Yams писал(а):Попробуй, погоняй у себя.
Непременно, уже поставил. Спасибо за фикс. :) Пока что всё работает корректно.
Yams писал(а):Я делаю по-другому: запрашиваю у TListView массив из номеров тех строк, которые выделены пользователем, и с ними работаю
Ну, понятное дело, я ж и не претендовал на идеальность кода, это была просто проверка возможности как таковой. :)
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

Внёс ещё одни небольшие изменения в программу. Наконец-то отловил неприятный баг в поведении программы - она не всегда слушалась галочки Всегда использовать выбранную программу для данного расширения.

Всего же изменений только два:
1. Исправлено: если указывался правильный путь для потерянной программы, то программа не исчезала из Потерянных программ и её иконка не менялась
2. Исправлено: некорректное поведение программы с галочкой "Всегда открывать данное расширение..." - программа не всегда "слушалась" :)
Загрузить можно по той же самой ссылке, обновление рекомендуемое :D
In Pascal we trust
Аватара пользователя
CJ Flash
Сообщения: 128
Зарегистрирован: Ср фев 15, 2006 18:50
Откуда: Череповец

Сообщение CJ Flash »

Вновь попытаюсь пересесть с ChoiceEditor на OFS4TC... :)

Пока полёт нормальный, единственное маааленькое замечание: исправить ошибку в строке 10=Действие OpenFileTC русского языкового файла.
The past was yesterday...

TC 8.51a x32, #116718 Personal licence
Аватара пользователя
Yams
Сообщения: 115
Зарегистрирован: Пн окт 17, 2005 16:31
Откуда: Тверь
Контактная информация:

Сообщение Yams »

CJ Flash:
Спасибо за замечание, поправил. И ведь даже не обратил внимания ни разу :D
Вновь попытаюсь пересесть с ChoiceEditor на OFS4TC...
Ох как много же вас таких, кенгуру... :D
In Pascal we trust
Ответить