Autor Beitrag
AlanWake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Di 07.09.10 03:41 
Hallo Leute,

vielleicht erinnert sich noch jemand an meinem alten Post www.c-sharp-forum.de...eiterung_101254.html

Code:

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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
      private Dictionary<string, FileType> fileTypes = null;
        public enum FileType
        {
            Text,
            Graphic,
            Music,
            Video
        }
        public Form1()
        {
            InitializeComponent();
            pictureBox1.Hide();
            richTextBox1.Hide();
            axWindowsMediaPlayer1.Hide();
            fileTypes = new Dictionary<string, FileType>()
  {
    {".jpg", FileType.Graphic},
    {".jpeg", FileType.Graphic},
    {".bmp", FileType.Graphic},
    {".png", FileType.Graphic},
    {".txt", FileType.Text},
    {".rtf", FileType.Text},
    {".mp3", FileType.Music},
    {".avi", FileType.Video},
    {".mpg", FileType.Video},
    {".mpeg", FileType.Video}
  };

            string[] args = Environment.GetCommandLineArgs();

            if (args.Length > 1)
            {
                FileInfo fi = new FileInfo(args[1]);
                string extension = fi.Extension.ToLower();
                if (fileTypes.ContainsKey(extension))
                {
                    switch (fileTypes[extension])
                    {
                       case FileType.Text:
                            Text = args[1];
                            richTextBox1.LoadFile(Text, RichTextBoxStreamType.RichText);
                            richTextBox1.Show();
                            break;
                       case FileType.Graphic:
                            pictureBox1.Image = Image.FromFile(args[1]);
                            pictureBox1.Show();
                            break;
                       case FileType.Music:
                            axWindowsMediaPlayer1.URL = args[1];
                            axWindowsMediaPlayer1.Show();
                            break;
                       case FileType.Video:
                            axWindowsMediaPlayer1.URL = args[1];
                            axWindowsMediaPlayer1.Show();
                            break;
                    }
                }
                else
                {
                    MessageBox.Show("Nicht unterstützter Dateityp");
                }
            }
        }


Mein Problem heute ist, das wenn ich eine Musik/Video Datei mit meinem Programm öffne und dann kurze Zeit danach wieder eine Musik/Video Datei öffnen will, mein Programm in einem neuen Fenster mit der Datei geöffnet wird, aber ich wollte erreichen wenn ich eine neue Musik/Video Datei öffne das er das im alten Fenster macht, also die alte Datei durch die neue ersetzt :)

Trashkid2000 hatte mir ein Test Projekt geschickt gehabt, womit dieses Problem behoben werden sollte, aber wir hatten es nur soweit geschafft gehabt, das sich kein neues Fenster öffnet, wenn wir versucht hatten eine neue Musik/Video Datei zu öffnen, hat das Programm leider nur die alte Musik/Video Datei zum Anfang zurückgespult und sie wiedergegeben :(

Im MainForm.cs wollte wir es mit diesem Code versuchen, hatte aber leider nicht funktioniert :(

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        public void ProcessStartupArgs()
        {
            string[] args = StartupArgs.Args;
            if (args.Length > 0)
            {
                axWindowsMediaPlayer1.URL = args[1];
            }
        }


Bin dankbar für jede Hilfe :)

gruß Alan
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 07.09.10 11:10 
Dazu gab es erst gestern eine ähnliche Frage, so daß ich dir dieselbe Antwort geben kann:
www.c-sharp-forum.de....php?p=616636#616636

Das Übergeben von Daten an eine laufende Applikation ist jedoch immer mit einem erhöhtem Aufwand verbunden - das generelle Stichwort dazu lautet: IPC (Interprocess communication).

In dem Beispiel von dem Link wird dies mittels .Net Remoting gemacht, aber es gäbe auch noch andere Wege, z.B. Windows Messages.
Was für dich am einfachsten umzusetzen ist, kann ich jedoch aus der Ferne nicht sagen.

P.S. Da mir dies selber oft auch zu aufwändig ist, verwende ich stattdessen immer die Drag&Drop-Funktionalität, d.h. ich erlaube das Draggen von Dateien aus dem Explorer auf meine Hauptform. So kann der Anwender dann selber entscheiden, ob er mehrere Instanzen öffnen will.

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Fr 10.09.10 07:39 
Dank Th69, haben Trashkid2000 und ich eine Lösung für das Problem gefunden :)

(System.Runtime.Remoting muss als Verweiß hinzugefügt werden)

Form1.cs

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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
        private Dictionary<string, FileType> fileTypes = null;
        public enum FileType
        {
            Text,
            Graphic,
            Music,
            Video
        }

        public void SetNewArgs(String[] astrArg)
        {
            #region FileTypes zum öffnen
            fileTypes = new Dictionary<string, FileType>()
  {
    {".jpg", FileType.Graphic},
    {".jpeg", FileType.Graphic},
    {".bmp", FileType.Graphic},
    {".png", FileType.Graphic},
    {".tif", FileType.Graphic},
    {".gif", FileType.Graphic},
    {".ico", FileType.Graphic},
    {".txt", FileType.Text},
    {".rtf", FileType.Text},
    {".wav", FileType.Music},
    {".wma", FileType.Music},
    {".mp3", FileType.Music},
    {".avi", FileType.Video},
    {".wmv", FileType.Video},
    {".mpg", FileType.Video},
    {".mpeg", FileType.Video},
    {".mp4", FileType.Video},
    {".flv", FileType.Video},
    {".mkv", FileType.Video},
    {".divx", FileType.Video},
    {".xvid", FileType.Video}
  };

            if (astrArg.Length > 1)
            {
                FileInfo fi = new FileInfo(astrArg[1]);
                string extension = fi.Extension.ToLower();
                if (fileTypes.ContainsKey(extension))
                {
                    switch (fileTypes[extension])
                    {
                        case FileType.Text:
                            Text = astrArg[1];
                            text.FileName = Text;
                            richTextBox1.LoadFile(Text, RichTextBoxStreamType.RichText);
                            richTextBox1.Show();
                            break;

                        case FileType.Graphic:
                            this.pictureBox1.Image = new Bitmap(astrArg[1]);
                            listBox1.Items.Clear();
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.jpg"));
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.bmp"));
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.png"));
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.tif"));
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.gif"));
                            listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(astrArg[1]), "*.ico"));
                            listBox1.SelectedItem = astrArg[1];
                            pictureBox1.Show();
                            break;

                        case FileType.Music:
                            WindowsMediaPlayer1.URL = astrArg[1];
                            WindowsMediaPlayer1.Show();
                            break;

                        case FileType.Video:
                            WindowsMediaPlayer1.URL = astrArg[1];
                            WindowsMediaPlayer1.Show();
                            break;
                    }
                }
                else
                {
                    MessageBox.Show("Nicht unterstützter Dateityp");
                }
            }
            #endregion
        }


Programm.cs

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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;
using System.Threading;

namespace WindowsFormsApplication1
{
    static class Program
    {
        public static class IpcChannelConfig
        {
            public static string UniqueName
            {
                get
                {
                    //Bitte durch eine Guid ersetzen, die auf Deinem PC erzeugt wurde
                    return "0822c472-5d2f-4434-94f3-e2429b4d5f48";
                }
            }
            public static string UniquePortName
            {
                get
                {
                    //Bitte durch eine Guid ersetzen, die auf Deinem PC erzeugt wurde
                    return "b878b33e-abd8-4bce-843c-6ddaad9e0338";
                }
            }
        }
        private static Form1 frmMain = null;
        private static Mutex pobjMutex = null;

        public static Form1 MainForm
        {
            get
            {
                return frmMain;
            }
        }
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static int Main()
        {
            //Die Argumente
            string[] astrArg = Environment.GetCommandLineArgs();

            // Feststellen, ob erste oder weitere Instanz

            bool pobjIOwnMutex = false;
            pobjMutex = new Mutex(true, IpcChannelConfig.UniqueName, out pobjIOwnMutex);
            if (pobjIOwnMutex)
            {
                //-----------------------------------------------------------------------
                // Als erste Instanz erzeugen wir den Server/Service-Part
                //-----------------------------------------------------------------------
                ChannelServices.RegisterChannel(new IpcChannel(IpcChannelConfig.UniquePortName), false);
                RemotingConfiguration.ApplicationName = IpcChannelConfig.UniqueName;
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(ArgsReceiver), IpcChannelConfig.UniqueName,
                                                                   WellKnownObjectMode.SingleCall
                );

                //-----------------------------------------------------------------------
                // Erzeugen und öffnen des Hauptfensters
                //-----------------------------------------------------------------------
                frmMain = new Form1();
                frmMain.SetNewArgs(astrArg);
                Application.EnableVisualStyles();
                Application.Run(frmMain);

            }
            else
            {
                //-----------------------------------------------------------------------
                // Als weitere Instanz erzeugen wir den Client-Part
                //-----------------------------------------------------------------------
                RemotingConfiguration.RegisterWellKnownClientType(typeof(ArgsReceiver),
                   string.Format("ipc://{0}/{1}", IpcChannelConfig.UniquePortName, IpcChannelConfig.UniqueName)
                );

                //-----------------------------------------------------------------------
                // Und senden die Argumente an den Server/Service-Part
                //-----------------------------------------------------------------------
                ArgsReceiver argrecv = new ArgsReceiver();
                argrecv.SetNewArgs(astrArg);
            }

            return 0;
        }
    }

    public class ArgsReceiver : MarshalByRefObject
    {

        //==========================================================================
        // Diese wird in der ersten Instanz ausgeführt, aber von der weiteren
        // Instanz aufgerufen. Die übergebenen Werte an das Hauptfenster
        // weitergegeben.
        //==========================================================================
        public void SetNewArgs(String[] astrArg)
        {
            Program.MainForm.SetNewArgs(astrArg);
        }
    }

}


gruß Alan