B4rr4cuda

|
Posted: Sun Jun 03, 2007 13:10 Post subject: |
|
|
To D1P
Спасибо за участие, ты мне уже сильно помог! Но продолжим...
Quote: |
В Тотале всё должно быть на T =)
|
Tonsole?
Quote: | Элементарно. Вызывать GetForegroundWindow и проверять, тоталовское это окно или нет. Т.е. если прога запущена из под TC, то консоль должна встроиться в активное окно TC, иначе не делать ничего. |
Хорошая идея, я и не допёр сразу.
Quote: |
TC 7.0rc5, проверял на XP Prof SP2.
Могу ошибаться (ни кода ни справки под рукой нет), но вроде бы тотал никоим образом плагин грузить не должен, если в текущем наборе колонок нет полей этого плагина. У тебя в плагине вообще нет никаких полей, благодаря чему его вообще нельзя прописать. Когда в настройке колонок я жму на "+", TC поочерёдно обращается ко всем проинсталленым wdx, чтобы получить список полей, тут-то и происходит вызов DLLProc. Но после перезапуска TC плагин не вызывается (что подтверждено экспериментом ).
|
Проверено экспериментом, тотал (6.53) при запуске подгружает ВСЕ wdx в которых криворуко отработана загрузка.
В том числе мой
А TC 7.0rc5 действительно нарушает мне всю функциональность! Буду фиксить.
Quote: |
(понимаю, так легче вторгаться в адресное пространство)
|
5 балов за сообразительность! Для меня очень важно перехватывать cm_ExecuteDos, я из-за байды и
решил писать именно плагин. Вторгнуться не проблема (спасибо Ms-Rem-у), но от криков антивирей и файрволов ламера какого-нить кондражка хватит, к тому же вопль антивиря бьёт по репутации...
Вот Джордан Рассел автор программы Inno Setup из-за пакера пострадал... <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 в помощь ).
|
Пофиксим, пофиксим...
Quote: |
Зато можно подумать, как возвращать фокус TC когда консоль не нужна. Хоткеем или ещё как-то...
|
Будет хоткей, и при закрытии консоли.
Quote: |
Хоткеи желательно делать настраиваемые.
|
Обижаешь, я про действия спрашиваю, а хоткеи уже для наглядности.
При положении панелей одна над другой консоль ведёт себя вообще непредсказуемо, и крэшит тотал. Я уже занялся этим вопросом. Так что лучше снизу или справа (слева)???
To VadiMGP
Quote: |
2. ntvdm. Возможно, где-то у меня и отстается cmd.exe, но только потому, что гораздо больше сил отнял поиск и отстрел ntvdm-ов. Ты, видимо, про них позабыл. |
Честно говоря я о них и не думал. У тебя 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? Я много чего перепробовал - ничего не получалось.
|
Никак я тоже поигрался с пайпами и понял что это тупик, и как
настоящий программист пошёл через backdoor, просто устанавливаю родителя консольному окну, а потом операции через AttachConsole (см в MSDN), постояное отслеживание размеров итд, так что и консоль оригинальная и рыбку съел.
Quote: |
Недавно мне снова очень захотелось добавить в ТС две вещи - дополнительный тулбар в нижней части ТС и засунуть куда-нибудь индикатор копирования из фона. И я начал думать о том, чтобы все-таки сделать надстройку над ТС, которая бы позволила такое "мирное сосуществование" различных плагинов. Я пока еще не начал писать, только обдумываю эту мысль, но возможно тебе захочется сразу пойти таким путем - сделать некую универсальную оболочку и консоль, как частный случай плагина нового типа. |
Интересно... Надо подумать над этим....
В принципе возможно после переделки. Очень даже возможно.... |
|