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 

Single Post  Topic: Запрос на тестирование плагина (Консоль для ТС) 
Author Message
B4rr4cuda



PostPosted: 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:

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


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


Powered by phpBB © 2001, 2005 phpBB Group