11

我正在尝试从 C# 控制 VLC 媒体播放器。我尝试使用 .Net 中的 FindWindow() 命令获取窗口句柄,但是当我发现每次播放文件时窗口的名称都会更改。我遇到的最大问题是将 wm_commands 发送到 vlc。这种方法适用于 Winamp 和 Windows Media Player,但对于 VLC,它似乎不起作用。

我读到 VLC 可以通过浏览器进行控制,但我不想...我在它的设置中看到它有一些可以调用的热键..但是它们可以更改,如果我从我的代码以某种方式......用户更改了它们......

我有点卡住了……任何帮助都会很棒……索林

4

6 回答 6

9

我有一些代码可以使用RC 接口上的套接字来控制它。这在一定程度上有效,但有很多怪癖。在调用播放后的几秒钟内,转到全屏似乎什么都不做。总的来说,它有点工作。

其他选项是:

编写一个 DirectDraw 过滤器(非常难),但一旦完成,VLC 可以代替 FFMPEG 或与 FFMPEG 一起使用。驱动媒体播放器的现有代码可以使用 vlc。

为libvlc编写一个互操作包装器,据我所知,最近 VLC 团队libvlccore从中分裂出来,libvlc所有互操作都已过时。编写包装器后,您可以将 vlc 嵌入到 Windows 应用程序中。(如果需要支持 x64,则需要在 x64 下编译这些库。

查看 VLC 代码并找出是否有发送这些 Windows 消息的方法。

编辑 这似乎已经出现在本周。

于 2009-04-24T13:33:21.747 回答
3

正如 Eoin 提到的,libvlc可用于与 VLC 交互。作为 C# 用户,您可能想尝试libvlc-sharp项目提供的 .NET 绑定。

编辑:似乎这个项目已经多年没有维护了。无论如何,我都会留下链接,以防你想看看它,也许可以使用它的一些来源。

于 2009-04-24T13:31:55.930 回答
2

你看过libvlc

您也许可以将其包装在一个库中并通过它与 VLC 进行交互。

于 2009-04-24T13:29:15.843 回答
1

如果您要控制以前运行的可执行文件,请查看Process类以枚举所有当前进程或按名称进行操作。检查可执行文件是否匹配vlc.exe。然后,您可以获得主窗口的句柄并执行一些 P/Invoke 以发送消息,就像您使用其他可执行文件一样。这显然充满了潜在的问题,例如键盘击球是否发生变化。

于 2009-04-24T13:37:05.637 回答
1

如何在 C++ 中使用 libvlc http://unick-soft.ru/art/files/libvlcProject.zip 我认为,在 C# 中使用 libvlc 非常相似。

于 2009-11-10T22:46:40.243 回答
0

还有rc接口,甚至还有一个 telnet 接口:http ://wiki.videolan.org/Console

但是,如果可能的话,我更喜欢 libvlc。

于 2009-04-24T13:33:15.660 回答