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 

Передача данных между копиями

 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Nik



Joined: 01 Jan 2005
Posts: 583
Location: Киров

Post (Separately) Posted: Mon Feb 21, 2005 13:19    Post subject: Передача данных между копиями Reply with quote

Кто-нибудь знает, как можно переслать данные (командную строку) от одной копии программы к другой? Попытался сделать нечто подобное в AmpView, но при просмотре в QV работает не совсем нормально...

PS. Delphi 7
Back to top
View user's profile Send private message
Sheridan



Joined: 01 Mar 2005
Posts: 129
Location: Пятигорск

Post (Separately) Posted: Tue Mar 01, 2005 13:09    Post subject: Reply with quote

посмо3 в сторону named pipes
Back to top
View user's profile Send private message
SCHMaster



Joined: 15 Dec 2004
Posts: 296
Location: Киев

Post (Separately) Posted: Wed Mar 02, 2005 03:55    Post subject: Reply with quote

2Nik
У тебя уже есть решение. Добавь в ту структуру, где ты хранишь нхендл своего плагина еще что-то типа BUFFER:String[MAX_PATH]. И все. Загружаешь туда имя файла, отправляешь сообщение плагину, что нужно что-то прочитать из этой структуры. Плагин читает...
Это изврат. Но проверенный и работающий 100%
Еще есть такая штука, как WM_COPYDATA. Это уже "стандартная" штучка.
Выбирай. Wink
_________________
Хороший юзер - мертвый юзер
Мои работы
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 583
Location: Киров

Post (Separately) Posted: Wed Mar 02, 2005 19:20    Post subject: Reply with quote

2SCHMaster
В новых версиях я уже не использую FileMap - теперь нормально работает Mutex (для блокировки запуска копий).
А вот WM_COPYDATA я пробовал: между окнами одной программы все работает отлично, а при передачи от одной копии к другой вместо строки приходят кракозябры (видимо адрес неверно передается?)...

Алгоритм применял такой:

Code:


// Для отправки:

procedure TAmpViewMainForm.Button1Click(Sender: TObject);
var
  cd: TCopyDataStruct;
begin
  cd.cbData := Length(Edit1.Text) + 1;
  cd.lpData := PChar(Edit1.Text);
  SendMessage(FindWindow('TAmpViewMainForm', nil), WM_COPYDATA, 0, LParam(@cd));
end;


// Для получения

private
 procedure ReceiveMessage (var Msg: TMessage); message WM_COPYDATA;

//

procedure ReceiveMessage;
var
  pcd: PCopyDataStruct;
begin
  pcd := PCopyDataStruct(Msg.LParam);
  Caption := PChar(pcd.lpData);
end;




В итоге пришлось применить несколько извращенский способ: первая копия пишет нужные данные в ini-файл и отправляет второй копи уведомление, после чего вторая копия читает данные из файла.
Back to top
View user's profile Send private message
SCHMaster



Joined: 15 Dec 2004
Posts: 296
Location: Киев

Post (Separately) Posted: Fri Mar 04, 2005 03:46    Post subject: Reply with quote

Nik

Code:
Отлавливаем сообщение

procedure TAnyApp.WMTransfer(var Msg: TWMCopyData);
var
i:Integer;
CmdStr:string;
CData:TCopyDataStruct;
len:integer;
begin
CData:=Msg.CopyDataStruct^;
CmdStr:='';
len:=CData.cbData;
for i:=0 to len-1 do
begin
CmdStr:=CmdStr+(PChar(CData.lpData)+i)^;
end;
if (not FileExists(CmdStr)) then Exit;
...
end;

Отправляем сообщение

...
DataStruct.lpData:=PChar(FileName);
DataStruct.cbData:=Length(FileName);
DataStruct.dwData:=0;
WParam:=SendFromHandle;
LParam:=Integer(@DataStruct);
SendMessage(W,WM_CopyData,WParam,LParam);
...


Где-то так...
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 583
Location: Киров

Post (Separately) Posted: Fri Mar 04, 2005 21:22    Post subject: Reply with quote

SCHMaster
Спасибо! Все работает...
Back to top
View user's profile Send private message
SCHMaster



Joined: 15 Dec 2004
Posts: 296
Location: Киев

Post (Separately) Posted: Sat Mar 05, 2005 03:29    Post subject: Reply with quote

Nik
Невочто... Просто мне знакомо чувство, когда бъешься башкой о стену, а толку... А те кто знает - молчат Smile
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 583
Location: Киров

Post (Separately) Posted: Sat Mar 05, 2005 21:34    Post subject: Reply with quote

SCHMaster wrote:
Nik
Невочто... Просто мне знакомо чувство, когда бъешься башкой о стену, а толку... А те кто знает - молчат Smile


Это точно... Smile

PS. 2Ergo А как можно тему закрыть?
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
Page 1 of 1

 
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