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 

Запрос на тестирование плагина (Консоль для ТС)
Goto page 1, 2, 3 ... 17, 18, 19  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 02:46    Post subject: Запрос на тестирование плагина (Консоль для ТС) Reply with quote

Как обычно двигателем прогресса послужила лень.
Надоело вручную отрубать cmd.exe после использования плагина TConsole,
Надоело отсутствие Ctrl+C и всевозможные глюки.
Обычно в таком случае критика перебивают словами "Вот сам напиши, тогда и будешь распинаться".
Я так и сделал - написал! Smile

Данный плагин представляет собой консоль для Total Commander.
Поддерживает одновременно более 100 консолей.
Работает с bash, csh, или стандартной консолью Windows.
Поддерживает ctrl+c в окне консоли.
Поддерживаются горячие клавиши.

Принимаются на рассмотрение любые конструктивные пожелания и замечания (в теме письма указать "TotalConsole:improve" ).

Баг-репорты принимаются с темой "TotalConsole:BUG".

Писать на B4rr4cuda (та ещё собака) на рамблере на домене ru
или на эту ветку форума.



Требования
----------------------------------------------
Windows 5.1 и старше


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


Теперь плагин распространяеться по дефолту как wfx.

TotalConsole v 0.5.1 WFX,WDX
[+] WFX интерфейс.
[+] ExcludeList -GUI настройки исключений
[*] фикс баги не отключения ресайза для прог из ExcludeList.
[*] фикс сохранения размеров при выходе
[*] фикс минимизации
[+] пункт меню "Восстановить"
[-] пункт меню "Скрыть". Команды остались.
[/] изменил алгоритм размеров консольного окна. Полностью устранить зазоры не получается.


Кусок ридми:
Quote:
* Плагин поддерживает два интерфейса плагинов - WFX и WDX.
Это означает что TotalConsole может быть подключен как файлсистемный плагин и как контентный.
Для подключения как WDX - смените расширение плагина на wdx, те было TotalConsole.wfx,
переименовали в TotalConsole.wdx и наоборот.
Переходим в Конфигурация->Настройка колонок->Новая->Добавить колонку->TotalConsole->Console

Если плагин подключен как Filesystem(wfx), то запускаться он должен вручную:
переходим в сетевое окружение, заходим в TotalConsole - всё, плагин запущен.
Можем переходить в другие папки, это не помешает работе плагина.
Если необходима автозагрузка - то подключаем плагин как wdx, создаём набор колонок с TotalConsole.
Теперь достаточно один раз загрузить набор колонок для запуска плагина.
Если необходим автоматический запуск плагина - добавляем TotalConsole в каждый набор колонок.
Вообще-то я бы рекомендовал скопировать плагин в ту же папку но с другим расширением.
Это позволит установить оба типа плагина и использовать TotalConsole более функционально.


Скачать:
Качать здесь


Last edited by B4rr4cuda on Wed Aug 29, 2007 00:08; edited 4 times in total
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Sun Jun 03, 2007 07:54    Post subject: Reply with quote

Реализация оригинальная, то, как консоль встраивается в TC сразу понравилось. Но, само собой, есть замечания, сначала мелочные:
1. TKonsole - орфографически неверно. Я, конечно, понимаю, что название TConsole занято, но всё же - немного коробит, можно назвать плагин как-то иначе. Сам ничего не предложу - у меня с выдумыванием названий к своим прогам всегда туго было.
2. Скриншот в архиве... потом лучше убрать. Как-то не принято скрины в инсталляшки плагинов совать, тем более такого размера, и, тем более, с крякнутым TC. Вот когда за плагин ключик получишь... Smile
3. Можно бы автоинсталл приделать, это очень просто, а удобства вагон.
4. Абсолютно не нравится графический заголовок/сплиттер. Хделай, хотя бы опционально, возможность включения стандартного вида Windows.

Теперь уже замечания посерьёзнее:
5. Почему реализовано wdx-плагином? Догадываюсь, что так можно отслеживать запуск TC (и включать консоль сразу же), легче "встраиваться" в окно TC, да и вообще. Но использовать такую консольку использовать не совсем удобно, да и глючит она. Сейчас я подключаю плагин, делаю колонку с ним, консолька появляется, но колонка даже не сохраняется (т.е. чтобы запустить консоль после перезапуска, надо снова лезть в настройки колонок).
Имхо, логичнее и удобнее для пользователя бы было реализовать идею в виде отдельной софтинки, точно так же встраивающей консоль в окно TC. Запускать/закрывать консоль можно бы было передавая проге параметры командной строки, т.е. нужные функции легко было бы подвесить на хоткеи или кнопки в тулбаре.
6. Окно настроек плагина. Хм... Так понимаю, окно есть, настроек нет? =) Где кнопка "Применить"? Раз пока не работает, предложений по улучшению функций не будет - сделай хотя бы то, что задумано.
7. Изменение размеров консоли. При изменении размеров TC она прорисоввывается жутко медленно, при этом "сквозь" неё виден тоталовский сплиттер. При изменении размеров самой консоли её можно "утянуть" за пределы окна TC как вверх так и вниз, что довольно забавно сказывается на виде окна самого Тотала Smile
8. Когда консоль получает фокус, TC его теряет. Я понимаю, почему так получается, но это не есть хорошо.
10. Консоль "перекрывает" стандартную командную строку TC.
11. Если при включеной консоли поиграться с изменением внешнего вида Тотала в настройках, можно добиться интересных эффектов (скриншот: http://wincmd.ru/files/tckon.gif).

Думаю, пока хватит. Потом будет ещё.
Но если реализуешь "правильную" консоль, будет тебе и честь, и хвала Smile
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Sun Jun 03, 2007 08:29    Post subject: Reply with quote

А вот такой глюк я поймал только что: http://wincmd.ru/files/tck2.gif
Отключил консоль через менюшку, стал менять размеры TC...
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 08:49    Post subject: Reply with quote

Во первых спасибо за столь развёрнутый ответ. (Даже не ожидал Smile )
Теперь по пунктам:
1. Навеяно Konsole из KDE (Linux). Это просто рабочее название, потом сменю. Так и знал что к названию прицепяться Smile.
2. Принято. После написания буду канючить у Гислера ключ Smile.
3. Сделаем.
4. Будет опционально стандартная панелька Винды либо собственная картинка. (там TImage на TPanel - задел на будующее)
5. Ты правильно понял суть Smile. Отслеживать проще, но вот в остальном ты не прав.
Встраивать всё равно куда, был даже весёлый момент когда тестировал хук на изменение размера окна - случайно поставил глобальный (после бессоной ночи) и моя консолька всобачилась во все окна, потом систему крешнула.
Насчёт софтинки - это сделать можно, но ты каждый раз будешь указывать окно тотала в которое встраиваться?
У меня обычно 2-3 тотала запущено... Неудобно...
Насчёт колонок не понял!!! Колонок быть ВООБЩЕ не должно!!! Надо просто установить плагин И ВСЁ... Никаких колонок и их сохранения. Я wdx потому и выбрал что они всегда при запуске подгружаються. Я просто обрабатываю вход и выход в/из DLLProc. Может быть различия версий тотала и/или винды, напиши свои плиз.
Всё будет подвешено на хоткеи (уже в разработке). Также будет перехват cm_ExecuteDOS (сделано, но не включено).
Кнопки в тулбаре с библиотекой не прокатят, пробовал... (может кто знает как? (RunDll не предлагать))
6. Ты прав настроек пока нет (забыл пункт из меню удалить Smile ) А ты дотошный! Smile Это потом, надо пока простую функциональность добить...
А вот рекомендации добавь, для себя-то я всегда плаг перекомпилю, а кому-то мож что-то понадобиться изменить...
7. Попробую что-то сделать, но не обещаю, там бяка с отрисовкой виндой.
8. Я тоже понимаю, но как улучшить не знаю Sad . Если у кого есть идеи прошу...
9. А куда ты девять потерял? Smile
10. В смысле перекрывает? (При запуске, или потом?)
11. Бывает Smile


Вопросы:
1. Опиши пожалуйста хоткеи для каких действий лучше сделать?
Например:
Переключение вкладок консоли - CTRL+Tab
Закрыть консоль - CTRL+W
На весь экран - CTRL+o
и тд...
А то я что-то упущу и будет кто-то с ума сходить от лишних прикосновений к мыши...
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 08:55    Post subject: Reply with quote

ЗЫ да отлова выхода из консоли отключён.
Там много чего отключено... Писал на порыве энтузиазма. потом глянул на код, проверил утечки памяти, проверил на исключения и ужаснулся. Бросился всё рефакторить, пораскидал по модулям, теперь потихоньку собираю, пытаясь сразу отлавливать глюки.
Иначе потом не найду где и что глючит (уже был прецендент, два раза переписывал изменение размера панелек при перемещени заголовка, пока не нашёл глюк в ранее написаном модуле в абсолютно левой процедуре).

Кстати Очень волнующий меня вопрос:
При положении панелей одна над другой где лучше расположить консоль? Я никак не могу выбрать из 2х вариантов
1. Справа вид =| |
2. Снизу, как сейчас.
Множество за и против. Хочу узнать мнение других пользователей тотала. Или может сделать опционально?
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Sun Jun 03, 2007 10:57    Post subject: Reply with quote

Quote:
1. Навеяно Konsole из KDE (Linux)

Там Konsole потому что KDE - всё на K. В Тотале всё должно быть на T =)
Quote:
Насчёт софтинки - это сделать можно, но ты каждый раз будешь указывать окно тотала в которое встраиваться?

Элементарно. Вызывать GetForegroundWindow и проверять, тоталовское это окно или нет. Т.е. если прога запущена из под TC, то консоль должна встроиться в активное окно TC, иначе не делать ничего.
Quote:
Насчёт колонок не понял!!! Колонок быть ВООБЩЕ не должно!!! Надо просто установить плагин И ВСЁ... Никаких колонок и их сохранения. Я wdx потому и выбрал что они всегда при запуске подгружаються. Я просто обрабатываю вход и выход в/из DLLProc. Может быть различия версий тотала и/или винды, напиши свои плиз.

TC 7.0rc5, проверял на XP Prof SP2.

Могу ошибаться (ни кода ни справки под рукой нет), но вроде бы тотал никоим образом плагин грузить не должен, если в текущем наборе колонок нет полей этого плагина. У тебя в плагине вообще нет никаких полей, благодаря чему его вообще нельзя прописать. Когда в настройке колонок я жму на "+", TC поочерёдно обращается ко всем проинсталленым wdx, чтобы получить список полей, тут-то и происходит вызов DLLProc. Но после перезапуска TC плагин не вызывается (что подтверждено экспериментом Smile).

Quote:
Кнопки в тулбаре с библиотекой не прокатят, пробовал... (может кто знает как? (RunDll не предлагать))

Потому и стоит делать утилитой. Хоткеи TC сам может отлавливать, повесить их на вызов с параметрами несложно. Хотя если оставишь в виде dll (понимаю, так легче вторгаться в адресное пространство), можно сделать небольшую утилитку, которая будет просто-напросто вызывать в библиотеке специальную функцию включений/отключения. Идея ясна?
Quote:
А вот рекомендации добавь, для себя-то я всегда плаг перекомпилю, а кому-то мож что-то понадобиться изменить...

По текущему функционалу рекомендаций нет. Разве что перехватывать ввод стандартной командной строки TC.
Quote:
7. Попробую что-то сделать, но не обещаю, там бяка с отрисовкой виндой.

Угу. Это, в принципе, не критично. Но про вытаскивание консоли за пределы окна TC подумай (GetWindowRect в помощь Smile).
Quote:
8. Я тоже понимаю, но как улучшить не знаю . Если у кого есть идеи прошу...

С потерей фокуса окном TC ничего не поделать, по крайней мере я не могу сообразить, как это сделать без риска напартачить (пока единственное что придумал - патчить код TC прямо в памяти, но это будет ещё хуже чем сейчас).
Зато можно подумать, как возвращать фокус TC когда консоль не нужна. Хоткеем или ещё как-то...
Quote:
9. А куда ты девять потерял?

Бывает, когда вторые сутки без сна.
Quote:
10. В смысле перекрывает? (При запуске, или потом?)

1. Строка отключена (появляется при нажатии клавиш <-/->).
2. Запускаю плагин.
3. Жму стрелочку.
4. Строка появляется, но под панелью консольки. Кстати, при этом поверх консоли прорисоввывается сплиттер.
5. Дальше можно наблюдать забавный эффект, утащив консоль вверх (строка станет видна), и убрав строку - под панелью консоли станет "просвечивать" окно TC.
6. А если повторить все эти действия, сначала включив, а потом убрав элементы интерфейса, находящиеся "под" консолью, вообще можно добиться вот такого эффекта: http://wincmd.ru/files/tck3.gif
Quote:
1. Опиши пожалуйста хоткеи для каких действий лучше сделать?

Хоткеи желательно делать настраиваемые. Но по умолчанию я бы предложил:
Переключение вкладок консоли - Ctrl+Tab / Ctrl+Shift+Tab (обратный порядок)
Закрыть вкладку - Ctrl+W / Ctrl+Shift+W (все вкладки).
На весь экран/Обратно - Scroll Lock
Quote:
При положении панелей одна над другой где лучше расположить консоль? Я никак не могу выбрать из 2х вариантов

Хм. Я ничего предложить не могу, но интереса ради поигрался с этим режимом... как консолька ведёт себя в этой ситуации - брр... Может отстаься в середине окна, может сдивнуть панели TC влево...
В общем, жду отлаженного варианта.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Sun Jun 03, 2007 12:23    Post subject: Reply with quote

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

1. Быстрый просмотр (Ctrl+Q). Дело в том, что ТС каждый раз при переключении в этот режим убивает собственную панель, а потом создает ее заново. Ты это, не учитываешь и в результате консоль перекрывает панель. В семерке дело осложнилось еще окнами с деревьями. Которые могут появляться и исчезать, да еще имеют тот же класс, что и файловые панели.

2. ntvdm. Возможно, где-то у меня и отстается cmd.exe, но только потому, что гораздо больше сил отнял поиск и отстрел ntvdm-ов. Smile Ты, видимо, про них позабыл.

И еще пара вопросов.
Quote:
Я wdx потому и выбрал что они всегда при запуске подгружаються.
Поясни, пожалуйста, что ты имел в виду. Вообще-то в TC никакой плагин при запуске не подгружается. Поэтому я тоже для запуска твоего плагина каждый раз иду в настройки колонок. И вообще, проблема автоматической подгрузки плагинов - очень нужная вещь, на оффоруме обсуждалась. Но нормального, красивого решения так и не было найдено.

И еще вопрос - а как ты сделал Ctrl+C? Я много чего перепробовал - ничего не получалось.

А, чуть не забыл!
Quote:
При положении панелей одна над другой где лучше расположить консоль?
В любом случае надо делать опционально. Например, на широком экране, независимо от расположения файловых панелей, консоль лучше иметь сбоку.

=============================================
А во-вторых, о несколько более общей проблеме, связаной с твоим методом показа консоли. Хотя, возможно, это стоит выделить в отдельную тему, не знаю.

В свое время я тоже обдумывал вариант встроить консоль дополнительным окном, а не в файловую панель, но отказался от этой идеи. Дело в том, что это требует насильно изменять размеры окон ТС, и у меня моментально встал вопрос - а как быть если у меня установлено несколько таких плагинов, каждый из которых тоже хочет менять размеры окон ТС под себя? Как им договориться и не подраться за "место под солнцем"?
Причем вопрос этот был вовсе не абстракно-теоретический, потому что уже тогда у меня был плагин, который именно это и делал.

Когда началось тестирование ТС7 и выяснилось, что новые окна с деревьями сбивают с толку TConsole, я даже предлагал Гислеру решить проблему раз и навсегда - сделать дополнительный тип плагинов - плагинов, которые только получают от ТС часть пространства внутри окна ТС для своих окошек. Это может быть и консоль и дополнительная панель инструментов, да все что угодно. Гислер отказался.

Недавно мне снова очень захотелось добавить в ТС две вещи - дополнительный тулбар в нижней части ТС и засунуть куда-нибудь индикатор копирования из фона. И я начал думать о том, чтобы все-таки сделать надстройку над ТС, которая бы позволила такое "мирное сосуществование" различных плагинов.
Я пока еще не начал писать, только обдумываю эту мысль, но возможно тебе захочется сразу пойти таким путем - сделать некую универсальную оболочку и консоль, как частный случай плагина нового типа.
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 13:10    Post subject: Reply with quote

To D1P
Спасибо за участие, ты мне уже сильно помог! Но продолжим...
Quote:

В Тотале всё должно быть на T =)


Tonsole? Smile

Quote:
Элементарно. Вызывать GetForegroundWindow и проверять, тоталовское это окно или нет. Т.е. если прога запущена из под TC, то консоль должна встроиться в активное окно TC, иначе не делать ничего.


Хорошая идея, я и не допёр сразу.

Quote:

TC 7.0rc5, проверял на XP Prof SP2.
Могу ошибаться (ни кода ни справки под рукой нет), но вроде бы тотал никоим образом плагин грузить не должен, если в текущем наборе колонок нет полей этого плагина. У тебя в плагине вообще нет никаких полей, благодаря чему его вообще нельзя прописать. Когда в настройке колонок я жму на "+", TC поочерёдно обращается ко всем проинсталленым wdx, чтобы получить список полей, тут-то и происходит вызов DLLProc. Но после перезапуска TC плагин не вызывается (что подтверждено экспериментом ).

Проверено экспериментом, тотал (6.53) при запуске подгружает ВСЕ wdx в которых криворуко отработана загрузка.
В том числе мой Smile Smile Smile
А TC 7.0rc5 действительно нарушает мне всю функциональность! Smile Smile Smile Буду фиксить.


Quote:

(понимаю, так легче вторгаться в адресное пространство)

5 балов за сообразительность! Для меня очень важно перехватывать cm_ExecuteDos, я из-за байды и
решил писать именно плагин. Вторгнуться не проблема (спасибо Ms-Rem-у), но от криков антивирей и файрволов ламера какого-нить кондражка хватит, к тому же вопль антивиря бьёт по репутации...
Вот Джордан Рассел автор программы Inno Setup из-за пакера пострадал... Smile <url=http://www.podgoretsky.com/ftp/Docs/Misc/ExePack/ExePack.html>Упаковщики - ЗА и ПРОТИВ</url>
Поэтому плагин. Точка.


Quote:

По текущему функционалу рекомендаций нет. Разве что перехватывать ввод стандартной командной строки TC.

А вот об этом подробнее.
Сделан перехват ShellExecuteEx, принять параметры консоли не проблема, проблема в другом пример:
1.Консоль закрыта, выполняем из командной строки команду (dir к примеру)
2. Открываеться консоль выполняется команда.
А дальше? Закрыть консоль? При следующей команде из Ком.Строки открывать новую? Или передавать в открытую?
Вот с передачей в открытую и состоит проблема, WriteConsoleInput не работает для cmd. Есть идеи?
(Аттачимся к консоли по всем правилам, WriteConsoleOutput работает на ура).

Кстати товарисчь Гислер недоработал (видимо не любит он консоль) -
cmd у него всегда выполняется с параметром /C (закрыть после выполнения),
Для правильной реализации Shift+Enter (не закрывать после выполнения )
надо всего лишь выполнять с параметром /K.




7.
Переделал маленько, но может что-то новое вылезло. У меня такая мешанина VCL и API функций с постояными пересчётами положений размеров и зависимостей, что я просто боюсь лезть в уже отлаженый код.
А тормозит прорисовка из-за хука на оконную процедуру, на изменение размера ( WH_CALLWNDPROCRET, msg=M_EXITSIZEMOVE|WM_SIZE)
Можешь предложить альтернативу? (Может subclassing? Теорию знаю, но практики с чужими окнами = NULL )



Quote:

Но про вытаскивание консоли за пределы окна TC подумай (GetWindowRect в помощь ).

Пофиксим, пофиксим... Smile


Quote:

Зато можно подумать, как возвращать фокус TC когда консоль не нужна. Хоткеем или ещё как-то...

Будет хоткей, и при закрытии консоли.

Quote:

Хоткеи желательно делать настраиваемые.

Обижаешь, я про действия спрашиваю, а хоткеи уже для наглядности.



При положении панелей одна над другой консоль ведёт себя вообще непредсказуемо, и крэшит тотал. Я уже занялся этим вопросом. Так что лучше снизу или справа (слева)???


To VadiMGP

Quote:

2. ntvdm. Возможно, где-то у меня и отстается cmd.exe, но только потому, что гораздо больше сил отнял поиск и отстрел ntvdm-ов. Ты, видимо, про них позабыл.

Честно говоря я о них и не думал. Embarassed У тебя Win2k?


Quote:

Поясни, пожалуйста, что ты имел в виду. Вообще-то в TC никакой плагин при запуске не подгружается. Поэтому я тоже для запуска твоего плагина каждый раз иду в настройки колонок. И вообще, проблема автоматической подгрузки плагинов - очень нужная вещь, на оффоруме обсуждалась. Но нормального, красивого решения так и не было найдено.


По крайней мере в ТС 6.53 wdx при
Code:

function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar;
          Units:pchar;maxlen:integer):integer; stdcall;
begin //---------------------------------
 result:=0;
end;  //---------------------------------


function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte;
           maxlen,flags:integer):integer; stdcall;
begin //---------------------------------
result:=0;
end;  //---------------------------------
procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: //    Подключение ДЛЛ;
    DLL_PROCESS_DETACH://    Отключение длл ;
  end;
end;
begin
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end;



загружаеться всегда. Для TС 7.0rc5 это неверно.

Quote:

И еще вопрос - а как ты сделал Ctrl+C? Я много чего перепробовал - ничего не получалось.

Никак Laughing я тоже поигрался с пайпами и понял что это тупик, и как
настоящий программист пошёл через backdoor, просто устанавливаю родителя консольному окну, а потом операции через AttachConsole (см в MSDN), постояное отслеживание размеров итд, так что и консоль оригинальная и рыбку съел.

Quote:

Недавно мне снова очень захотелось добавить в ТС две вещи - дополнительный тулбар в нижней части ТС и засунуть куда-нибудь индикатор копирования из фона. И я начал думать о том, чтобы все-таки сделать надстройку над ТС, которая бы позволила такое "мирное сосуществование" различных плагинов. Я пока еще не начал писать, только обдумываю эту мысль, но возможно тебе захочется сразу пойти таким путем - сделать некую универсальную оболочку и консоль, как частный случай плагина нового типа.


Интересно... Надо подумать над этим....
В принципе возможно после переделки. Очень даже возможно....
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Sun Jun 03, 2007 13:38    Post subject: Reply with quote

Quote:
Поэтому плагин. Точка.

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

Quote:
Сделан перехват ShellExecuteEx, принять параметры консоли не проблема, проблема в другом пример:
1.Консоль закрыта, выполняем из командной строки команду (dir к примеру)
2. Открываеться консоль выполняется команда.

Если консоль открыта - перехватывает ввод, показывает вывод. Если консоль не открыта - выполнение стандартным способом.

Quote:
Вот с передачей в открытую и состоит проблема, WriteConsoleInput не работает для cmd. Есть идеи?

В TConsole, если не ошибаюсь, это как-то реализовано...

Quote:
Кстати товарисчь Гислер недоработал (видимо не любит он консоль) -
cmd у него всегда выполняется с параметром /C (закрыть после выполнения),
Для правильной реализации Shift+Enter (не закрывать после выполнения )
надо всего лишь выполнять с параметром /K.


Это элементарно фиксится, инструкции есть в TCKB.
Quote:
Можешь предложить альтернативу? (Может subclassing? Теорию знаю, но практики с чужими окнами = NULL )

Не отрисоввывать при каждом срабатывании хука. А только при окончании изменения размера.
Quote:
При положении панелей одна над другой консоль ведёт себя вообще непредсказуемо, и крэшит тотал. Я уже занялся этим вопросом. Так что лучше снизу или справа (слева)???

Для меня монопенисуально. Я ни разу в жизни этот режим не использовал.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 13:57    Post subject: Reply with quote

Quote:
В TConsole, если не ошибаюсь, это как-то реализовано

В TConsole cmd создаётся с перенаправлением STDIN и STDOUT (и STDERROR) в трубы (pipes), но в этом случае CTRL+C отдыхает.
Quote:

Это элементарно фиксится, инструкции есть в TCKB.

Не знал Embarassed
Quote:

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

M_EXITSIZEMOVE -окончание изменения размера

A вот что говорит MSDN о WM_SIZE
Code:


The WM_SIZE message is sent to a window after its size has changed.
A window receives this message through its WindowProc function.

Syntax
WM_SIZE
    WPARAM wParam
    LPARAM lParam;
   
Parameters

wParam
Specifies the type of resizing requested. This parameter can be one of the following values.
SIZE_MAXHIDE
Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXIMIZED
The window has been maximized.
SIZE_MAXSHOW
Message is sent to all pop-up windows when some other window has been restored to its former size.
SIZE_MINIMIZED
The window has been minimized.
SIZE_RESTORED
The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies.


Хук сам по себе грузит процесс.
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Sun Jun 03, 2007 14:27    Post subject: Reply with quote

Quote:
M_EXITSIZEMOVE -окончание изменения размера

У тебя msg=M_EXITSIZEMOVE|WM_SIZE, так? Значит хук срабатывает и на изменение размера тоже.
Quote:
Хук сам по себе грузит процесс.

Ну и забить тогда. Smile
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Sun Jun 03, 2007 14:47    Post subject: Reply with quote

Quote:
Tonsole?
Да пиши полностью - TotalConsole. Smile
Quote:
...а потом операции через AttachConsole...
А, тогда конечно Ctrl+C будет работать. Но тогда ясно, что WriteConsoleInput не работает! Wink Я тоже сначала аттачил консоль и WriteConsoleInput у меня тоже не работал. Это была, пожалуй, главная причина, почему я отказался от AttachConsole.
Второй причиной было то, что я не нашел способа перейти в консоль (или выйти из нее) без мыши? А у тебя с этим как? Ну и еще по мелочам коечто...

Quote:
У тебя Win2k?
Нет, у меня XP. А какая разница?

А как ты сделал перехват ShellExecuteEx?
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 18:54    Post subject: Reply with quote

TotalConsole? Звучит прияино! Спасибо.

Quote:

Второй причиной было то, что я не нашел способа перейти в консоль (или выйти из нее) без мыши? А у тебя с этим как?

глобальный хук + SetForegroundWindow рулит. Пока отключено, но уже реализовано, что не может не радовать...

Quote:
А как ты сделал перехват ShellExecuteEx

Поищи на wasm.ru цикл статей (3 шт) "Перехват API функций в Windows NT", автор ms-rem.
Quote:
WriteConsoleInput у меня тоже не работал.

Мда криворукость Микрософтовцев налицо. Я копал cmd.exe там подвеска на ReadConsoleW + работа с msvcrt.dll
дрянь та ещё....

Quote:
Нет, у меня XP. А какая разница?

Дело в том что я ntvdm только в Win2k и встречал. Поподробнее плиз
об этой бяке (что это такое, где встречаеться, как лечить)
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Sun Jun 03, 2007 20:00    Post subject: Reply with quote

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

А ntvdm с win2k не связан. Это процесс создаваемый для обслуживания 16-битного кода. Если в консоли будет попытка запустить 16-битную программу, то для нее будет создан отдельный процесс ntvdm и уже он запустит эту программу. При выходе надо бы их всех отлавливать и убивать.
Back to top
View user's profile Send private message
B4rr4cuda



Joined: 03 Jun 2007
Posts: 376
Location: Россия, Москва

Post (Separately) Posted: Sun Jun 03, 2007 21:21    Post subject: Reply with quote

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


Пускаем глобальный хук на клаву, при входе в длл проверяем процесс,
если ТС или наша консоль (по списку пидов) то продолжаем, иначе выходим. Проверенно - работает.

Quote:
А ntvdm с win2k не связан. Это процесс создаваемый для обслуживания 16-битного кода. Если в консоли будет попытка запустить 16-битную программу, то для нее будет создан отдельный процесс ntvdm и уже он запустит эту программу. При выходе надо бы их всех отлавливать и убивать.

Понял, сделаю.
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
Goto page 1, 2, 3 ... 17, 18, 19  Next
Page 1 of 19

 
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