Sorry, Sorry.
Entschuldigung, da war ich wohl wieder mal zu schnell und ungenau. Außerdem entschuldige ich mich für die Rechtschreibfehler, leider kann ich sie nicht mehr wegeditieren (24h countdown ist überschritten)
Zur Zeit verwende ich folgenden Code (aus dem EasyHelper [ich weiß, das ist die Konkurenz...])
Delphi-Quellcode:
initialization //Um zu verhindern, dass Emat mehrmals gestartet wird,
//aber es trozdem möglich ist, wenn Delphi läuft, um auch während
//des Programmierens mit Emat Musik hören zu können.
if FindWindow('TAppBuilder', nil) <= 0 then
begin
mHandle := CreateMutex(nil,True,'Emat');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowWindow( Application.Handle, SW_HIDE );
SetWindowLong( Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
ShowWindow( Application.Handle, SW_SHOW );
//Hier müsste anstatt der Fehlermeldung meine andere Instanz die übergebene Parameter übersendet bekommen. Aber wie geht das?
MessageDlg(ONLYRUNONETIME, mtError, [mbOk], -1);
Halt;
end;
end;
finalization
if mHandle <> 0 then CloseHandle(mHandle)
Der Bewirkt, dass beim 2. Start einer Instanz meines Mp3-Player eine Fehlermeldung kommt, die besagt, dass das Programm nur einmal gestartet werden kann (um zu verhindern, dass 2 Instanzen die Playlisten und Einstellungsinidateien gegeneinander überschreiben und
Inkonsistenzen enstehen). Danach beendet sich die Instanz wieder. Eine Außnahme bildet Delphi selbst, weil ich während der Arbeit an dem Programm eine andere Instanz trotzdem verwenden möchte. (Nur der 'dumme' User darf das nicht)
Codito, ergo sum. - I code therefore I am