读取操纵PPT文件 近期做到一个关于ppt操作的模块,始终得不到解决,,望各位高手指点 期望的功能如下: 1 读取ppt文件 2 能在一定的区域内显示出来,可以设置时间来自动播放。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/t/20040925/16/3408617.html http://topic.csdn.net/u/20070123/12/64cd272c-579e-45ed-b707-0d2c1c2a1544.html 一开始想的是用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 http://www.aippt.cn 关于Using 命名空间的疑问 请问ConfigurationManager的用法 使用.Net访问Office编程接口 资料寻找 关于 手机收费的 软件编写提问。 最简单的问题 如何改变屏幕颜色? 怎么办?? 初学Winform,求一段数据库连接语 WEB嵌入meida player播放文件流请教! 各位兄弟,小弟求一sql语句,比较两个表相同的字段 axWebBrowser1打开ppt文件的问题 PPT 里如何插入Excel表格
信息来源:http://www.cnblogs.com/dlwang2002/archive/2007/10/29/941000.html