Wrox Programmer Forums
Go Back   Wrox Programmer Forums > Visual Basic > VB 6 Visual Basic 6 > VB How-To
|
VB How-To Ask your "How do I do this with VB?" questions in this forum.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the VB How-To section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old December 5th, 2006, 01:20 PM
Registered User
 
Join Date: Dec 2006
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Default using VB to extract .swf from powerpoint

I am a flash expert, I have a client that needs swf files that are embedded in microsoft powerpoint. I have the information about how, but it is a little more in-depth with the VB than I can handle alone. The article on how is below, can anyone tell me how to actually use this information? I'd appreciate the help.

Article:

We had a Power Point Presentation file given us a few days ago with an
embedded flash file which we needed to extract to use on the website.


We couldn't find any way to do this. We could drag and drop the swf
onto another presentation, we could even drag the object onto the
desktop. This created a scrap file which was rather annoying.


However, this led me to the discovery of the NeverShowExt registry key.
I managed to rename the scrap to a have a .swf extension, but still no
cookie.


So I started digging around the scrap to see if I could find the swf
object inside and after reading an introduction to SWF I found what I
was looking for.


Now I just wanted to extract this binary data from the scrap file, and
I wanted to do it the hard way!


So I wrote a small amount of code to look through a file and extract
the goodies. The main part of the code was to take a byte array and
copy that into my SWF struct - using the
System.Runtime.InteropServices.Marshal class.


After a bit of messing around the code runs like a dream. The final
executable takes 2 parameters the first is the file containing the SWF
and the second is the file to write the SWF.


using System;
using System.IO;
using System.Runtime.InteropServices;


namespace FlashExtractor
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//assume param 1 is the location of the shockwave file
byte[] file = new byte[Marshal.SizeOf(typeof(swf))];


FileStream fs = File.Open(args[0], FileMode.Open,
FileAccess.Read,FileShare.Read);
int i=0;
//go through the file byte by byte
//could I have seeked this?
while (i<fs.Length-8)
{
//set the position in the file
fs.Position = i;
//read off 8 bytes worth of data to put into the swf

struct
fs.Read(file,0, 8);
IntPtr ptr = Marshal.AllocHGlobal(file.Length);
Marshal.Copy(file, 0x0, ptr, file.Length);
swf s = (swf) Marshal.PtrToStructure(ptr, typeof(swf));


// if the struct header is FWS then we may have a flash

file
if (s.header1==0x46 && s.header2==0x57 &&

s.header3==0x53)
{
//we have the identity of a flash file
Console.WriteLine("Found the header of a flash

file");
Console.WriteLine("Version: {0}", s.version);
Console.WriteLine("Size: {0}", s.size);


//if the size of the fws is < length of the file
if (s.size + i<=fs.Length)
{
Console.WriteLine("Attempting to write

the file to {0}",
args[1]);
FileStream fw = File.OpenWrite(args[1]);


Console.WriteLine("Allocation byte array

of {0} length", s.size);
byte[] b=new byte[s.size];


Console.WriteLine("Reseting the file

back to position: {0}", i);
fs.Position = i;


Console.WriteLine("Reading from {0} to

{1}", i, s.size);
fs.Read(b,0,(int)s.size);


Console.WriteLine("Writing byte array

back to disk");
fw.Write(b, 0, b.Length);


fw.Close();
break;
}
else
{
Console.WriteLine("The file is not of

the correct size file: {0},
{1}", s.size, fs.Length);
}


}
i++;
}
fs.Close();


}


}


[StructLayout (LayoutKind.Sequential, Pack = 0x1)]
struct swf
{
public byte header1;
public byte header2;
public byte header3;
public byte version;
public UInt32 size;
}



}


In theory this could be used to extract many forms of embedded binary data.
 
Old December 5th, 2006, 01:50 PM
Friend of Wrox
 
Join Date: Jun 2003
Posts: 2,189
Thanks: 5
Thanked 59 Times in 57 Posts
Send a message via MSN to gbianchi
Default

hi there..

that's look like c# code. you have to paste it inside a console project and compile it.. looks like the exe will run in console mode and will receive the parameters and get the swf out of the binary file...

HTH

Gonzalo





Similar Threads
Thread Thread Starter Forum Replies Last Post
using an SWF or an MOV in powerpoint? nickgie Flash (all versions) 4 March 20th, 2014 08:59 PM
how to extract words from a string in VB.NET? bhavna General .NET 1 January 18th, 2007 01:40 AM
Trying dbf file to extract in vb.net 2002 kau_shuk VS.NET 2002/2003 1 November 9th, 2006 09:06 PM
powerpoint and c# dotnetprogrammer VS.NET 2002/2003 0 October 17th, 2005 05:06 AM
how to open\save Powerpoint from VB keepsmiling_sruti VB How-To 0 July 29th, 2005 07:54 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.