Autor Beitrag
tartare
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: So 18.02.07 13:40 
Hallo

ich habe einen Musikplayer programmiert, der nun auch als mein Standardplayer fungieren soll, was ich auch schon eingestellt habe. Nun habe ich festgestellt, dass wenn ich nun mehrere Muskdateien aus dem Explorer starten will sich dementsprechend viele Instanzen öffnen. Gibt es eine gute Möglichkeit eine Hauptinstanz festzulegen an diese die anderen Instanzen ihre StartParamter im string[] args übergeben und sich danach wieder beenden?

Danke im Vorraus
mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 18.02.07 13:43 
Hallo!

Vielleicht hilft Dir dieses Tutorial weiter :)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: So 18.02.07 19:56 
Danke für die schnelle Antwort,
habe mich auch gleich damit befasst und es klappt, aber leider nur teilweise. Wenn ich mehrere Dateien im Explorer auswähle und starte gehen manche Parameter einfach flöten und es kommt nur noch die Hälfte oder weniger in der Hauptinstanz an. Gibts dafür ne Erklärung/Lösung?

Danke im Vorraus...
mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 18.02.07 20:02 
Ohne Deinen Sourcecode zu sehen, kann ich mir das nicht erklären.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: So 18.02.07 20:25 
Wie im Beispiel, nur dass ich nicht Environment.GetCommendlineArgs verwende sondern string[] args.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
 static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            bool createdNew;
            Mutex m = new Mutex(true"84749c3a-b35b-4480-b775-39c1b4e80f91"out createdNew);
            if (createdNew)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1(args));
                m.ReleaseMutex();
            }
            else
            {
                IpcChannel ipc = new IpcChannel("MusikPlayer");
                ChannelServices.RegisterChannel(ipc, false);

                ArgContainer ac=(ArgContainer)Activator.GetObject(typeof(ArgContainer), "ipc://MPlayer/ArgContainer");
                ac.OnAddArgs(args);
            }
        }
    }

    public class ArgContainer : MarshalByRefObject
    {

        public delegate void AddArgs(string[] files);

        public AddArgs OnAddArgs;

        public ArgContainer()
        {

        }
    }


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
private void Form1_Load(object sender, EventArgs e)
        {
      //korrekte Serialisierung von Delegates ermöglichen
      BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
      serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

      BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();

      //Channel erstellen
      Dictionary<stringstring> properties = new Dictionary<stringstring>();
      properties["portName"] = "MPlayer";
      IpcChannel ipc = new IpcChannel(properties, clientProv, serverProv);

      //Channel registrieren
      ChannelServices.RegisterChannel(ipc, false);


      //"Vermittlungsobjekt" als Dienst registrieren. 
      RemotingConfiguration.RegisterWellKnownServiceType(typeof(ArgContainer),
          "ArgContainer",
          WellKnownObjectMode.Singleton);

      //Vermittlungsobjekt erstellen
      ArgContainer ac = (ArgContainer)Activator.GetObject(typeof(ArgContainer), "ipc://MPlayer/ArgContainer");

      //Delegat zuweisen
      ac.OnAddArgs += InvokeAddFiles;
        }

 public void InvokeAddFiles(string[] files)
        {
            this.Invoke(new ArgContainer.AddArgs(AddFiles), new object[] { files });
        }

 public void AddFiles(string[] files)
        {
                hinzufuegen(files[0]);//Ist es normal das files.Length immer 0 ist?
        }


Danke im Vorraus
mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 18.02.07 20:36 
Und mit GetCommandLineArgs geht es auch nicht?

Ach ja, zu der AddFiles-Funktion: Nein, es ist nicht normal, dass Files immer die Länge 1 hat. ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: So 18.02.07 21:21 
Wenn ich GetCommandLineArgs verwende ist files.Length immer 2, der erste ist der Pfad zu Anwendung und der zweite der zur datei, wenn ich string[] args verwende ist Length immer 1 und dieser ist auch der Pfad zur Datei, also ist es egal. Was sollte denn sonst bei Environment.GetCommandLineArgs noch alles rauskommen?

mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 18.02.07 21:27 
Hm. Ich bin irgendwie davon ausgegangen, dass der Windows Explorer einfach alle Dateien, die Du öffnen willst, als Parameter anhängt. :gruebel:

Wie genau öffnest Du die Dateien im Explorer?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: So 18.02.07 21:36 
Ich selectiere sie, indem ich sie einrahme und dann enter drücke, danach kommen z.Bsp. manchmal nur 4 von 5, oder nur 11 von 16 Dateien an. Das geht anscheinend zu schnell, außerdem bekomme ich manchmal einen unbekannten Software Fehler, und es kommt nur eine Datei oder keine an. Gibt es vielleicht eine Möglichkeit festzustellen welche Dateien im aktuellen Explorer Fenster selektiert sind?

mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: Mo 26.02.07 19:32 
Weiß jemand wie der Windows Mediaplayer die selektierten Dateien aus dem Explorer kriegt?

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.