请教:winform如何播放资源中的flash(swf)文件

kucao 2015-11-26 10:19:14
我们公司有个flash文件,不希望随便拷贝播放,只有插入对应的加密锁才能播放,但是加密锁没有对应flash的驱动,所以没办法要在外面加一个winform的程序,通过winform验证加密锁匹配,然后播放资源文件中的swf文件,swf文件必须是打包到exe里面的,如果外挂在外面就没意义了。
在之前的帖子里有人指点说 Shockwave Flash Object 控件能够播放swf文件,但是我不知道如何调用资源中的swf文件?

我的swf文件叫: 02.swf, 添加到资源里的名字叫: _02
我用下面方法调用
flashBox.Movie = Properties.Resources._02
提示无法将 byte[] 转换成string
写成下面这个又无法播放
flashBox.Movie = Properties.Resources._02.ToString();

有知道的请给个指点, 非常感谢
...全文
422 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
周先到 2017-10-24
  • 打赏
  • 举报
回复
我的还是不行
kxyzjm62 2015-11-29
  • 打赏
  • 举报
回复
需要Flash才能播放
kucao 2015-11-29
  • 打赏
  • 举报
回复
非常感谢两位的回答,用了 kxyzjm62 的方式,调试可以播放,但是如果把生成的exe文件从 bin目录下拷贝到其他地方运行时提示下面错误: AxInterop.ShockwaveFlashObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件 不明白是怎么回事? 是我调用的ShockwaveFlashObjects没有一起打包吗? 还是怎么回事啊? 请明白的朋友给解答一下,非常感谢!
kucao 2015-11-29
  • 打赏
  • 举报
回复
引用 4 楼 kxyzjm62 的回复:
需要Flash才能播放
麻烦能回答的详细点吗? 我没太明白, 那个swf文件已经打包到资源里了, 是调用那个FLASH控件,需要先注册一下吗? 我已经注册了我调用的那个 ocx文件了 regsvr32 c:\windows\sysWOW64\Macromed\Flash\Flash32_19_0_0_226.ocx 但是还是不行,麻烦能回答的详细点吗? 非常感谢
蒋晟 2015-11-27
  • 打赏
  • 举报
回复
可以直接从内存载入 void LoadFlash(LPUNKNOWN player, LPVOID data, ULONG size) { COleStreamFile streamFile; BOOL result=streamFile.CreateMemoryStream(); if(result){ CArchive ar ( &streamFile, CArchive::store ); ar.Write(data,size); ar.Close(); streamFile.SeekToBegin(); CComQIPtr<IPersistStreamInit> playerStreamLoader(player); if(playerStreamLoader!=NULL){ playerStreamLoader->InitNew(); playerStreamLoader->Load(streamFile.GetStream()); } } } 当然这么加载的话没有实现IMoniker,你的Flash的base url会是about:blank,action script里面有访问相对URL的脚本的话,要去实现IMoniker和提供相对url资源的下载服务。 另外一个方法是临时跑一个http服务器,加载Flash完就关掉。
kxyzjm62 2015-11-27
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace FLS { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void InitFlashMovie(AxShockwaveFlashObjects.AxShockwaveFlash flashObj, byte[] swfFile) { using (MemoryStream stm = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stm)) { writer.Write(8 + swfFile.Length); writer.Write(0x55665566); writer.Write(swfFile.Length); writer.Write(swfFile); stm.Seek(0, SeekOrigin.Begin); flashObj.OcxState = new AxHost.State(stm, 1, false, null); } } } private void Form1_Load(object sender, EventArgs e) { byte[] data = Properties.Resources.虚拟灭火414改; InitFlashMovie(axShockwaveFlash1, data); this.axShockwaveFlash1.Left = 0; this.axShockwaveFlash1.Top = 0; this.axShockwaveFlash1.Height = this.Height; this.axShockwaveFlash1.Width = this.Width; this.axShockwaveFlash1.Focus(); } private void Form1_Paint(object sender, PaintEventArgs e) { this.axShockwaveFlash1.Focus(); this.axShockwaveFlash1.Left = 0; this.axShockwaveFlash1.Top = 0; this.axShockwaveFlash1.Height = this.Height; this.axShockwaveFlash1.Width = this.Width; } private void timer1_Tick(object sender, EventArgs e) { this.axShockwaveFlash1.Focus(); } } }

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧