সেদিন দেখা হয়েছিলো Ответов: 1

C# как открыть видео двойным щелчком мыши в одном экземпляре приложения?


Я хочу разместить некоторое расширение файла и хочу открыть его на своем mediaelement.
Как это расширение .МР4 , .мкВ .авг некоторые файлы. И хочу открыть на Maindwindow & gt; mediaelement.

Я создаю свое приложение в одном экземпляре, используя этот метод.

Мой файл MainWindow.язык XAML:

<mediaelement x:name="mediaelement" loadedbehavior="Play">




И я хочу открыть видео в MediaElement по двойному щелчку мыши на видео-файл или перетащите и усилитель; падение на мое заявление .exe-файла.

Но как это возможно?

Что я уже пробовал:

Цитата:
Приложение С Одним Экземпляром:

WpfSingleInstance.в CS:


using System;
using System.Threading;
using System.Windows;
using System.IO;
using System.IO.IsolatedStorage;

namespace WpfSingleInstanceByEventWaitHandle
{
	public static class WpfSingleInstance
	{

		internal static void Make(String name, Application app)
		{

			EventWaitHandle eventWaitHandle = null;
			String eventName = Environment.MachineName + "-" + name;

			bool isFirstInstance = false;

			try
			{
				eventWaitHandle = EventWaitHandle.OpenExisting(eventName);
			}
			catch
			{
				// it's first instance
				isFirstInstance = true;
			}

			if (isFirstInstance)
			{
				eventWaitHandle = new EventWaitHandle(
					false,
					EventResetMode.AutoReset,
					eventName);

				ThreadPool.RegisterWaitForSingleObject(eventWaitHandle, waitOrTimerCallback, app, Timeout.Infinite, false);

				// not need more
				eventWaitHandle.Close();


				// !!! delete it if not use
				setFirstArgs();
			}
			else
			{
				// !!! delete it if not use
				setArgs();


				eventWaitHandle.Set();

				// For that exit no interceptions
				Environment.Exit(0);
			}
		}


		private delegate void dispatcherInvoker();

		private static void waitOrTimerCallback(Object state, Boolean timedOut)
		{
			Application app = (Application)state;
			app.Dispatcher.BeginInvoke(
					new dispatcherInvoker(delegate() {
						Application.Current.MainWindow.Activate();

						// !!! delete it if not use
						processArgs();

					}),
					null
				);
		}





		// Args functionality for test purpose and not developed carefuly
		#region Args

		internal static readonly object StartArgKey = "StartArg";

		private static readonly String isolatedStorageFileName = "SomeFileInTheRoot.txt";

		private static void setArgs()
		{
			string[] args = Environment.GetCommandLineArgs();
			if (1 < args.Length)
			{
				IsolatedStorageFile isoStore =
					IsolatedStorageFile.GetStore(
						IsolatedStorageScope.User | IsolatedStorageScope.Assembly,
						null,
						null);

				IsolatedStorageFileStream isoStream1 = new IsolatedStorageFileStream(isolatedStorageFileName, FileMode.Create, isoStore);
				StreamWriter sw = new StreamWriter(isoStream1);
				string arg = args[1];
				sw.Write(arg);
				sw.Close();
			}
		}


		private static void setFirstArgs()
		{
			string[] args = Environment.GetCommandLineArgs();
			if (1 < args.Length)
			{
				Application.Current.Resources[WpfSingleInstance.StartArgKey] = args[1];
			}
		}


		private static void processArgs()
		{
			IsolatedStorageFile isoStore =
				IsolatedStorageFile.GetStore(
					IsolatedStorageScope.User | IsolatedStorageScope.Assembly,
					null,
					null);


			IsolatedStorageFileStream isoStream1 = new IsolatedStorageFileStream(isolatedStorageFileName, FileMode.OpenOrCreate, isoStore);
			StreamReader sr = new StreamReader(isoStream1);
			string arg = sr.ReadToEnd();
			sr.Close();

			isoStore.DeleteFile(isolatedStorageFileName);

			Window1.ProcessArg(arg);
		}

		#endregion


	}
}



Приложение.язык XAML.в CS:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace WpfSingleInstanceByEventWaitHandle
{
	/// <summary>
	/// Interaction logic for App.xaml
	/// </summary>
	public partial class App : Application
	{



		protected override void OnStartup(StartupEventArgs e)
		{
			WpfSingleInstance.Make("MyWpfApplication",this);

			base.OnStartup(e);
		}

	}
}




Пожалуйста, скажите мне, как я могу решить?

1 Ответов

Рейтинг:
2

#realJSOP

Вы должны сделать две вещи:

0) установите соответствующую ассоциацию файлов в реестре

1) Закодируйте свое приложение так, чтобы оно автоматически открывало файл по указанию операционной системы.

Кстати, а что, если ваше приложение уже запущено? В вашем узко определенном мире двойной щелчок ничего не сделает.