var
dwMutex : DWORD;
hWindow : DWORD;
dwAtom : DWORD;
cdWork : TcsCopyDataStruct;
begin
// Eine eindeutige eigene Message erzeugen
// ACHTUNG: In der
IDE mit Strg-Shift-G selber generieren nicht diesen Wert übernehmen!
// (Es wird einfach eine
GUID generiert. Eindeutiger wird ein String nicht
// so leicht sein können)
// Die Variable dwMessage ist in der
Unit MAIN deklariert, da sie dort noch
// gebraucht wird
dwMessage := RegisterWindowMessage('{3DCA657A-B681-4260-A29C-37C750C9EF43}');
//
Mutex erzeugen
dwMutex := CreateMutex(nil,true,'mplayer3');
try
if GetLastError <> ERROR_ALREADY_EXISTS then
begin //
Mutex wurde das erste Mal erzeugt, Programm normal starten
Application.Initialize;
Application.Title := 'YASP';
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
begin
// Den Fenstertitel des Programmes abfragen
hWindow := FindWindow(nil,'YASP');
if hWindow <> 0 then
begin // gefunden, dann den Dateinamen an die laufende Instanz senden
if (paramcount > 0) and FileExists(paramstr(0)) then
begin
// CopyData Struktur füllen
cdWork.dwData := dwMessage; // Message, das eine zu ladende Datei da ist
cdWork.cbData := Length(paramstr(1))+1;
cdWork.lpData := AllocMem(cdWork.cbData); // Speicher reservieren
try
// Und Dateinamen eintragen
CopyMemory(cdWork.lpData,@paramstr(1)[1],cdWork.cbData-1);
// Fertig, Daten kopieren
SendMessage(hWindow,WM_COPYDATA,0,lParam(@cdWork));
finally
// Speicher wieder freigeben
FreeMem(cdWork.lpData,cdWork.cbData);
end;
end;
end;
end;
finally
if dwMutex <> 0 then
begin
CloseHandle(dwMutex);
end;
end;
end.