近期做到一个关于ppt操作的模块,始终得不到解决,,望各位高手指点  期望的功能如下:     1 读取ppt文件
     2 能在一定的区域内显示出来,可以设置时间来自动播放。
  

解决方案 »

  1.   

    http://topic.csdn.net/t/20040925/16/3408617.html
      

  2.   

    http://topic.csdn.net/u/20070123/12/64cd272c-579e-45ed-b707-0d2c1c2a1544.html
      

  3.   

    一开始想的是用webform来做,用iframe加载文件,把ppt文件另存成htm,然后播放。 可是后来发现,的程序不大容易控制,所以改用winform。在winform下也有不同的选择,首先可以直接生成一个Office的PPT的Appellation对象,然后随你怎么播放都可以了,还能动态编辑。不过对于小项目,觉得这样有点麻烦了。后来就选择使用webbrowder控件来播放。WebBrowser控件真是个好玩意,出了htm,很多格式都没问题。图片啊,word啊什么的都能跑。Ppt自然也可以,flash、avi也行(嵌入一次就好了), 除了第一次播放的时候有个询问是否打开,以后播放的问题不大。Webbrowser控件之所以能播放,其实还是调用的客户端上安装的组件。但是在真正做的时候就遇到一个问题:每次播放的PPT都只到第二页,然后就不能自动循环播放了。另存了pps文件,也是不行。后来发现,只要用鼠标点击一次下一页,其他就没有问题了。解决的办法有两个1:调试为什么停下来不播放了,解决根本。   在OnNavigating事件里面发现,每次播放ppt时的地址居然是这样的:path/xx.ppt#3, 后边的3就是当前页号。这个倒是和播放htm传个id什么的类似。根据这个信息,主动调用到某一个页面是没有问题了。这是个意外的发现。继续调试。从页面第一次加载,看起来一切正常,就是播放到第二个之后停止自动播放。    根据传地址的格式,我尝试一开始就播放第二页,可是结果一样,第三页的时候停止。看来,可不是从第几页开始的问题,而是他就只能播放到第二页,然后停止。    这时候我想看看能不能通过webbrowser所加载的组建来处理。通常情况下,比如加载一个htm页面,那么webbrowser.Document对象就是htm的内容,然后可以遍历整个htm的对象,做一些操作。那么,如果webbrowser加载的是PPT的话,这个Document属性是什么呢?是否可以通过这个对象来执行ppt播放呢?他应该提供这样恶API的。    于是跟踪看看,结果发现它什么也不是,是个null。在webbrowser中找不到播放ppt的对象,也就是无法调用其api了(在webbrowser其他的属性里面,能找到一个base的docm对象,但是也无法使用)。2:模拟鼠标点击,也算是解决了。   第一种方法不能解决,就只有下x一点,模拟鼠标点击了。在每次加载完PPT之后,模拟鼠标点击“下一页”。这个按钮就在整个webbrowser控件的右下角。   模拟方法比较简单,就是引入user32.dll,然后组装一下就好了。   这是个简单的代码:       public class VirtualMouse    {        [DllImport("user32.dll")]        static extern bool SetCursorPos(int X, int Y);        [DllImport("user32.dll")]        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);        [Flags]        public enum MouseEventFlag : uint        {           Move = 0x0001,            LeftDown = 0x0002,            LeftUp = 0x0004,            RightDown = 0x0008,            RightUp = 0x0010,            MiddleDown = 0x0020,            MiddleUp = 0x0040,            XDown = 0x0080,            XUp = 0x0100,            Wheel = 0x0800,            VirtualDesk = 0x4000,            Absolute = 0x8000        }        public void SetCursorPosition(int x, int y)        {            VirtualMouse.SetCursorPos(x, y);        }        public void MouseEvent(MouseEventFlag flag)        {            mouse_event(flag, 0, 0, (uint)0, (UIntPtr)0);         }         }   剩下的问题就简单了,直接计算一下那个按钮的位置,然后模拟点击,done。   VirtualMouse vm = new VirtualMouse();            vm.SetCursorPosition(x, y);            vm.MouseEvent(VirtualMouse.MouseEventFlag.LeftDown);            System.Threading.Thread.Sleep(500);            vm.MouseEvent(VirtualMouse.MouseEventFlag.LeftUp);
    信息来源:http://www.cnblogs.com/dlwang2002/archive/2007/10/29/941000.html
      

  4.   

    http://www.aippt.cn