Запрос на тестирование плагина (Консоль для ТС)

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

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

Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Забавно...
Но "ясно, скрою" поможет избежать "ошаления" при случайном клике мышью... Остальное неважно... :)
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

B4rr4cuda писал(а):Это стандартное поведение cmd.exe. Используй хоткей "закрыть все", а потом уж альт-Ф4. Пофиксить не могу.
В принципе - можешь. :) Я ручками повесил в HotKeys.hks команду NewConsole на 1+115 и увидел, что ты прекрасно это обрабатываешь. Значит, Alt+F4 ты получаешь. Надо только придумать как об этом сообщить ТС. Тупо слать WM_CLOSE нельзя, потому что, возможно, открыт модальный диалог. В общем, способы против Кольки Сапрыкина есть. :wink:
B4rr4cuda писал(а):Могу вылечить только хуком, но он сильно затормозит Тотал.
Если будешь настаивать, сделаю...
Не буду. Пусть лучше так, но без тормозов.
B4rr4cuda писал(а):Попробую находить размеры используемого шрифта автоматом, если не получиться - добавлю пункт в опции.
Годится.
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

В принципе - можешь. Я ручками повесил в HotKeys.hks команду NewConsole на 1+115 и увидел, что ты прекрасно это обрабатываешь. Значит, Alt+F4 ты получаешь. Надо только придумать как об этом сообщить ТС. Тупо слать WM_CLOSE нельзя, потому что, возможно, открыт модальный диалог. В общем, способы против Кольки Сапрыкина есть
OK. Подумаю что можно сделать...
Проведу тест драйв хука на фокус или ещё что нить попробую, о результатах сообщу.
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Доброго времени суток уважаемые.
Возникла пара вопросов:
1.
Если фокус находится в консоли, то Alt+F4 не работает и выйти из коммандера можно только мышой.
Значит, Alt+F4 ты получаешь. Надо только придумать как об этом сообщить ТС. Тупо слать WM_CLOSE нельзя, потому что, возможно, открыт модальный диалог
А если посылать тоталу 24340 ака cm_Exit?

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

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

GetConsoleFontSize(hConsoleOutput:THandle; nFont:Cardinal), 
где nFont - индекс используемого шрифта получаемого

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

GetCurrentConsoleFont(hConsoleOutput:THandle;
                                bMaximumWindow:LongBool;
                                lpConsoleCurrentFont:PCONSOLE_FONT_INFO): LongBOOL stdcall;
Вторая функция работает и возвращает индекс (правильный), а вот GetConsoleFontSize возвращает ошибку "недопустимый дескриптор".
У меня уже кипит моск, помогите плиз.
Выдрал из МСДН-а структуры и обьявил фунцы:

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

type PCONSOLE_FONT_INFO=^TCONSOLE_FONT_INFO;
     TCONSOLE_FONT_INFO=record
                         nFont:DWORD;
                         dwFontSize:COORD;
                        end;

     TGetCurrentConsoleFont = function (hConsoleOutput:THandle;
                                        bMaximumWindow:LongBool;
                                        lpConsoleCurrentFont:PCONSOLE_FONT_INFO): LongBOOL stdcall;
     TGetConsoleFontSize=function( hConsoleOutput:THandle;
                                                nFont:Cardinal):COORD;
var
  GetCurrentConsoleFont:TGetCurrentConsoleFont;
  fsn:TCONSOLE_FONT_INFO;
  GetConsoleFontSize:TGetConsoleFontSize;
  Siz:COORD;
  std:THandle;
  Nf:DWORD;
begin
//подключаем фунцы
 @GetCurrentConsoleFont := GetProcAddress(   GetModuleHandle('kernel32.dll'), 'GetCurrentConsoleFont');
 @GetConsoleFontSize := GetProcAddress(   GetModuleHandle('kernel32.dll'), 'GetConsoleFontSize');

//проверяем 
 if not assigned(GetCurrentConsoleFont) then Messagebox(0,'Not assigned','Error',mb_Ok) ;
 if not assigned(GetConsoleFontSize) then Messagebox(0,'Not assigned','Error',mb_Ok) ;

//получаем вых хэндл
std:=GetStdHandle(STD_OUTPUT_HANDLE);
 if std=0 then  ShowMessage('Error='+Inttostr(GetLastError)+#10+#13+SysErrorMessage(GetLastError));

//получаем индекс шрифта, возвращает правильный результат...
if Not GetCurrentConsoleFont(std,False,@fsn) then   ShowMessage(SysErrorMessage(GetLastError));

//сохраняем полученые данные (размер окна)
  siz:=fsn.dwFontSize;

//А вот эта фунца выдаёт нули что по МСДНу ошибочно
  fsn.dwFontSize:=GetConsoleFontSize(GetStdHandle(STD_OUTPUT_HANDLE),(fsn.nFont));

//Если фунца не сработала (а она не работает), то месага последней ошибки
 if (fsn.dwFontSize.X=0) and (fsn.dwFontSize.y=0) then  ShowMessage('Error='+Inttostr(GetLastError)+#10+#13+SysErrorMessage(GetLastError));

//вывод полученых данных (и не полученых тоже)

 ShowMessage('Fsn'+#10+#13+'x='+IntToStr(fsn.dwFontSize.X)+#10+#13+'Y='+IntToStr(fsn.dwFontSize.Y)+#10+#13+'Siz'+#10+#13+'x='+IntToStr(Siz.X)+#10+#13+'Y='+IntToStr(Siz.Y));

Кто скажет где ошибка? (Только не надо говорить что в ДНК :) мой папа старался :) )
Ещё могу сказать, что консоль у которой выдёргиваем данные приаттачена через AttachConsole.
Если код верен, но не рабоч :\ то другой вопрос: Как можно получить список терминальных шрифтов используемых консолью?
Гугля об этом несёт чушь...

Немного об изменениях:
некоторые хоткеи не работают, когда фокус в консоли, например Ctrl+Win+O (вместо нового таба, в консоль впечатывается последовательность ^O)
*Пошёл на изврат, сделал возможность хоткеить и через хук и через RegisterHotkey. Теперь можно избежать бяк типа ^O в консоли.
*Доработал изменения размеров (уже в который раз :) ). Особенно МАХ режим...
*Запуск\закрытие консолей колёсиком мыши.
*Изменение цвета заголовка при потере\получении фокуса.
*Добавил пару опций
*Уменьшил вероятность запуска пустого таба (без консольного окна), нехороший баг оказался...

Планирую для версии 0.4:
Доработать внутренние команды, добавить пару новых.
Пофиксить размер консоли при смене шрифта.
Сделать наконец полноценный перехват из командной строки.
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

С размерами вопрос решён. Я ступил дико :oops: забыл stdcall и неделю долбился об стену :twisted: .

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

      TGetConsoleFontSize=function( hConsoleOutput:THandle;
 nFont:Cardinal):COORD;stdcall;
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

v 0.4 beta
[+] обработка клика средней кнопкой мыши для создания\закрытия консоли.
[*] диалог настроек теперь модальный
[*] перекрытие диалога открытия шелла диалогом настроек
[*] пофиксены баги окна в развёрнутом состоянии
[/] размеры окна в развёрнутом состоянии
[+] хоткей как системный или хук на выбор
[+] команда show\hide
[*] пофиксены недоработки внутренних команд
[+] перехват ком.строки (по Shift+Enter)
[+] Смена цвета заголовка при получении\потере фокуса консолью
[*] Размеры консоли при смене шрифта
Качаем с рапиды
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

B4rr4cuda писал(а):А если посылать тоталу 24340 ака cm_Exit?
Так проверь. Но я думаю, что результат будет тот же самый.
А вообще-то, выход по Alt+F4 - это не главное. Хрен с ним с модальным диалогом - если он открыт, то ТС и так по Alt+F4 не выйдет.
Главное - добавить команды, чтобы по хоткею можно было уйти с консоли в ТС и вернуться в консоль.

Пока наткнулся на такие проблемы.
1. При загруженном плагине у меня перестает работать PuntoSwitcher. Зверски мешает.
2. Если назначить команду на хоткей, который используется в ТС, то выполняются оба действия - и в консоли и в ТС. Например назначил нереход на следующую консоль по Alt+F7. В результате - и на следующую консоль перехожу и диалог поиска появляется.
3. Если файла Options.ini нет, то вроде все работает нормально. Если же поменять хоть что-то в настройках, то появляется Options.ini и при последующих запусках ТС, плагин загружается, но в окне ТС ничего не появляется. Проверь все, что пишется в Options.ini "по умолчанию".
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Главное - добавить команды, чтобы по хоткею можно было уйти с консоли в ТС и вернуться в консоль.
ExchangeFocus чем не устраивает? Или Show\Hide ?

1.
При загруженном плагине у меня перестает работать PuntoSwitcher. Зверски мешает.
Мда, - промычал Герасим и пошёл топить Му-му...
Какая версия PS-a? Буду копать в чём проблема...
2. Регистрируй сочетание как системный хоткей...
3. Ты прав, с записью "по дефолту" недоработки... Буду фиксить..
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

ExchangeFocus устраивает. Я его не заметил. :wink:

PuntoSwitcher - 2.6
B4rr4cuda писал(а):2. Регистрируй сочетание как системный хоткей...
Издеваисся, Герасим? Я поставил ExchangeFocus на Ctrl+Tab - так Ctrl+Tab перестал работать во всех программах.
Не зря я с детства ненавижу две вещи - рисовую кашу и системные хоткеи.
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Издеваисся, Герасим? Я поставил ExchangeFocus на Ctrl+Tab - так Ctrl+Tab перестал работать во всех программах.
Неее, ctrl+Tab ставить на ExchangeFocus дело экстримное... Я поставил ctrl+`(тильда), как обычный хук.
СисХоты хорошо ставить на сочетания с winkey, собственно для того я их и сделал....
Не зря я с детства ненавижу две вещи - рисовую кашу и системные хоткеи.
Жжошш... :) ... Чуть не задохнулся.... :) :)
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

УРАААА, нашёл метод убивать запущеные в консоли проги при выходе из ТС... :) :) :)
Не могу не похвастаться :) аж адреналин в крови бродит!!!!
Теперь не будет этих тупых системных окон запроса завершения процесса и не будут всякие бяки тихо висеть в процессах! :) :) :) :) :) :)
*B4rr4cuda лихо выплясывает гопак.
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Пофиксил багу с PuntoSwitcher-ом, помог танец с бубном :).
Много переработок и добавлений, новая версия будет к концу недели...
Наконец-то плаг приобретает цивилизованный вид. :)
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Увлёкся, однако. Сделал всё что планировал...
Итак об изменениях:
v 0.5 beta
[+] проверка являеться выбранное в качестве шелла приложение консольным
[*] пофиксен баг с "двойными командами" по хоткею (хук), если запущенно два ТС
[+] опция "минимизировать и востановить при создании нового консольного окна". Отключено по умолчанию.
[*] фикс бага загрузки опций "по умолчанию"
[/] при закрытии консоли убиваються все приложения запущенные в консольных окнах (при выходе из ТС тоже)
[+] выход из ТС по ALT+F4 в консольном окне. По умолчанию отключенно.
[+] размер буфера экрана консоли меняеться автоматически при ресайзе либо фиксированный. По умолчанию - авто.
[+] добавленна опция фиксации размера заголовка таба. Неограниченный по умолчанию.
[*] фикс заголовков табов (странные названия)
[*] мелкие фиксы внутренних команд.
[*] баг работы совместно с PuntoSwitcher-ом
[+] разные хоткеи с различными параметрами на одну команду
[+] список комманд в выпадающем меню.
[+] смена каталога в консоли при смене каталога в ТС (в том числе и при смене таба). По умолчанию отключено.

Стыдно конечно, что опять бета, никак stable не появиться :). Но уже стабильность радует. :)
Сделал автосмену каталога Alextp респект тебе за идею, оказалось очень удобно, но гемороя мне было на 5 ужасных часов :) :).
Для автосмены требуеться настройка, так что привожу кусок ридми во избежание вопросов:
В случае использования автосмены каталога консоли при смене пути в ТС - необходима дополнительная настройка.
Переходим в Настройка>Решение проблем> "Смена языка при смене папки\таба в ТС" выбираем
язык используемый на компьютере и в окно ввода "Алфавит" заносим буквы.

Пример:
Язык: Русский
Алфавит:йцукенгшщзхъфывапролджэячсмитьбю

Порядок ввода значения не имеет, важно само наличие символов.
Это необходимо для переключения языка при входе в папку с русским названием.
Иначе вводяться "кракозяблы". После ввода алфавита кликаем "Доб. Алфавит", ОК .
Ну и ещё кусочек ридми чтобы не напрягать ридми ненависников:
Дополнительного пояснения требует возможность нескольких хоткеев на одно действие. Многие привыкли переключать табы нажатием Ctrl+Tab, а для некоторых (и для меня в том числе) удобнее использовать TotalConsole c выключенными опциями "Передавать фокус консоли при смене вкладки" и "Передать фокус создаваемой консоли",( т.е. консоль не получает фокус при создании и при смене вкладки, фокус всегда у ТС) используя Shift+Enter для передачи консоли команд. Для смены вкладки я использую хоткей ctrl+`(тильда), но бывают случаи, когда я всё же перехожу в консоль и тут руки вспоминают про ctrl+tab :). Теперь можно назначить Ctrl+Tab команде NextTab с параметром "Работать в" "TotalConsole" и хоткей Ctrl+` на NextTab с параметром "Оба" или "TC".
Постите пожалуйста wish-ы и багрепорты, так как проект я скоро прекращу.

Кстати консоль сбоку всобачить не получиться, кофициент багов и раздражителей зашкаливает. Провёл тесты - очень уж жутко. Мигание, перекосы, перекрытия окон - лишь малая часть. Как это исключить, я просто не знаю. :(

Скачать TotalConsole 0.5 beta
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Будь таки добр кроме рапидшары куда-нить лить! Не могу я с работы или жопореза оттуда качать :(
Аватара пользователя
B4rr4cuda
Сообщения: 376
Зарегистрирован: Вс июн 03, 2007 00:36
Откуда: Россия, Москва

Сообщение B4rr4cuda »

Ответить