Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
per Process.Start() mehrere Dateien öffnen lassen
seeker
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Wien - Österreich

Themenstarter:

per Process.Start() mehrere Dateien öffnen lassen

beantworten | zitieren | melden

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);
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo seeker,
Zitat von 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.
Zitat von seeker
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.
private Nachricht | Beiträge des Benutzers
seeker
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Wien - Österreich

Themenstarter:

beantworten | zitieren | melden

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);
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
seeker
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Wien - Österreich

Themenstarter:

beantworten | zitieren | melden

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);
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.317

beantworten | zitieren | melden

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":
private Nachricht | Beiträge des Benutzers
Sekkiy
myCSharp.de - Member



Dabei seit:
Beiträge: 21

beantworten | zitieren | melden

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;
}
?
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von Sekkiy
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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers