| Autor |
Beitrag |
AlanWake
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: 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:
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
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
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: 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
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
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 { return "0822c472-5d2f-4434-94f3-e2429b4d5f48"; } } public static string UniquePortName { get { return "b878b33e-abd8-4bce-843c-6ddaad9e0338"; } } } private static Form1 frmMain = null; private static Mutex pobjMutex = null;
public static Form1 MainForm { get { return frmMain; } } [STAThread] static int Main() { string[] astrArg = Environment.GetCommandLineArgs();
bool pobjIOwnMutex = false; pobjMutex = new Mutex(true, IpcChannelConfig.UniqueName, out pobjIOwnMutex); if (pobjIOwnMutex) { ChannelServices.RegisterChannel(new IpcChannel(IpcChannelConfig.UniquePortName), false); RemotingConfiguration.ApplicationName = IpcChannelConfig.UniqueName; RemotingConfiguration.RegisterWellKnownServiceType(typeof(ArgsReceiver), IpcChannelConfig.UniqueName, WellKnownObjectMode.SingleCall );
frmMain = new Form1(); frmMain.SetNewArgs(astrArg); Application.EnableVisualStyles(); Application.Run(frmMain);
} else { RemotingConfiguration.RegisterWellKnownClientType(typeof(ArgsReceiver), string.Format("ipc://{0}/{1}", IpcChannelConfig.UniquePortName, IpcChannelConfig.UniqueName) );
ArgsReceiver argrecv = new ArgsReceiver(); argrecv.SetNewArgs(astrArg); }
return 0; } }
public class ArgsReceiver : MarshalByRefObject {
public void SetNewArgs(String[] astrArg) { Program.MainForm.SetNewArgs(astrArg); } }
} |
gruß Alan
|
|
|