原文:WebBrowser控件应用:播放PPT文件

一开始想的是用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);

WebBrowser控件应用:播放PPT文件的更多相关文章

  1. 使用opencv在Qt控件上播放mp4文件

    文章目录 简介 核心代码 运行结果 简介 opencv是一个开源计算机视觉库,功能非常多,这里简单介绍一下OpenCV解码播放Mp4文件,并将图像显示到Qt的QLabel上面. 核心代码 头文件 #i ...

  2. VC++ 使用WebBrowser控件中html文件以资源形式加载

    . . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...

  3. C# Winform WebBrowser控件

    C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...

  4. C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为

    在 CSDN 上经常看到以下两个问题:1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 CHtmlView 在内),如何可以把该控件的三维边框禁止掉?2.在 MFC 应用程 ...

  5. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

  6. C#中的WebBrowser控件的使用

    0.常用方法   Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(st ...

  7. <总结>delphi WebBrowser控件的使用中出现的bug

    Delphi WebBrowser控件的使用中出现的bug:  1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowse ...

  8. C# WebBrowser控件使用教程与技巧收集

    常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(strin ...

  9. Webbrowser控件判断网页加载完毕的简单方法 (转)

    摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,W ...

随机推荐

  1. javascript中的“向量”

    什么是向量 向量通常指一个有长度有方向的量.向量使所有的移动和空间行为更容易理解和在代码中实现.向量可以相加,缩放,旋转,指向某物体. 在javascript中,一个方向和长度(即向量)在二维空间中可 ...

  2. css3 shadow为了实现各种漂亮的阴影效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  3. Objective-C语言的一些基础特性

    OC与C++.Java等面向对象语言有很多的类似之处,不过在很多方面也是有所差别的.若是用过某一种面向对象语言,那么就很容易理解OC语言所用的范式和模板了.但是在语法使用上,也许会显得陌生.因为OC语 ...

  4. POJ 2828 Buy Tickets(排队问题,线段树应用)

    POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意:  排队买票时候插队.  给出一些数对,分别代表某个人的想要插入的位 ...

  5. Windows Server 2012启用Windows功能NetFx3时出错解决方法

    作者:冰点阳光 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://baohua.me/operating-system/windows-server-2012- ...

  6. hdu 4912 Paths on the tree(lca+馋)

    意甲冠军:它使树m路径,当被问及选择尽可能多的路径,而这些路径不相交. 思考:贪心,比較忧伤.首先求一下每对路径的lca.依照lca的层数排序.在深一层的优先级高.那么就能够贪心了,每次选择层数最深的 ...

  7. Linux-2.6.32内核编译流量计数器nfacct

    最近一直想看到一本书<一个Jiegeng华>.而技术不依赖书.但是,这并不表示我IT技术没有兴趣.事实证明,,当我无法理解的沧桑.肮脏的领导者无法理解的心理.自我可惜无法理解它处处感受到脏 ...

  8. Putty设置自己主动两次登录

    有时你想登录到serverA,但serverA白名单,你刚刚从山寨机B登录了,所以每次你要登录到serverA.您必须先登录到山寨机B.然后登录到serverA. 我们能够用Putty的local p ...

  9. 学生表sid,sname,结果表cid,cname,学生成绩表sid,cid,cscore,最高要求的分数输出候补课程专门命名

    --1.建表SQL: --学生表: -- Createtable createtable STUDENT ( SID   NUMBERnotnull, SNAME NVARCHAR2) ) table ...

  10. WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法

    原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...