En espera de una alternativa estoy intentando usar el metodo de los mensajes, explicado
aqui, pero no hay manera...
El codigo es el siguiente:
Código Delphi
[-]procedure TMP3Tagform.FormCreate(Sender: TObject);
begin
CreateMutex(nil, false, 'mp3editor');
if GetLastError=ERROR_ALREADY_EXISTS then
begin
mandamensaje(paramStr(1));
halt;
end;
IDtag:=TID3v1.Create;
if ParamStr(1)<>'' then
begin
btnfile.enabled:=false;
IDtag.ReadFromFile(ParamStr(1));
leedatos;
edarc.Text:=GetLongFileName(ParamStr(1));
end;
end;
procedure TMP3Tagform.mandamensaje(mensaje:string);
var
copyDataStruct : TCopyDataStruct;
begin
copyDataStruct.dwData := 0
copyDataStruct.cbData := 1 + Length(mensaje) ;
copyDataStruct.lpData := PChar(mensaje) ;
SendData(copyDataStruct)
end;
procedure TMP3Tagform.SendData(copyDataStruct: TCopyDataStruct);
var
receiverHandle:Thandle;
res : integer;
begin
receiverHandle := FindWindow(PChar('TMP3Tagform'),PChar('Mp3 Tag Editor ')) ;
if receiverHandle = 0 then
begin
ShowMessage('No se encuentra una instancia previa de la aplicacion!') ;
Exit;
end;
res:=SendMessage(receiverHandle, WM_COPYDATA, 0, Integer(@copyDataStruct));
end;
procedure TMP3Tagform.WMCopyData(var Msg: TWMCopyData);
var
s : string;
begin
s := PChar(Msg.CopyDataStruct.lpData) ;
memo1.Lines.Add(s);
msg.result:=2006;
end;
En teoria, al seleccionar varios archivos deberian aparecer en el memo de la primera instancia, pero no aparecen. Creo que el problema esta en la manera de obtener el handle de la primera instancia con Findwindow, ya que todas las instancias tienen el mismo nombre de clase de ventana y el mismo caption por lo que al llamar a Findwindow cada instancia obtiene su propio handle y no el de la primera...
¿alguna idea?