Laden...

per Process.Start() mehrere Dateien öffnen lassen

Erstellt von seeker vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.394 Views
S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 14 Jahren
per Process.Start() mehrere Dateien öffnen lassen

hi leute

jeder von euch kennt das sicherlich, wenn man im dateiexplorer von windows zb mehrere mp3-lieder markiert und dann öffnet, werden diese "gemeinsam" wiedergegeben. genauso wie bei word-dokumenten, wo jedes einzel geöffnet wird. meine frage ist jetzt, wie ich das auch realisieren kann.

bis jetzt hab ich es so probiert:

private void RunAppForFiles(string filename, string additional_args)
        {
            if (filename != string.Empty)
            {
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                //proc.EnableRaisingEvents = false;
                proc.StartInfo.FileName = filename;
                if (additional_args != string.Empty)
                {
                    proc.StartInfo.Arguments = additional_args;
                }
                try
                {
                    proc.Start();
                }
                catch (Exception ex)
                {
                    //irgendeine fehlerbehandlung
                }
            }
        }

den string additional_args befülle ich dann mit den weiteren liedern zum beispiel, alle durch ein "\n" zum beispiel getrennt. es funktioniert so nicht und ich habe eigentlich keine ahnung, wie ich da mehrere auf einmal öffnen kann.

danke schon im voraus, lg seeker

System.CrashWithStop(0x0000000A);

5.742 Beiträge seit 2007
vor 14 Jahren

Hallo seeker,

jeder von euch kennt das sicherlich, wenn man im dateiexplorer von windows zb mehrere mp3-lieder markiert und dann öffnet, werden diese "gemeinsam" wiedergegeben. genauso wie bei word-dokumenten, wo jedes einzel geöffnet wird.

Ja - der Windows Explorer öffnet, falls mehrere Dateien markiert sind, jede separat.
Eventuell verwendet der WMP eine Shell Extension, um die Dateien in einer Playlist zusammenfassen zu können.

meine frage ist jetzt, wie ich das auch realisieren kann.

Was genau möchtest du jetzt realisieren?
Mehrere Prozesse starten? Das kannst du einfach in einer Schleife erledigen.

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 14 Jahren

hi, erstmal danke für deine antwort.

ich hab mir das mal ein bisschen genauer angeschaut, anscheinend ist das wirklich nur windows media-player, der das unterstützt.

mit einer schleife hab ich es bis jetzt gelöst, dass geht aber eben mit wmp nicht.

und mit den arguments auch nicht. aber anscheinend müsste man sich dafür genauer mit wmp beschäftigen...

System.CrashWithStop(0x0000000A);

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo seeker,

vermutlich kommuniziert der Explorer bei mehreren Dateien per DDE mit dem WMP. Da DDE eine offene Schnittstelle ist, müsste man das auch nachbilden können.

herbivore

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 14 Jahren

hi,

ich hab versucht im web etwas über wmp gemeinsam mit dde zu finden, jedoch ohne erfolg.

macht es vielleicht sinn, das ganze über APIs zu steuern?

System.CrashWithStop(0x0000000A);

4.938 Beiträge seit 2008
vor 14 Jahren

Eigentlich wird ja für jede Datei ein eigener Prozeß des Programms geöffnet.
Wenn man aber mal versucht den WMP mehrfach zu öffnen, wird man sehen, daß er immer nur eine Instanz öffnet.

Der Trick besteht also darin, den übergebenen Dateinamen an die laufende Instanz zu übergeben (per WM_COPYDATA o.ä.), s.a. [FAQ] mehrere Programminstanzen verhindern (inkl. Parameterübergabe)
bzw. per Suche nach "Mutex Instanz":

S
21 Beiträge seit 2009
vor 14 Jahren

hat Mutex eigentlich irgendwelche vor-/nachteile gegenüber

using System.Diagnostics;

bool IsApplicationAlreadyRunning()
{
    string proc=Process.GetCurrentProcess().ProcessName;
    Process[] processes=Process.GetProcessesByName(proc);
    if (processes.Length > 1)
        return true;
    else
        return false;
}

?

5.742 Beiträge seit 2007
vor 14 Jahren

hat Mutex eigentlich irgendwelche vor-/nachteile gegenüber

Ja.
Vermutlich wird ein Mutex performanter sein.
Zwar weiß ich das jetzt nicht auswendig, aber eventuell unterscheiden sich beide Varianten auch in den benötigten Rechten.

Der größte Unterschied ist allerdings, dass man beim Mutex sicherer sein kann, wirklich nur eigene Anwendungen zu blockieren - ganz einfach, weil man sich nicht nur auf den Namen des Prozesses, sondern normalerweise auf mehrere Faktoren (beim Zusammenbau der Zeichenkette) verlässt.

Ein Mutex ist einfach sauberer.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Sekkiy,

wie winsharp93 sagt, kann es ja immer seine, dass zwei unterschiedliche Programme zufällig den gleichen ProcessName haben. Wenn man dagegen für den Namen der Mutex eine GUID nimmt, sind Konflikte praktisch gesehen vollkommen ausgeschlossen.

herbivore