Сообщение для смены каталога

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

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

Ответить
Аватара пользователя
Sanik
Сообщения: 3
Зарегистрирован: Сб янв 15, 2005 11:49
Откуда: Киев, Укаина

Сообщение для смены каталога

Сообщение Sanik »

Никак не могу заставить Total сменить каталог.
Делаю это так:

procedure TForm1.Button1Click(Sender: TObject);
var
aCopyData: TCopyDataStruct;
hTargetWnd: HWND;
begin
with aCopyData do
begin
dwData := 0;
cbData := StrLen(PChar(Edit1.Text)) + 1;
lpData := PChar(Edit1.Text);
end;
hTargetWnd := FindWindow('TTOTAL_CMD', nil);
if hTargetWnd <> 0 then
sendmessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
else
ShowMessage('Total Commander не найден');
end;

Может надо еще что-то добавить?
VNavigator
Сообщения: 2
Зарегистрирован: Вс фев 26, 2006 22:06
Контактная информация:

Сообщение VNavigator »

Чтото я никак не пойму, как работает такая штука:

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

function FsExecuteFile (MainWin : thandle; RemoteName, Verb : PChar) : integer; stdcall;
var
  quotestr:string;
  CommandStr:string;
begin
  ...
  if Pos('quote ',Verb)>0 then begin
    QuoteStr:=Copy(Verb,7,MaxInt);
    CommandStr:=AnsiUpperCase(Copy(QuoteStr,1,Pos(' ',QuoteStr)-1));
    if (CommandStr='MD') or (CommandStr='MKDIR') then
      fsMkDir(PAnsiChar(RemoteName+Copy(QuoteStr,Pos(' ',QuoteStr)+1,MaxInt)));
    if (CommandStr='CD') or (CommandStr='CHDIR') then begin
      Result := FS_EXEC_SYMLINK;
      RemoteName:=PChar(RemoteName+Copy(QuoteStr,Pos(' ',QuoteStr)+1,MaxInt)+'\');
    end;
  end;
  ...
end;
Почему по команде CHDIR он не переходит в эту папку, которая задается после команды? В хелпе написано что, такая комбинация должна это делать... Плиз жду ответа.
VNavigator
Сообщения: 2
Зарегистрирован: Вс фев 26, 2006 22:06
Контактная информация:

Сообщение VNavigator »

Все нашел решение:
Эту строку

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

RemoteName:=PChar(RemoteName+Copy(QuoteStr,Pos(' ',QuoteStr)+1,MaxInt)+'\'); 
надо заменить на эту

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

RemoteName:=StrPCopy(RemoteName,RemoteName+Copy(QuoteStr,Pos(' ',QuoteStr)+1,MaxInt)+'\');
Что-то мудрит компилятор Делфи с преобразованием типов ????
Ответить