在Linux / X11上以编程方式启动独立的Adobe Flash Player

时间:2020-03-06 15:02:57  来源:igfitidea点击:

从命令行启动.flash文件时,独立的flashplayer不会接受任何参数。我需要播放器进入全屏显示,没有窗口边框等。程序启动后,可以通过按ctrl + f来完成此操作。我想以编程方式执行此操作,因为我需要它在没有任何人工干预的情况下进入全屏模式。

我的猜测是,我需要一些如何获取窗口的句柄,然后向其发送类似于" ctrl + f"键的事件。

如果有什么不同,则好像flashplayer是gtk应用程序,并且我安装了pygtk的python。

更新(我使用的解决方案...感谢ypnos的回答):

./flashplayer http://example.com/example.swf & sleep 3 && ~/xsendkey -window "Adobe Flash Player 10" Control+F

解决方案

实际上,我很久以前就做过,但这并不算小。我们所做的是使用Sawfish窗口管理器,并编写了一个钩子来识别flashplayer窗口,然后剥离所有装饰并将其全屏捕捉。

通过从外部应用程序注册X窗口创建事件而无需使用窗口管理器,这是可能的,但是我对X11不够熟悉,无法告诉我们如何实现。

另一种选择是编写一个pygtk应用程序,该应用程序将独立的Flash Player嵌入gtk.Socket内,然后自行调整大小。经过一番思考,这可能是我们最好的选择。

我们可以使用专用的应用程序将击键发送给窗口管理器,如果该窗口作为屏幕上的活动窗口启动,则应将其传递给闪存。但是,由于启动Flash和显示窗口之间存在延迟,因此这很容易出错。

例如,脚本可以执行以下操作:
Flashplayer * .swf
睡眠3 && xsendkey Control + F

可以在以下位置找到应用程序xsendkey:http://people.csail.mit.edu/adonovan/hacks/xsendkey.html
如果没有给定特定的窗口,它将把它发送到由窗口管理器处理的根窗口。我们还可以尝试使用xprop或者与其相关的一些东西先找出Window ID。

另一个选项是窗口管理器,它可以记住设置并自动应用它们。例如,Fluxbos提供了此功能。如果flashplayer支持调整大小,则可以将fluxbox设置为使Window不带有装饰,并将其拉伸到整个屏幕。这也不太好,因为它可能会影响我们打开过的所有Flash Player窗口。

nspluginplayer --fullscreen src=path/to/flashfile.swf

来自http://gwenole.beauchesne.info//en/projects/nspluginwrapper

我已经使用openbox使用了与bmdhacks提到的机制类似的机制来完成此操作。我从中注意到的是,独立Flash播放器在最大化未修饰窗口中的全屏性能比同一个播放器差得多。 (令人讨厌的是,由于菜单栏的原因,它没有正确地全屏显示)。我想知道如何使用自定义gtk主题运行它以使菜单不可见。不过,这只是性能问题。如果全屏目前可以正常运行,那么它就不必要地复杂了。我在OLPC XO上运行,性能在那儿更成问题。

我对nspluginplayer的运气不太好(我认为是越野车)。

最终,我可以奢侈地制造正在运行的闪存,因此我可以简单地将代码放入闪存本身。同样,由于我们可以将Flash嵌入Flash中,因此应该可以制作一个小的存根swf,该存根swf会自动全屏显示并包含目标sfw。

我们必须使用Acton脚本3 cmd:

stage.displayState = StageDisplayState.FULL_SCREEN;

请参阅Adobe Action script 3编程。

但请注意:在全屏模式下,我们将失去显示性能!

我有这个问题...在Linux下更多!!!