原文: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. asp.net模板控件示例

    原文:asp.net模板控件示例 模板控件允许将控件数据与其表示形式相分离,模板化控件不提供用户界面. 编写它则是为了实现一个命名容器以及包含属性和方法可由宿主页访问的类,MSDN是这样解释的. 下面 ...

  2. SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)

    人活着系列之Streetlights Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 人活着假设是为了家庭,亲情----能够说 ...

  3. [改变自己wordpress.2]给wordpress加上简单debug sql调试.

    或者说,同事. 需要帮她打印出来sql 调试输出到页面sql 在这里,我们使用插件或一个的方式来启动配置文件wordpress的debug 在插件文件夹 wordpress/wp-content/pl ...

  4. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...

  5. 【原创】构建高性能ASP.NET站点之三 细节决定成败

    原文:[原创]构建高性能ASP.NET站点之三 细节决定成败 构建高性能ASP.NET站点之三 细节决定成败 前言:曾经就因为一个小小的疏忽,从而导致了服务器崩溃了,后来才发现:原来就是因为一个循环而 ...

  6. 接口设计ie常见的问题

    问题叙述性说明: 当围绕一个简单的页面布局设计.我发现了一个奇怪的相对布局问题. 同的方式围绕布局接口.它是利用左div浮动.对div设定 margin-left这样达到的效果.实现了chrome浏览 ...

  7. 如何实现Web聊天

    假设你web聊天不知道这件事情,那么最好的方法可能是:openfire+jsjac openfire它是java做开源xmppserver,jsjac它是javascript做开源的Web版本xmpp ...

  8. Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】

    前言 最近在研究Red5 流媒体服务框架,官网上的信息足以让一个新手入门 有官方參考手冊 -- 高速了解red5的相关信息 有Red5 on Stackoverflow  -- 在上面能够提问或者回答 ...

  9. Codeforces 487C. Prefix Product Sequence 逆+结构体

    意甲冠军: 对于数字n, 他询问是否有1~n置换 这种布置能够在产品上模每个前缀n 有可能0~n-1 解析: 通过观察1肯定要在首位,n一定要在最后 除4意外的合数都没有解 其它质数构造 a[i]=i ...

  10. Windows下一个MySQL有些错误的解决方法

    1.无论是什么提示.我们有一个直接看错误日志.由于它描述了最具体描述错误日志. 于MySQL安装文件夹中找到 my.ini简介 看日志保存路径 2. 我的错误是[ERROR] Fatal error: ...