Hallo!
Ich habe ein kleines Problem und eine Lösung, welche wohl ein Overkill darstellen würde...
Problem:
Ich habe eine Art Winamp programmiert und als Standardprogramm für *.wav Dateien eingetragen. Klicke ich nun also auf eine *.wav Datei, so öffnet sich mein Player und spielt sie ab. Klicke ich nun aber auf eine Weitere *.wav Datei, so öffnet sich eine neue Instanz des Players... Da dies nicht der gewünschte Effekt ist, brauche ich Hilfe ^^
Gewünschter Effekt:
Die neu angeklickte Datei soll der Playlist angehängt werden.
Bsp:
MeineWave1.wav
MeineWave2.wav
1. Doppelklick auf MeineWave1.wav
2. Player1 öffnet sich mit MeineWave1.wav in der Playlist
3. Doppelklick auf MeineWave2.wav
4. Player1 added MeineWave2.wav zu der Playlist
Meine grundsätzlich funktionierende aber viel zu komplzierte Lösung:
Jeder Player lauscht auf einem Port auf localhost. Sobald ein Player gestartet wird, sendet dieser eine Statusabfrage mit einer (seiner) UniqueID über den Port. Der ältere Player empfängt diese Nachricht, erkennt dass es nicht seine ID ist und sendet dem neuen Player ein Statusflag und seine ID. Daraufhin gibt der neue Player die Datei (welche in den args steht) und einen AUfruf zum adden in die Playlist an den alten player weiter...
Bsp:
MeineWave1.wav
MeineWave2.wav
1. Doppelklick auf MeineWave1.wav
2. Player1 startet und beginnt den Port 666 abzuhören und sendet einmal auf dem Port 666 das Segment: #STATUS#Player1#
3. Player1 bekommt innerhalb des kurzen Timeouts (500ms) keine Antwort und geht davon aus, dass er alleine ist...
4. Player1 öffnet sich mit MeineWave1.wav in der Playlist
5. Doppelklick auf MeineWave2.wav
6. Player2 startet und beginnt den Port 666 abzuhören und sendet einmal auf dem Port 666 das Segment: #STATUS#Player2#
7. Player1 empfängt das Segment von Player2 und erkennt, dass es sich nicht um seine ID handelt.
8. Player1 sendet auf Port 666 das Segment: #ACK#Player1#
9. Player2 empfängt das ACK Segment mit der ID des lebenden Players und sendet zurück: #ADD_TO_PLAYLIST#C:\MeineWave2.wav#
10. Player2 beendet sich
11. Player1 added MeineWave2.wav zu der Playlist
Diese Vorgehensweise ist zu kompliziert und zu fehleranfällig... Hat jemand da eine bessere Idee?
EDIT:
Habe dazu ein nettes Snippet gefunden:
bool createdNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
if (createdNew) {
// bitte Form1 ersetzen
Application.Run(new Form1());
// und auch wieder Freigeben besser ist besser
mutex.ReleaseMutex();
} else {
MessageBox.Show("Programm wurde bereits gestartet!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Allerdings ist hier die Weitergabe von MeineWave2.wav an die Playlist von Player1 nicht realisiert... Also müsste ich auch hier ein Gespräch der beiden Player über Ports realisieren...
Übrigens: Zielframework ist .NET 2.0!
Ich habe ein kleines Problem und eine Lösung, welche wohl ein Overkill darstellen würde...
Problem:
Ich habe eine Art Winamp programmiert und als Standardprogramm für *.wav Dateien eingetragen. Klicke ich nun also auf eine *.wav Datei, so öffnet sich mein Player und spielt sie ab. Klicke ich nun aber auf eine Weitere *.wav Datei, so öffnet sich eine neue Instanz des Players... Da dies nicht der gewünschte Effekt ist, brauche ich Hilfe ^^
Gewünschter Effekt:
Die neu angeklickte Datei soll der Playlist angehängt werden.
Bsp:
MeineWave1.wav
MeineWave2.wav
1. Doppelklick auf MeineWave1.wav
2. Player1 öffnet sich mit MeineWave1.wav in der Playlist
3. Doppelklick auf MeineWave2.wav
4. Player1 added MeineWave2.wav zu der Playlist
Meine grundsätzlich funktionierende aber viel zu komplzierte Lösung:
Jeder Player lauscht auf einem Port auf localhost. Sobald ein Player gestartet wird, sendet dieser eine Statusabfrage mit einer (seiner) UniqueID über den Port. Der ältere Player empfängt diese Nachricht, erkennt dass es nicht seine ID ist und sendet dem neuen Player ein Statusflag und seine ID. Daraufhin gibt der neue Player die Datei (welche in den args steht) und einen AUfruf zum adden in die Playlist an den alten player weiter...
Bsp:
MeineWave1.wav
MeineWave2.wav
1. Doppelklick auf MeineWave1.wav
2. Player1 startet und beginnt den Port 666 abzuhören und sendet einmal auf dem Port 666 das Segment: #STATUS#Player1#
3. Player1 bekommt innerhalb des kurzen Timeouts (500ms) keine Antwort und geht davon aus, dass er alleine ist...
4. Player1 öffnet sich mit MeineWave1.wav in der Playlist
5. Doppelklick auf MeineWave2.wav
6. Player2 startet und beginnt den Port 666 abzuhören und sendet einmal auf dem Port 666 das Segment: #STATUS#Player2#
7. Player1 empfängt das Segment von Player2 und erkennt, dass es sich nicht um seine ID handelt.
8. Player1 sendet auf Port 666 das Segment: #ACK#Player1#
9. Player2 empfängt das ACK Segment mit der ID des lebenden Players und sendet zurück: #ADD_TO_PLAYLIST#C:\MeineWave2.wav#
10. Player2 beendet sich
11. Player1 added MeineWave2.wav zu der Playlist
Diese Vorgehensweise ist zu kompliziert und zu fehleranfällig... Hat jemand da eine bessere Idee?
EDIT:
Habe dazu ein nettes Snippet gefunden:
bool createdNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
if (createdNew) {
// bitte Form1 ersetzen
Application.Run(new Form1());
// und auch wieder Freigeben besser ist besser
mutex.ReleaseMutex();
} else {
MessageBox.Show("Programm wurde bereits gestartet!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Allerdings ist hier die Weitergabe von MeineWave2.wav an die Playlist von Player1 nicht realisiert... Also müsste ich auch hier ein Gespräch der beiden Player über Ports realisieren...
Übrigens: Zielframework ist .NET 2.0!
Zuletzt bearbeitet: