[ Статья ] Находим местоположение WINCMD.INI
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Написание плагинов для Total Commander

#1: [ Статья ] Находим местоположение WINCMD.INI Author: mozersLocation: с Нижнего PostPosted: Sat Feb 05, 2005 08:43
    —
Уважаемые авторы замечательных плагинов и полезных утилит!
Большинству из ваших программ требуется указание точного местоположения файла TOTALCMD.EXE и INI файлов настройки Коммандера.

Каждый автор ищет решение этой проблемы по своему:
Одни (самые умные Wink вообще ничего не ищут, а требуют от пользователя вручную заводить эти пути. Решение, конечно, крайне примитивное. И пользователь может ошибиться с указанием путей, да и тулза оказывается жестко привязанной к одному месту. Если пользователь имеет несколько настроенных профилей ТС, то он вынужден держать несколько копий вашей программы - для каждого профиля отдельно Sad
Другие (слава Богу - таких уже почти не осталось) тупо считают, что эти файлы могут называться только wincmd.ini и wcx_ftp.ini и лежат они исключительно в %WINDIR%. Просто нет слов...
Третьи (кто посообразительней), пытаются анализировать содержимое ветки [HKEY_CURRENT_USER\Software\Ghisler\Total Commander] и увы, тоже не всегда бывают правы.
Этой мини-статейкой я попытаюсь проанализировать опыт тех и других и сделать некоторые выводы. Надеюсь они пригодятся вам в дальнейших разработках.

Итак, начнем с самого простого - TOTALCMD.EXE
Он ВСЕГДА находится по %COMMANDER_PATH%/TOTALCMD.EXE
Учтите только что %COMMANDER_PATH% имеется в переменных окружения только тогда, когда ваша прога стартует из ТС. Для авторов плагинов это всегда - факт, утилита же может стартовать и не из ТС.
Уважаемые авторы, заставьте своего пользователя хотя бы в первый раз запустить вашу тулзу из ТС - она запишет найденный путь, и в дальнейшем ее можно будет стартовать откуда угодно. Поверьте, 99% пользователей будут запускать вашу утилиту именно из ТС, а автоматически найденный ею путь будет лишним доказательством вашего профессионализма!

Теперь про поиск INI файлов
Единственно правильный вариант на сегодня:
  1. Анализируем командную строку ТС, ищем в ней ключи /I и /F и считываем пути к INI оттуда.
  2. Если в ком.строке ключи не найдены, то проверяем, есть ли в файле %COMMANDER_PATH%/wincmd.ini ключ UseIniInProgramDir (Еще одна беда, свалившаяся на нашу голову вместе с версией 6.5). Если есть - то ищем INI файлы в соответствии со значением этого ключа (подробности - в HELP).
  3. Если там - пусто, то смотрим в [HKEY_CURRENT_USER\Software\Ghisler\Total Commander].
  4. Если и там - пусто, то INI лежат в %WINDIR% и названия их - wincmd.ini и wcx_ftp.ini
Важные замечания
  1. Ключи ком.строки /I и /F могут быть в любом регистре, причем второй по очереди ключ может быть и без слеша.
  2. Пути в ключах ком.строки и реестра могут задаваться как полным путем, так и относительным. В путях можно использовать любые переменные окружения, включая %COMMANDER_PATH%. Пути могут быть заданы и как LongNames и в формате 8.3
  3. Если пути к файлам заданы явно (ключах ком.строки или реестре), то файлы инициализации могут иметь ЛЮБОЕ имя.
Ну а теперь - поподробнее про анализ ком.строки
Для плагина TC все решается сравнительно просто. А все потому, что он выполняется внутри процесса TC и поэтому получить командную строку можно просто вызвав API-шную функцию GetCommandLine. Кто понимает, о чем я говорю, тому не составит труда извлечь из нее нужные параметры.
Для внешней утилиты все значительно сложнее Sad Решается эта проблема с использованием ловушек (hooks), труб (pipes) и прочих мудреных вещей. Пройти все круги ада и построить рабочую программу смог только Alexander Asyabrik aka Shura (я о ReloadTC). Других, увы, не знаю Sad

Так вот обломали нас в самом начале пути Sad
Однако, есть возможность получить вожделенные пути и несколько иным способом, если мы вспомним о том, что сам ТС прекрастно осведомлен о местоположении своих INI файлов - достаточно взглянуть на окошко "About".
Итак, вкратце: Находим окно активного экземпляра ТС, шлем ему через SendMessage команду cm_About, считываем через GetWindowText драгоценную инфу, закрываем окошко About. Если на время выполнения этой процедуры запретить обновление окна, то получится почти незаметно Wink
Намеренно не говорю о подводных камнях (а то обсуждать будет нечего Wink, а вот положительные стороны данного подхода - налицо. Одним махом находим местоположения обоих INI файлов совершенно независимо от того, как и где задал их пользователь.

P.S. Всего этого разговора могло бы и не быть, если бы глубокоуважаемый Christian Ghisler ввел в обиход пару псевдо-переменных
$MAIN_INI и $FTP_INI (подобно имеющимся уже $MYPICTURES, $LOCAL_APPDATA, $COMMON_APPDATA, и т.п.). Ему то это сделать - плевое дело!
Представьте, как было бы здорово!
Как вам, к примеру, такая команда в меню "Запуск" ?:
Code:

  Команда: disk:/path/MySuperEditor.exe
Параметры: $MAIN_INI $FTP_INI

Кому так же больно как мне - отпишите Орлу нашему...

#2:  Author: TSergey PostPosted: Sat Feb 05, 2005 19:01
    —
Может сюда же выложить функции для плагинов?
Сам сразу и начну:

Code:
function GetFtpIniFileName: string;
var
  s, s1, s2 :string;
  a: array [0..MAX_PATH] of char;
  i, j: integer;
  EscEn, QuoteStr, UseProgDir: boolean;
  c: char;
  reg: TRegistry;
begin
  // Разбор командной строки
  s := StrPas(GetCommandLine);

  i := pos('f=', s);
  if i  = 0 then  i := pos('F=', s);

  s1 := '';

  if i > 0
  then begin
    i := i + 2;
    EscEn := false;
    QuoteStr := false;
    j := length(s);
    // Разворачиваем параметр с поддержкой кавычек
    while (i <= j) do
    try
      c := s[i];
      case c of
        #9, ' ':
          if QuoteStr
          then if EscEn
            then begin
              s1 := s1 + '\'+ c;
              EscEn := false;
            end
            else s1 := s1 + c
          else break;

        '"':
          if EscEn
          then s1 := s1 + '"'
          else QuoteStr := not QuoteStr;

        '\':
          if EscEn
          then begin
            s1 := s1 + '\';
            EscEn := false;
          end
          else EscEn := true;

        else if EscEn
          then begin
            s1 := s1 + '\'+ c;
            EscEn := false;
          end
          else s1 := s1 + c
      end;
    finally
      inc(i);
    end;

    if EscEn then s1 := s1 + '\';

  end;


  UseProgDir := false;

  if s1 = ''
  then begin
    // Обрабатываем каталог Тотал Командера
    s := '%COMMANDER_PATH%\wincmd.ini';
    s2 := '%COMMANDER_PATH%\wcx_ftp.ini';

    ExpandEnvironmentStrings(PChar(s), a, MAX_PATH);
    i := GetPrivateProfileInt('Configuration', 'UseIniInProgramDir', 0, a);
    UseProgDir := (i and 2) <> 0;
    if (i and 4) <> 0 then s1 := s2;
  end;

  if s1 = ''
  then begin
    // Проверяем реестр

    try
      Reg := TRegistry.Create(KEY_READ);
      try
        Reg.RootKey := HKEY_CURRENT_USER;
        if Reg.OpenKeyReadOnly('\Software\Ghisler\Total Commander')
        then s1 := Reg.ReadString('FtpIniName')
        else s1 := '';
      finally
        Reg.Free;
      end;
    except
      s1 := '';
    end;

    if (s1 = '')
    then if UseProgDir
    then s1 := s2
    else s1 := 'wcx_ftp.ini';
  end;

  if (copy(s1, 1, 2) = '.\')
  then begin
    delete(s1, 1, 2);
    s1 := '%COMMANDER_PATH%\' + s1;
  end;

  ExpandEnvironmentStrings(PChar(s1), a, MAX_PATH);
  result := strpas(a);
end;



ЗЫ. Вроде проверил работу на своем плагине, но ошибки могут быть.
ЗЗЫ. Анекдот про "длинный_мнемоничный_идентификатор_номер_один" - знаю. Twisted Evil


Last edited by TSergey on Tue Feb 15, 2005 08:31; edited 2 times in total

#3:  Author: SCHMasterLocation: Киев PostPosted: Sun Feb 06, 2005 04:59
    —
%USERPROFILE%
Еще такая хрень бывает... Под ХР и 2К.

#4:  Author: mozersLocation: с Нижнего PostPosted: Sun Feb 06, 2005 14:03
    —
SCHMaster
Угу. С %USERPROFILE%, как, впрочем, и со всеми остальными переменными окружения (%TEMP%, %ProgramFiles%, ...) все однозначно.
Если они присутствуют в ключах ком.строки или реестра (в ком.строке, в отличии от реестра, длинные пути надо обязательно задавать в кавычках), то Тотал их понимает, а значит и ваша прога должна их знать...
В общем все учесть - с ума сойти можно... И я все больше склоняюсь к тому, чтоб грабить инфу с About.

#5:  Author: NikLocation: Киров PostPosted: Sun Feb 06, 2005 15:13
    —
В интерфейсе Lister-плагинов есть такая структура:

Code:
 
 type

  tListDefaultParamStruct=record

    size,

    PluginInterfaceVersionLow,

    PluginInterfaceVersionHi:longint;

    DefaultIniName:array[0..MAX_PATH-1] of char;

  end;


Так вот, есть извлечь путь к DefaultIniName, то получите каталог, где лежат Ini файлы TC. И никакой лишней мороки... Если конечно имена файлов стандартные.

#6:  Author: CaptainFlintLocation: Москва PostPosted: Sun Feb 06, 2005 15:52
    —
SAM
Грабить из About'а может не получиться, если именно в это время, например, в Тотале открыт модальный диалог. В лучшем случае ничего не произойдёт, в худшем - крэш.
Nik
Это путь к INI-файлу настроек самого плагина, а не всего Тотала.

#7: Пример кода Author: Alextp PostPosted: Sun Feb 06, 2005 18:37
    —
Предлагаю Delphi-функции нахождения путей к wincmd.ini и wcx_ftp.ini.
Из исходника TC Plugins Manager, в нем все работает. Если путь, возвращаемый функцией, не найден, то программа запрашивает путь у пользователя.

Модули RegProc.pas/SProc.pas, которые здесь используются, высылаются емейлом.

Code:
function tcDefDir: string;
begin
  //поправка SAM-а, чтобы путь брался из запущенного TC
  Result:= SProc.SExpandVars('%COMMANDER_PATH%');
  //брать из реестра
  if Pos(':\', Result)=0 then
  Result:=
    GetRegKeyStr(HKEY_CURRENT_USER, 'Software\Ghisler\Total Commander', 'InstallDir',
    GetRegKeyStr(HKEY_LOCAL_MACHINE, 'Software\Ghisler\Total Commander', 'InstallDir',
      'C:\TotalCmd'));
end;

function tcDefExe: string;
begin
  Result:= tcDefDir+'\Totalcmd.exe';
end;

function tcDefIni: string;
begin
  Result:=
    GetRegKeyStr(HKEY_CURRENT_USER, 'SOFTWARE\Ghisler\Total Commander', 'IniFileName',
    GetRegKeyStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\Ghisler\Total Commander', 'IniFileName',
    'wincmd.ini'));
  if Pos('\', Result)=0 then Insert('%windir%\', Result, 1);
  //если путь записан как ".\Wincmd.ini":
  if Pos('.\', Result)=1 then
    SReplace(Result, '.', tcDefDir);
  Result:= SExpandVars(Result);
end;

function tcDefIniFtp: string;
begin
  Result:=
    GetRegKeyStr(HKEY_CURRENT_USER, 'SOFTWARE\Ghisler\Total Commander', 'FtpIniName',
    GetRegKeyStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\Ghisler\Total Commander', 'FtpIniName',
    'wcx_ftp.ini'));
  if Pos('\', Result)=0 then Insert('%windir%\', Result, 1);
  //если путь записан как ".\Wincmd.ini":
  if Pos('.\', Result)=1 then
    SReplace(Result, '.', tcDefDir);
  Result:= SExpandVars(Result);
end;


Last edited by Alextp on Wed Oct 19, 2005 23:40; edited 2 times in total

#8:  Author: TSergey PostPosted: Sun Feb 06, 2005 18:43
    —
Alextp, а где обработка ситуации, когда ini-файлы передаются в командной строке?

SCHMaster, SAM: Все переменные легко разворачиваются в функции ExpandEnvironmentStrings.

#9:  Author: Alextp PostPosted: Sun Feb 06, 2005 18:52
    —
TSergey wrote:
Alextp, а где обработка ситуации, когда ini-файлы передаются в командной строке?

Нету. Smile

Подразумевается, что как и в комстроке TC, пользователь сам укажет в PlugMan-е этот ini-файл (через кнопку "Обзор").

#10:  Author: TSergey PostPosted: Sun Feb 06, 2005 18:54
    —
Alextp wrote:
TSergey wrote:
Alextp, а где обработка ситуации, когда ini-файлы передаются в командной строке?

Нету. Smile

Подразумевается, что как и в комстроке TC, пользователь сам укажет в PlugMan-е этот ini-файл (через кнопку "Обзор").
А смысл заставлять пользователя что-то лишнее вводить, если есть вполне нормальный автоматический способ?

#11:  Author: Alextp PostPosted: Sun Feb 06, 2005 18:57
    —
Ну, ты прав, надо бы еще в ф-ции tcDefIni обрабатывать комстроку TC...

#12:  Author: NikLocation: Киров PostPosted: Sun Feb 06, 2005 20:45
    —
CaptainFlint wrote:

Nik
Это путь к INI-файлу настроек самого плагина, а не всего Тотала.


Да, но по-умолчанию Total предлагает размещать файлы настройки плагина в той же папке, где и свои собственные... Проверено на AmpView: ранние версии читали цвет фона Lister из файлов конфигурации, а путь к ним я определял именно таким способом...

#13:  Author: Gosha PostPosted: Sun Feb 06, 2005 21:57
    —
Разрешите высказать свое мнение.
Если кому либо было не лень писать командную строку для запуска TC и в ней указать полный путь до INI файлов, то может его не очень смутит тот факт, что левые программы не всегда находят их. И может быть им даже будет также не лень указать где эти файла всетаки находятся.

#14:  Author: TSergey PostPosted: Sun Feb 06, 2005 22:12
    —
Gosha wrote:
Разрешите высказать свое мнение.
Если кому либо было не лень писать командную строку для запуска TC и в ней указать полный путь до INI файлов, то может его не очень смутит тот факт, что левые программы не всегда находят их. И может быть им даже будет также не лень указать где эти файла всетаки находятся.
Хороший подход: пользователи будут довольны и благодарны. Twisted Evil

#15:  Author: mozersLocation: с Нижнего PostPosted: Mon Feb 07, 2005 00:25
    —
CaptainFlint
Quote:
Грабить из About'а может не получиться, если именно в это время, например, в Тотале открыт модальный диалог

Да вроде такой проблемы не заметил :-/ Ничего не вешается, независимо от открытых окон. Попробуй сам...

Nik
Лишь путь Sad А имя?

Gosha
Quote:
Если кому либо было не лень писать командную строку для запуска TC

Если кому то было не лень написать в своем плагине/утилите процедуру обнаружения пути к INI файлам, то он получил еще плюсом добрую половину благодарных пользователей, покоренных мастерством автора.
Кстати, по моим данным, у более чем 50 тысяч пользователей (большинство из которых - новички), путь к INI задается с ярлыка и выглядит приблизительно так:
С:\Program Files\Total Commander XP\Profiles\Prof\main.ini

А, впрочем, не хватает ума определить правильно - не определяйте вообще! Лучше позволить пользователю задать путь вручную, чем мучится с неработоспособной прогой.

#16:  Author: Gosha PostPosted: Mon Feb 07, 2005 09:30
    —
SAM
Определить на 100%, где находятся эти файлы нельзя изначально!!!
Приведу несколько примеров, которые это продемонстрируют.
1. Записываем в [HKEY_CURRENT_USER\Software\Ghisler\Total Commander] IniFileName=
Quote:
(пустую строку). TC при этом ни чего не говоря запускается, но ни какого ini файла не создает, а следовательно и найти его нет ни какой возможности.
2. Запишем в этот же ключ недопустимое имя файла, т.е. в имени которого присутсвую не допустимые для имени файла символы. TC при этом весело запускается, но опять ни какого ini файла не создает, а следовательно см. п1.

Тоже происходит если использовать
Quote:
кривые имена файлов
в качестве параметров в командной строке.

#17:  Author: TSergey PostPosted: Mon Feb 07, 2005 09:56
    —
Gosha, с таким подходом можно дойти до стояния: Windows полностью глюкавый и вообще не работает.
Или в качестве INI-файла подсунут файл свопа.
Продолжать можно бесконечно.

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

#18:  Author: mozersLocation: с Нижнего PostPosted: Mon Feb 07, 2005 10:22
    —
Gosha
ОК. Давайте исключим из рассмотрения те варианты, при которых сам ТС нормально работать не может.
Что это за работа, если при любом изменении настроек от выдает "Error: Cannot write ! Please remove the write protection!"?

TSergey
Quote:
никакие оправдания не могут прикрыть лень программиста

Суров ты Twisted Evil

#19:  Author: TSergey PostPosted: Mon Feb 07, 2005 10:25
    —
SAM wrote:
TSergey
Quote:
никакие оправдания не могут прикрыть лень программиста

Суров ты Twisted Evil
Дык. Я сам такой же: лентяй еще тот.
Вообще программисты - это самые продвинутые лентяи. Ну кто еще, из-за того, что ему лень раз в день нажать кнопочку, напишет программу, которая будет делать это за него? Twisted Evil

#20:  Author: Gosha PostPosted: Mon Feb 07, 2005 12:09
    —
Тогды можно предложить следующию схему (актуальна, как для пог так и для плугинов)

1. Во время запуска определяем родительский процесс на принадлежность к TC (т.е. из TC ли нас запустили). По наличию %commander_path% определять не рекомендуется (особенно для плугинов)
1.1. Если да, то вытягивает командную строку и парсим ее
1.1.1 Пропарсили удачно и INI файл найден, то заканчиваем поиск.
1.1.2 В параметрах командной строки файла нет, тогда пытаемся искать стандартным образом (HKCU,HKLM,%windir%\wincmd.ini,сохраненные настройки)
1.1.2.1 Поиск прошел удачно. Заканчиваем процесс.
1.1.2.2 Неудачно. Предлагаем пользователю показать файл самостоятельно и заканчиваем поиск с любым результатом.
1.2. Если нет пытаемся стандартным образом определить местоположение (HKCU,HKLM,%windir%\wincmd.ini,сохраненные настройки)
1.2.1 Поиск прошел успешно. Заканчиваем.
1.2.2 Если неудачно, то предлагаем запустить прогу из под TC.

2. Если все таки файл так и найден, можно предложить поиск простым перебором всех INI файлов в системе. (т.е. Поиск файла по диску)

#21:  Author: Gosha PostPosted: Tue Feb 08, 2005 09:32
    —
А теперь к делу.
Кто нить знает, как извлечь командную строку любого процесса, а то кроме создания дочернего потока в голову пока ни чего не приходит.

#22:  Author: NikLocation: Киров PostPosted: Tue Feb 08, 2005 15:28
    —
[quote="SAM"]

Nik
Лишь путь Sad А имя?

Эта функция предназначена для ini-файлов плагинов, поэтому возвращает строку: путь_к_файлу_настройки\имя_плагина.
Как я уже говорил, если убрать имя и вставить вместо него wincmd.ini, то получится полный путь... Если имя wincmd.ini изменено, то такой вариант не подойдет...

#23:  Author: TSergey PostPosted: Tue Feb 15, 2005 08:38
    —
Из радостей значений в реестре.
Не знаю кому пришло в голову так делать (точнее: догадываюсь, но не понимаю за что?): в реестре значения
Code:
[HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"=".\wincmd.ini"
"FtpIniName"=".\wcx_ftp.ini"

означают ничто иное, как:
Code:
[HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"="%COMMANDER_PATH%\wincmd.ini"
"FtpIniName"="%COMMANDER_PATH%\wcx_ftp.ini"


Сама по себе запись .\wcx_ftp.ini означает взять файл в текущем каталоге, но ТС это понимает по своему.

ЗЫ. Изменил код в своем сообщении http://forum.wincmd.ru/viewtopic.php?p=1780#1780

#24:  Author: mozersLocation: с Нижнего PostPosted: Tue Feb 15, 2005 11:13
    —
TSergey
Точка в пути - это лишь один из многочисленных вариантов...
Все вы ребята - умные и проблему решаете самым трудным способом.
А я уже говорил о великом множестве ньюансов... И все их надо учесть...
А мы - по простому Wink Немного через одно место. Но... работает всегда правильно Smile
http://total.altruistic.ru/files/GetTotalINI.zip
(спасибо Shura за дельные коррективы)

#25:  Author: VolniyLocation: Местный PostPosted: Tue Feb 15, 2005 11:31
    —
TSergey wrote:
Из радостей значений в реестре.
Не знаю кому пришло в голову так делать (точнее: догадываюсь, но не понимаю за что?):

Эта фича появилась с версии 4.54 (16.07.01), когда переменная %COMMANDER_PATH% еще не существовала (та была введена только в версии 6.0 (17.11.03)).
Quote:
Сама по себе запись .\wcx_ftp.ini означает взять файл в текущем каталоге, но ТС это понимает по своему.

А какой, собственно, каталог является текущим для командера при его запуске? Да свой же, родимый Laughing По крайней мере именно из него он по-дефолту грузит необходимые библиотеки и другое свое файло (totalcmd.inc, иконки, библиотеки архиваторов, описание панелей инструментов и пр.).

#26:  Author: TSergey PostPosted: Tue Feb 15, 2005 11:36
    —
Volniy wrote:
А какой, собственно, каталог является текущим для командера при его запуске?
Тот, который я укажу в ярлыке, а не:
Volniy wrote:
Да свой же, родимый Laughing



ЗЫ. Со времен появления МелкоМагка нелюблю программы, которые считают себя умнее пользователя.

#27:  Author: vserd PostPosted: Mon Jun 13, 2005 18:41
    —
Quote:

А какой, собственно, каталог является текущим для командера при его запуске?

Тот, который я укажу в ярлыке, а не:

Да свой же, родимый

Если в ярлыке запуска указаны полные пути к INI, тогда, берет из них как и ожидается. А если нет, тогда из %CommanderPath% в не зависимости от указания текущей директории.

Пример 1:
Создаем ярлык на рабочем столе.
Прописываем ему командную строку C:\TC\Totalcmd.exe /i=.\dir1\my.ini, в качестве рабочей директории ставим D:\ запускаем коммандер, смотрим на пути: C:\TC\dir1\my.ini.

пример 2:
Создаем ярлык на рабочем столе.
Прописываем ему командную строку C:\TC\Totalcmd.exe /i=..\dir1\my.ini, в качестве рабочей директории ставим D:\1\ запускаем коммандер, смотрим на пути: ..\dir1\my.ini.

Так что можно заявлять как о баге, но лучше не нужно. Пока нет нормального программного интерфейса к этим пременным, пускай будет такое определение чем "правильное".

Давайте Кристиана попробуем порасспрашивать на эту тему. Особенно когда передается относительный путь из ярлыка? Кто может грамотно написать на английском текст с проблемой? (у меня только чтение по английскому, писать не могу, и на слух не воспринимаю :((( )

#28:  Author: NikLocation: Киров PostPosted: Mon Jun 13, 2005 20:08
    —
А может попросить Гислера - пусть внедрит в плагинный интерфейс функцию для определения путь к ini-файлу? Это дело-то на пару минут...

#29:  Author: mozersLocation: с Нижнего PostPosted: Mon Jun 13, 2005 20:30
    —
2Nik
Насколько я знаю, Гислер пообещал (еще до выхода 6.53) сделать пару переменных $MAININI и $FTPINI.
Но как известно - обещанного три года ждут Sad

#30:  Author: mozersLocation: с Нижнего PostPosted: Tue Jun 14, 2005 16:58
    —
Уже известный вам архивчик дополнился примером на Delphi (автор - Vladimir Serdyuk)
Алгоритм тот же - путь к файлам INI извлекается из появляющегося на мгновение окна About.
Рекомендуется все таки записать найденнные пути куда нибудь (лучше - в качестве относительных) чтобы не дергать то и дело дракона за хвост Wink

#31:  Author: zvyagaaa PostPosted: Thu Sep 17, 2009 07:50
    —
кто-нибудь может выложить файлик господина mozers, а то скачать его нет возможности никакой.

#32:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Sep 17, 2009 08:35
    —
zvyagaaa
Этот сайт давно уже мёртвый. Вообще эта штука есть в архиве tcutil.7z здесь. Я оттуда и вытаскивал. Могу выложить, конечно, но там не последняя версия. Автор вполне доступен, могу связаться и попросить куда-нибудь перезалить.

#33:  Author: MaximusLocation: Украина, Кировоградская обл., г. Знаменка PostPosted: Thu Sep 17, 2009 08:37
    —
Если по поводу нахождения файла конфигурации, то воспользуйся псевдопеременной %COMMANDER_INI%.

#34:  Author: Lumen PostPosted: Fri May 21, 2010 03:24
    —
Сори за некрофилию, и возможно боян, но вот мой вариант получения командной строки Total Commander'a. Программа должна быть запущена из самого TC, то есть чтоб родителем был именно Total Commander. Если вкратце, то командная строка читается из структуры PEB процесса-родителя. Разумеется работать будет на лишь системах семейства NT. Однако можно переписать функцию поиска pID'a Total Commander'a (с помощью ToolHelp32 API или PSAPI) и данный пример станет более универсальным. Собственно сам пример можно взять здесь.
Ах да, пример на Delphi 7

#35:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Wed May 26, 2010 19:20
    —
Файл не качается. Просьба залить на файлообменник.

#36:  Author: Tol!kLocation: Арзамас PostPosted: Wed May 26, 2010 20:17
    —
http://depositfiles.com/files/q20yyqn2l

#37:  Author: MVVLocation: Ростов-Дон PostPosted: Wed May 26, 2010 21:05
    —
А не проще будет написать WDX-плагин для рестарта? У него будет командная строка через GetCommandLine, он может подключиться к списку обработчиков сообщений главного окна и на определенное из них запускать рестартер, передавая ему командную строку. Это будет очень простой плагин.

#38: подскажите как привязать инишку к лешке Author: ravulik PostPosted: Wed Jan 19, 2011 00:08
    —
я не совсем понял что где и как менять

#39:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 19, 2011 00:25
    —
ravulik
Ещё раз. Поисковая строка там хорошо видна?
Всё уже давно объяснено с мыслимыми и немыслимыми (для тех кто не понял) подробностями. Всего один пример. Больше никаких объяснений не предполагается за ненадобностью. И уж точно — не в этой теме и не на этом подфоруме.



Total Commander -> Написание плагинов для Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group