2016-12-22 105 views
1

我正在创建一个媒体播放器。用自己的C#应用​​程序打开自定义文件

到目前为止,我可以通过双击文件来打开与我的C#应用​​程序的文件类型。但我想通过选择它们并立即打开它们打开多个文件..

我的代码去如下:

App.xmal.cs

protected override void OnStartup(StartupEventArgs e) 
{  
    if (e.Args != null && e.Args.Length > 0) 
    { 
     this.Properties["ArbitraryArgName"] = e.Args[0]; 
    } 

    base.OnStartup(e); 
} 

MainWindow.xmal.cs

if (Application.Current.Properties["ArbitraryArgName"] != null) 
{ 
    string fname = Application.Current.Properties["ArbitraryArgName"].ToString();   

    if (fname.EndsWith(".mp3") || fname.EndsWith(".wma") || fname.EndsWith(".wav") || fname.EndsWith(".mpg") || 
     fname.EndsWith(".mpeg") || fname.EndsWith(".mp4") || fname.EndsWith(".wmv")) 
    { 
     doubleclicktrack(fname); 
    } 
    else 
    { 
     this.Close(); 
    } 
} 

此代码可以正常使用一个文件,但是如何通过选择多个文件并同时打开它们(通过按Enter键)来一次打开多个文件来更改此代码。

+0

这是甚至可以在Windows资源管理器?如果我正在标记多个文本文件并双击任何一个文件,只打开这个文件。 –

+0

即使我创建了一个文件列表或一个字符串数组。当我双击多个项目时,它会打开两个单独的应用程序。 –

+0

请用你正在使用的技术来标记问题(例如,wpf,uwp,winforms,等等)。 –

回答

0

FileOpenPicker能做到这一点(代码UWP或Windows 8.1桌面上,与Windows 8.1手机这是一个有点棘手):

private static readonly string[] FileTypes = { 
    "aac", "adt", "adts", "mp3", "m3a", "m4a", "mpr", "3gp", "3g2", 
    "flac", "wav", "wma" }; 

........... 

FileOpenPicker picker = new FileOpenPicker(); 
picker.SuggestedStartLocation = PickerLocationId.MusicLibrary; 
foreach (String fileType in FileTypes) 
    picker.FileTypeFilter.Add("." + fileType); 

var list = await picker.PickMultipleFilesAsync(); 

FYI你的清单必须在能力宣布 “曲库”

+1

这并没有回答这个问题。 OP想要从Windows资源管理器中打开多个文件。 –

1

你将不得不考虑开发外壳扩展以实现你想要的。只需使用注册表将文件类型与您的应用程序相关联,即可限制每个命令仅传递一个文件,每个文件最终会打开一次应用程序(您已确认)。

我想你也可以实现你的应用程序,只允许一个实例全局运行。这样,每当有一个命令打开一个文件时,你可以将它添加到播放列表或其他东西。

请注意,外壳扩展必须用C++编写,Microsoft强烈建议为此避免托管代码。

你可以从这里找到文档的起点:https://msdn.microsoft.com/en-us/library/windows/desktop/bb776778(v=vs.85).aspx

+0

有没有其他方法可以在C#中执行此操作? –

+0

@JayashanLakshitha我给了你两个选择,无法想象还有另外一个.... – MarioDS

相关问题