2016-12-22 151 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

相關問題