Witam wszystkich !
W swojej aplikacji chciałbym zrobić takie cudo, aby można było uruchomić tylko jedną instancję programu, a przy próbie uruchomienia drugiej, gdyby ta duga uruchamiana była z parametrem (konkretnie to ze ścieżką do pliku), to ta ścieżka wysyłana byłaby do tej pierwszej instancji i ona właśnie otwierałaby wskazany plik.
Prawie wszytsko już jest gotowe, wybrałem takie rozwiązanie, że jeśli druga instancja jest uruchomiona, to wysyłany jest do niej komunikat (WM_USER+120), a jako wParam podaję ścieżkę wskaźnik do ścieżki do pliku (Integer(ParamStr(1)).
Problem w tym, że jak chcę odebrać ten komunikat (przez komponent AppEvent >> zdarzenie OnMessage), to zaczynają sioę schody.
Kod przy zdarzeniu :
procedure TfrmMain.AppEventsMessage(var Msg: tagMSG;
var Handled: Boolean);
var FName:string;
begin
if Msg.message = WM_USER+120 then
begin
FName:=PChar(msg.wParam);
ShowMessage(FName);
if FileExists(FName) then
OpenFile(FName);
end;
end;
Aha, wysyłam komunikat poprzez taką instrukcję :
PostMessage(PrevInstHandle,WM_USER+120,Integer(ParamStr(1)),Length(ParamStr(1)));
Cóż się dzieje ??
Przy zdarzeniu OnMessage, wszytsko jest OK, poza jedną dziwną rzeczą. Zmienna FName powinna być pierwszym parametrem przekazanym do drugiej instancji, a okazuje się (wiem to z ShowMesage(FName)), że jest to ścieżka do aplikacji (ParamStr(0));
Co jest więc grane ???
Miał ktoś podobny problem ???
Z góry dzięki za podpowiedzi...