使用WPF和C#将音频文件复制到剪贴板

3

我正在尝试使用文件路径在C#中将音频文件复制到剪贴板。 我遇到的问题是,要么无法复制,要么无法正确复制,因为它无法在应用程序外粘贴。

这是我尝试复制到剪贴板的方法:

b_array = File.ReadAllBytes(fileLocation);
Clipboard.Clear();
Clipboard.SetAudio(b_array);

在我的测试中,变量fileLocation的值类似于:C:\Users\ben\Music\Samples\kick_05.wav


您希望在Windows资源管理器中粘贴该文件吗?使用此代码,您只能在理解音频格式的应用程序(如某种音频编辑器)中粘贴(我认为,从未尝试过音频)。 - Alex Paven
@AlexPaven 我正在尝试让它可以在几乎任何地方粘贴文件(文件浏览器和音频编辑程序),就像文件浏览器中的复制功能一样。 - Benjamin Porter
1
我对剪贴板没有太多的经验,但我认为您需要插入一个带有文件信息的单独条目,否则就无法知道要从哪个文件名和位置进行复制 - 请参见Clipboard.SetFileDropList。 - Alex Paven
1个回答

5

不需要阅读文件内容。您可以使用SetFileDropList将文件直接添加到剪贴板。

StringCollection files = new StringCollection();
files.Add(fileLocation);
Clipboard.SetFileDropList(files);

我尝试这样做,但它抛出了一个异常:System.Runtime.InteropServices.COMException: 'OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))' - Benjamin Porter
你是在尝试在后台线程中执行这个操作吗?我很确定它需要在UI线程上执行。我曾经遇到过使用Task.Run时会抛出异常的问题。 - Shawn Kendrot
我肯定是在UI线程上执行这个操作。我甚至使用了这个包装来确保,但我仍然遇到了同样的问题:this.Dispatcher.Invoke(() => { ... }); - Benjamin Porter
你正在使用哪个.NET版本? - Nemanja Banda
版本4.0存在一个已知问题,当使用此方法时会出现您正在遇到的错误,但在4.5中应该已经修复了... 这段代码对我来说可以正常工作。您可能还想检查一下这个 - Nemanja Banda
@NemanjaBanda 我试图在我的 Mac 上使用 Parallels 在 Windows 10 上运行它。将项目转移到 PC 上,它可以完美地工作! - Benjamin Porter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接