实现ppt幻灯片播放倒计时

news/2024/11/25 20:35:16/

需求:为控制会议时间,采取ppt幻灯片播放倒计时的办法,倒计时5分钟。

分析:用EnumWindows枚举窗口,发现PPT窗口类名有三种:PP12FrameClass、MS-SDIb、screenClass。其中screenClass代表全屏播放窗口。

设计思路:在timer控件中用FindWindow检查有无screenClass的窗口,用TimeSpan倒计时。

设计成一个托盘程序,用一个notifyIcon和contextMenuStrip关联。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;namespace pptClock
{  //使用说明:用于PPT倒计时的winform。将播放的PPT文件名最后加上数字,表示播放限时的分钟数。若数字为0或无数字表示不限时。public partial class Form1 : Form{ //相关的win32 api[DllImport("user32.dll")]private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);[DllImport("user32.dll")]private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);       [DllImport("user32.dll", EntryPoint = "FindWindow")]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);public const int WM_CLOSE = 0x10;[DllImport("user32.dll", EntryPoint = "SendMessageA")]public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);//全屏播放PPT窗口信息public struct WindowInfo{public IntPtr hWnd; //ppt窗口句柄public string szWindowName;//窗口标题public string szClassName;//类名:screenClass ,实际没有用。 public int timeL; //播放限时,从文件名中获取
        }              public bool hasscreenClass()  //是否有全屏播放PPT
        {bool yn = false;IntPtr hwnd = FindWindow("screenClass", null);if (hwnd != IntPtr.Zero)//有全屏的PPT
            {yn = true;//则将窗口信息保存到wndfullscreen中StringBuilder sb = new StringBuilder(256);//get hwndwndfullscreen.hWnd = hwnd;//get window name
                GetWindowTextW(hwnd, sb, sb.Capacity);wndfullscreen.szWindowName = sb.ToString();//get window class
                GetClassNameW(hwnd, sb, sb.Capacity);wndfullscreen.szClassName = sb.ToString();              Match result = Regex.Match(wndfullscreen.szWindowName.ToLower(), @"\d{1,2}(?=.ppt)", RegexOptions.RightToLeft);string r = result.Value;int timeL;if (r != ""){timeL = int.Parse(r);}else{timeL = 0;}wndfullscreen.timeL = timeL;}return yn;}WindowInfo wndfullscreen = new WindowInfo();//用于保存正在全屏播放的窗口信息TimeSpan ts = new TimeSpan(0); //保存播放倒计时       bool playflag = false; //播放flag;bool rtimeflag = false; //是否对播放的ppt限时的flag;public Form1(){InitializeComponent();}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){this.Close();}private void Form1_Load(object sender, EventArgs e){//this.Hide = true;this.ShowInTaskbar = false;          timer1.Interval = 1000;       this.Top = 0;Rectangle ScreenArea = System.Windows.Forms.Screen.GetBounds(this);int width1 = ScreenArea.Width; //屏幕宽度int width2 = this.Width;this.Left = width1 - width2-100;//定位到屏幕右上角timer1.Enabled = true; //开始计时this.TopMost = true;//显示在最前
            }private void timer1_Tick(object sender, EventArgs e){if (playflag == false && hasscreenClass())//说明是刚开始播放
            {playflag = true;int timeL = wndfullscreen.timeL;if(timeL >0 ){rtimeflag = true; //表明要对本ppt进行倒计时 ts = new TimeSpan(0, wndfullscreen.timeL,0); //设定倒计时时间
                }       }if (playflag == true && rtimeflag == true) //正在播放且需要进行限时
            {ts = ts.Subtract(new TimeSpan(0, 0, 1));//倒计时,每隔一秒减去一秒String str = ts.Minutes.ToString() + ":" + ts.Seconds.ToString();this.label1.Text = str;}else //不限时,则显示时钟
            {String str = DateTime.Now.Hour.ToString() + ":"+ DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();this.label1.Text = str;}//用户提前退出pptif (playflag == true && !hasscreenClass()){playflag = false;rtimeflag = false;}//倒计时结束if (ts.TotalSeconds < 0.0  && hasscreenClass())//当倒计时完毕
            {IntPtr hwnd_win = wndfullscreen.hWnd;SendMessage(hwnd_win, WM_CLOSE, 0, 0);//发送退出消息playflag = false;rtimeflag = false;}}private void 设置ToolStripMenuItem_Click(object sender, EventArgs e){//选择播放目录    string fullfname, extension;string path = string.Empty;System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog();if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK){path = fbd.SelectedPath;}if (path != string.Empty){DirectoryInfo di = new DirectoryInfo(path);              foreach (var fi in di.GetFiles()){extension =fi.Extension.ToLower();if(extension == ".ppt" || extension == ".pptx"){try{fullfname = fi.FullName;//修改文件名加上“限时”if (fullfname.Contains("安全环保部")){fi.MoveTo(fullfname + "_限时8" + extension);}else{fi.MoveTo(fullfname + "_限时5" + extension);}//打开目录
                            System.Diagnostics.Process.Start(fi.DirectoryName);}catch { }}}}}}
}

 补充:增加了可拖动窗口的代码如下:

//处理拖动
protected override void WndProc(ref Message m)
{
if(m.Msg == 0x0201){//鼠标左键按下
m.Msg = 0x00A1; //更改消息为非客户区按下鼠标
m.LParam = IntPtr.Zero; //默认值
m.WParam = new IntPtr(2); //鼠标放在标题栏内

}
base.WndProc(ref m);
}

 



转载于:https://www.cnblogs.com/pu369/p/9930842.html


http://www.ppmy.cn/news/502921.html

相关文章

如何在PPT中制作实时时钟

1、在网上下载好实时时钟flash&#xff0c;将其与新建好的PPT放入同一个文件夹下 2、找到文件-->选项-->快速访问工具栏-->常用命令选择‘开发工具选项卡’-->其他控件-->添加-->确定 3、点击其他控件-->选择Shockwave Flash Object 在PPT上画一部分区域 …

PPT+VBA实现计时(倒计时)展示

今天碰到这样一个需求&#xff1a;在某个大屏上显示距离过去的某个时间点已经经过了**天**小时**分**秒&#xff0c;类似这样的需求还有比如&#xff1a;离某个重大活动还有**天**小时**分**秒。 对于程序员来说&#xff0c;第一反应是写个小软件全屏显示&#xff0c;但实际上…

ppt倒计时器制作方法

有很多使用PPT的人都想自己的PPT文件能有个倒计时器&#xff1a; 第一&#xff1a;可以在百度上搜索一下ppt倒计时器&#xff0c;很多相应的软件&#xff0c;这里就不多说了&#xff0c;下面介绍怎么在PPT里制作PPT倒计时器! 第二&#xff1a;自己在PPT中应用文本框做一分钟PPT…

在PPT中显示时间以提醒演讲者控制时间

相信很多朋友在演讲或培训的时候&#xff0c;都有时间控制不好的烦恼。我参加了一次培训&#xff0c;看到在ppt的左下角会显示时间&#xff0c;这是一个比较好的办法。回来后我到网络上搜寻了一下&#xff0c;如法炮制&#xff0c;用时间控件实现了这个功能。那究竟是如何实现呢…

wpsppt放映时间_利用WPS演示制作PPT计时器的两种方法

在大家PPT演讲的时候&#xff0c;是不是经常因为把握不好时间而尴尬呢?PPT计时器的实现可以帮你轻松搞定这些小问题!本文给大家推荐两种简单快捷的利用WPS演示制作PPT计时器的方法。 通过嵌入Flash计时动画实现PPT计时器 1、准备好一个Flash计时动画&#xff0c;打开PPT文件后…

在一起计时器_三种在PPT里制作计时器的方法,超详细!超漂亮!

点击上方蓝字“课件研究所”关注公众号 即可免费获取500套说课模板下载链接 大家好,我是路加。 昨天的计时器教程发出来之后,阅读量前所未有的惨淡。 深刻反思了一晚上,也没想明白。 是因为我提前放出了源文件,所以大家不关心制作方法了吗? 还是因为其实大家本来就不关心制…

PPT计时软件(可手动、可自动,支持OFFICE、WPS)

这款倒计时软件&#xff0c;是我根据多年的活动现场经验编写的. 使用示意图如下&#xff1a; 使用说明&#xff1a; 1.该倒计时软件支持OFFICE和WPS自动计时&#xff0c;软件可自动检测PPT的播放状态自动开始计时&#xff0c;ppt退出播放停止计时&#xff0c;此模式适合各种会…

Office PowerPoint 计时器

Office PowerPoint 计时器 安装、配置、参数及使用说明&#xff1a; 下图是设置参数时界面&#xff1a; 下图是摸拟显示或运行时显示的界面 一、安装、配置 1、解压PPTTimerApp.rar文件后&#xff0c;运行setup.exe安装文件 安装时windows系统需要同时安装以下软件&#xf…