VC 操作PowerPoint 获取PPT相关信息
- 检测PowerPoint是否安装
- 获取当前激活的ppt总页数;
3 .获取当前激活的ppt的文件名及全路径
4.获取ppt的操在这里插入代码片
作频率 `
// MyPPtinfoProjectDlg.cpp : 实现文件
//
#include “stdafx.h”
#include “MyPPtinfoProject.h”
#include “MyPPtinfoProjectDlg.h”
#include “afxdialogex.h”
using namespace std;
//#pragma comment(lib,“HookDll.lib”) //静态加载动态链接库
HHOOK g_hHook ;
HWND g_hwnd ;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//卸载钩子
void UnHookWindows()
{
EndDialog(g_hwnd,NULL);//关闭窗口
UnhookWindowsHookEx(g_hHook);//卸载HOOk函数
}
// CMyPPtinfoProjectDlg 对话框
//参考 https://ask.csdn.net/questions/716517
//法一 这样只是局部钩子(现已经将该函数定义为动态链接库)
钩子处理
//LRESULT __stdcall KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam)
//{
// if (nCode == HC_ACTION)
// {
// // 此过程只转发消息,并不阻断消息,故而都要CallNextHookEx
// if (wParam == VK_NEXT || wParam == VK_RIGHT || wParam == VK_ESCAPE)
// {
// ::PostMessage(g_hwnd, QUEUE_PROGRAM_ACCELERATOR_MSG, wParam, 0);//为了让成员函数去处理
// }
// }
// return CallNextHookEx((HHOOK)g_hHook, nCode, wParam, lParam);
//}
-
CMyPPtinfoProjectDlg::CMyPPtinfoProjectDlg(CWnd* pParent /
=NULL/)
-
CDialogEx(CMyPPtinfoProjectDlg::IDD, pParent)
, m_strPptTitle(_T(""))
, m_strPptTotalPages(_T(""))
, m_strPptCurPageNum(_T(""))
, m_strPptConsuTime(_T(“0”))
, m_strPageTurnFrequency(_T(“0”))
, m_strFilePath(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nPageDownCount = 0;
m_fTotalTime = 0;
m_fPPtFre = 0.00;
m_nAnyPageCusTime.push_back(0);
m_nPPtOpenStatus = false ;
m_bEndStatus = false;
m_bFirstStart = true ;
m_strPPTName = _T("");
m_strServerUrl = _T("http://eus.chsedu.cn/");
}
void CMyPPtinfoProjectDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_PPTHeadEdit, m_strPptTitle);
DDX_Text(pDX, IDC_PPTTotalPageEdit, m_strPptTotalPages);
DDX_Text(pDX, IDC_PPTCurPageNumEdit, m_strPptCurPageNum);
DDX_Text(pDX, IDC_PPTTimeConsumEdit, m_strPptConsuTime);
DDX_Text(pDX, IDC_PageTurnFrequEdit, m_strPageTurnFrequency);
DDX_Text(pDX, IDC_PPTName, m_strPPTName);
DDX_Text(pDX, IDC_FilePath, m_strFilePath);
DDX_Text(pDX, IDC_ServerAddressEdit, m_strServerUrl);
}
BEGIN_MESSAGE_MAP(CMyPPtinfoProjectDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMyPPtinfoProjectDlg::OnBnClickedButton1)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
//ON_MESSAGE(QUEUE_PROGRAM_ACCELERATOR_MSG, &CMyPPtinfoProjectDlg::PretendKeyboardAccelerator) //自定义处理钩子程序发来的消息处理函数
ON_WM_DESTROY()
ON_WM_TIMER()
ON_WM_CREATE()
END_MESSAGE_MAP()
// CMyPPtinfoProjectDlg 消息处理程序
BOOL CMyPPtinfoProjectDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
GetWorkPath();
DeleteOldSoft(); //删除旧版本程序
//获取软件版本号
CString strExeWorkPath = g_strSoftwareWorkPath + "\MyPPtinfoProject.exe" ;
m_strCurrSoftwarEversion = CToolDlg.GetSoftVersion(strExeWorkPath).c_str();
//设置配置对话框标题
CString strDlgTitle = _T("PPT信息获取 ") + m_strCurrSoftwarEversion ;
this->SetWindowText(strDlgTitle);
//设置钩子,用于监控键盘消息
SetHook(m_hWnd); //2020.11.24 静态(隐身)方式加载动态链接库
SetTimer(TIMER1, 10000, 0); //启动定时器1(对当前软件进行版本检测—在线升级)
//if(!IsOpenPowerPoint())
//{
// return false;
//}
//else
//{
// //法一 没有定义为动态链接库 在非激活本软件窗口下捕获不到Pagedown、Esc ->等按钮消息
// /* DWORD nThreadid = GetCurrentThreadId();
// //g_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc,NULL,GetCurrentThreadId()
// g_hHook = SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, AfxGetApp()->m_hInstance, nThreadid);
// if(g_hHook == NULL)
// {
// AfxMessageBox("安装钩子失败", MB_OK);
// }*/
// //2020.11.23 以动态方式加载lib文件
// //动态链接库的使用 ,处理非激活本窗口情况下捕获Pagedown、Esc ->等按钮消息
// //g_hwnd = m_hWnd;
// //typedef void (* HOOKPROC)(HWND hwnd);
// //HOOKPROC lpfnDllFuncHook;
// //HMODULE hDLL = LoadLibrary(_T("HookDll.dll"));//加载动态链接库
// //if (hDLL != NULL)
// //{
// // lpfnDllFuncHook = (HOOKPROC)GetProcAddress(hDLL, "SetHook");
// // if (lpfnDllFuncHook != NULL)
// // {
// // // call the function
// // lpfnDllFuncHook(m_hWnd);
// // }
// //}
// //2020.11.24 静态(隐身)方式加载动态链接库 安装钩子(用来监控键盘消息)
// SetHook(m_hWnd);
// SetTimer(TIMER2, 1000, 0);
//}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 创建PPT应用,启动powerpoint程序。
BOOL CMyPPtinfoProjectDlg::IsOpenPowerPoint()
{
COleException exception;
LPCSTR str = “Powerpoint.Application”;
if(!App.CreateDispatch(str, &exception))
{
AfxMessageBox(exception.m_sc, MB_SETFOREGROUND);
return false;
}
//App.put_Visible(true);
return true;
}
// 2020.11.25 tian
//程序启动删除旧版本的程序
int CMyPPtinfoProjectDlg::DeleteOldSoft()
{
//欲查找的文件地址;
CString strFilePath = g_strSoftwareWorkPath +"\*.exe" ;
long lHandle; //用于查找的句柄;
struct _finddata_t fileinfo; //存储文件信息的结构体;
lHandle = _findfirst(strFilePath, &fileinfo); //第一次查找;
if (lHandle == -1)
{
return -1;
} //没有找到就返回-1;
_findclose(lHandle);
CString strMainExe = g_strSoftwareWorkPath+ “\OldMyPPtinfoProject.exe” ;
//关闭句柄;
DeleteFile(strMainExe);
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMyPPtinfoProjectDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMyPPtinfoProjectDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}
//PPT信息
void CMyPPtinfoProjectDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
try
{
g_cPresentation = App.get_ActivePresentation() ;
/**********针对一个ppt打开的情况(当前PPT结束后无其它ppt为打开状态) **********************************************************************************************************/
m_nPPtOpenStatus为false 并且m_nPageDownCount为 0时 表示检查到当前ppt刚打开
刚打开已经是第一页就需要记录当前时间,并且页数加1,这个地方对总讲解时间存在影响
m_bFirstStart 为true表示程序第一次起来, 软件一直在后台运行时,已经讲完一个ppt进行下一个ppt时
m_nPageDownCount和m_nPPtOpenStatus 都恢复为初始状态
//if(m_nPPtOpenStatus == false && m_nPageDownCount == 0 )
//{
// m_nPPtOpenStatus = true ; //ppt已经打开
// RecPageDownInfo(); //记录操作次数和时间
//}
//获取文件名字、ppt总页数、ppt主标题
PptDlg.ReadPPtFileName(App );
PptDlg.ReadTotalPPtPage(App);
CString strFilePath = PptDlg.ReadPPtTitle(App);
m_strPptTotalPages = PptDlg.GetPageTotal();
m_strPptTitle = PptDlg.GetPPTTitle();
m_strPPTName = PptDlg.GetFileName();
m_strFilePath = PptDlg.GetFullFilePath();
//*******2020.11.24 针对同时打开多个ppt的情况(结束当前ppt时还存在其它ppt为打开的) ******************************************************************************************************************//
if(m_strFilePath != m_strOldFilePath )
{
SetOldFilePath(m_strFilePath);
m_strPptCurPageNum = _T("0");
m_strPptConsuTime = _T("0");
m_strPageTurnFrequency = _T("0");
m_nPPtOpenStatus = false ;
m_nPageDownCount = 0 ;
m_fTotalTime = 0 ;
m_bEndStatus = false ;
m_nPageDownTime.swap(vector<long>());//新启动一个PPT就要把前一个PPT统计时间清理
m_nAnyPageCusTime.swap(vector<long>());
//m_bFirstStart == true;
}
else if(m_strFilePath == m_strOldFilePath && m_nPageDownCount == 0 ) //处理同一个PPT讲解结束后再次打开的情况
{
//m_bFirstStart == true;
m_strPptCurPageNum = _T("0");
m_strPptConsuTime = _T("0");
m_strPageTurnFrequency = _T("0");
}
//else
//{
// //m_bFirstStart == false ; //程序首次起来标志
//}
//m_nPPtOpenStatus为false 并且m_nPageDownCount为 0时 表示检查到当前ppt刚打开
//刚打开已经是第一页就需要记录当前时间,并且页数加1,这个地方对总讲解时间存在影响
//m_bFirstStart 为true表示程序第一次起来, 软件一直在后台运行时,已经讲完一个ppt进行下一个ppt时
//m_nPageDownCount和m_nPPtOpenStatus 都恢复为初始状态,如果不加上m_bFirstStart的限制就会又记录一遍
if(m_nPPtOpenStatus == false && m_nPageDownCount == 0 )//&& m_bFirstStart == true )
{
m_nPPtOpenStatus = true ; //ppt已经打开
RecPageDownInfo(); //记录操作次数和时间
}
}
catch (CMemoryException* e)
{
}
catch (CFileException* e)
{
}
catch (CException* e)
{
//记录ppt讲解结束的时间(m_nPPtOpenStatus为true并且m_nPageDownCount大于1表示ppt讲解过,
//m_bEndStatus为false表示刚结束的ppt的结束还未计算时间 ,如果不加这个限制条件,刚结束的ppt计算频率会调用无数次)
if(m_nPPtOpenStatus == true && m_nPageDownCount >=1 && m_bEndStatus == false)
{
//结束状态
m_bEndStatus = true ;
//计算翻页频率
CalulateRate();
}
}
//m_strPptTotalPages = PptDlg.GetPageTotal();
//m_strPptTitle = PptDlg.GetPPTTitle();
//m_strPPTName = PptDlg.GetFileName();
//m_strFilePath = PptDlg.GetFullFilePath();
UpdateData(FALSE);
}
//记录PageDown 按下相关信息
void CMyPPtinfoProjectDlg::RecPageDownInfo()
{
try
{
//pageDown 被按下的次数
g_cPresentation = App.get_ActivePresentation() ;
if(g_cPresentation != NULL)
{
MessageBox(“RecPageDownInfo!”);
//记录一下当前页按下(认为是本页开始讲解)的时间
CTime time = GetCurPageDowntTime();
m_nPageDownTime.push_back(time.GetTime());
m_nPageDownCount++ ;
}
}
catch (CMemoryException* e)
{
}
catch (CFileException* e)
{
}
catch (CException* e)
{
}
//CalulateRate();
}
//获取Exe程序工作路径
CString CMyPPtinfoProjectDlg::GetSoftwareWorkPath()
{
TCHAR szPath[ MAX_PATH ] = {0};
if (::GetModuleFileName(NULL, szPath, _MAX_PATH))
{
(_tcsrchr(szPath,_T(’\’)))[1] = 0;
}
CString strExeWorkPath = szPath;
return strExeWorkPath ;
}
//记录上传信息
void CMyPPtinfoProjectDlg ::WriteLoginfo(CString pstr)
{
//获取当前时间日期
CString strCurrentTime;
CTime CurrentTime = CTime::GetCurrentTime();
strCurrentTime = CurrentTime.Format(_T("%Y-%m-%d %H:%M:%S")); //格式化日期时间
//写入.txt文件
CString strTemp = pstr + _T(",") + strCurrentTime;
CString strLogFilePath = g_strSoftwareWorkPath +_T("\\log.txt");//GetSoftwareWorkPath()+_T("\\log.txt")
std::ofstream file;
if (file.bad())
{
//MessageBox("文件打开失败!");
}
file.open(strLogFilePath, std::ios::app);
file << strTemp << "\n";
}
//计算总时间
void CMyPPtinfoProjectDlg::CalulateTotalTime()
{
//每一页ppt所需时间
int nPeriodTime = 0;
m_nAnyPageCusTime.swap(vector());//新启动一个PPT就要把前一个PPT记录的时间清空
//总时间
long lTotalTime = 0;
CString strPPTimeSize ;
strPPTimeSize.Format("%d",m_nPageDownTime.size());
MessageBox(“ppt时间数组个数:”+strPPTimeSize );
//数组里面大于1 表示刚关闭的PPT讲解了,不能是大于0(因为本程序检测到powerpoint打开就向数组中添加了一个时间,
//该时间默认为第一页ppt的时间,因为第一页ppt播放时不需要按pagedown或“—>”,关闭PPt的时候也向数组里面记录了一个时间数据)
if(m_nPageDownTime.size() >2)
{
for(int i = m_nPageDownTime.size()-1; i >= 0; i--)
{
// n页面时间 = T(n)-T(n-1) ..... 2页面时间 = T(3)-T(2), 1页面时间 = T(2)-T(1), 所以i需要大于0
if(i > 0)
{
//第n页讲解所花费时间(秒数) = T(n)-T(n-1)
nPeriodTime = m_nPageDownTime[i] - m_nPageDownTime[i-1] ;
m_nAnyPageCusTime.push_back(nPeriodTime);//每个页面演讲消耗的时间
}
}
//讲解当前ppt消耗的总时间(秒为单位)
for(int i = 0; i< m_nAnyPageCusTime.size();i++)
{
CString strMilliSecond ,strPageNum;
strPageNum.Format("%d",i+1) ;
strMilliSecond.Format("%d",m_nAnyPageCusTime[i]);
MessageBox("第 "+ strPageNum + "页ppt的消耗的时间为:" + strMilliSecond +"秒");
//消耗总时间 每页PPT不能超过10分钟,超过10分钟的不计入总时间中(林工提的)
if((m_nAnyPageCusTime[i]/60) < 10)
{
lTotalTime += m_nAnyPageCusTime[i];
}
}
}
//PPT讲解时间(秒)
if(lTotalTime > 0)
{
m_fTotalTime = lTotalTime;
}
else
{
m_fTotalTime = 0;
}
m_strPptConsuTime.Format("%.2f",(m_fTotalTime/60));
}
//计算频率
void CMyPPtinfoProjectDlg::CalulateRate()
{
try
{
g_cPresentation = App.get_ActivePresentation() ;
}
catch (CMemoryException* e)
{
}
catch (CFileException* e)
{
}
catch (CException* e)
{
//计算讲解ppt所需时间
CalulateTotalTime();
//计算翻页频率和讲解页数
//m_nPageDownCount大于1表示ppt讲解(因PPT第一页不需要按Pagedown或者"—>“按钮,所以软件检测到PowerPoint开启就默认已经到第一页ppt
//m_nPageDownCount已经为1,但是m_nPageDownCount==1并不代表ppt讲解)
if(m_fTotalTime > 0 && m_nPageDownCount > 1)
{
m_fPPtFre = (m_fTotalTime/ m_nPageDownCount) / 60; //每页消费多少分钟
m_strPageTurnFrequency.Format(”%.2f" ,m_fPPtFre);
m_strPptCurPageNum.Format("%d",m_nPageDownCount);
}
else
{
m_fPPtFre = 0.00; //每页消费多少分钟
m_strPageTurnFrequency.Format("%.2f" ,m_fPPtFre);
m_strPptCurPageNum.Format("%d",0);
}
//记录日志
m_strLogInfo = “PPT标题:”+m_strPptTitle+ " 总页数 :" + m_strPptTotalPages + " 实际讲解页数:" + m_strPptCurPageNum +" 总耗时:"+ m_strPptConsuTime +“分钟” +" 翻页频率:"+m_strPageTurnFrequency + “分钟/页”;
WriteLoginfo(m_strLogInfo);
//本次ppt结束 ,恢复ppt为未打开状态
m_nPPtOpenStatus = false ;
m_bEndStatus = false ;
m_nPageDownCount = 0 ;
m_fTotalTime = 0 ;
m_nPageDownTime.swap(vector<long>());//新启动一个PPT就要把前一个PPT统计时间清理
}
UpdateData(false);
}
BOOL CMyPPtinfoProjectDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if ( pMsg->message == WM_KEYDOWN )
{
switch ( pMsg->wParam )
{
case VK_NEXT: //pagedown
//MessageBox(“PageDown按下”);
RecPageDownInfo();
break;
case VK_PRIOR: //pageupd
break;
case VK_LEFT: //方向左键
break;
case VK_RIGHT: //方向右键
//MessageBox("Right按下");
RecPageDownInfo();
break;
case VK_ESCAPE: //Esc
// MessageBox("Esc按下");
RecPageDownInfo();
return TRUE ; //取消Esc原来的退出功能(防止按下Esc退出了本软件)
break;
case VK_UP: // 方向上键
break;
case VK_DOWN: //方向下键
break;
default:
TRACE("unknown key");
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
void CMyPPtinfoProjectDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nIDEvent)
{
case TIMER1 :
CheckVersionAndUpdate(); //版本检测更新
break ;
case TIMER2:
OnBnClickedButton1(); //监控PPT
break;
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
//获取当前时间
CTime CMyPPtinfoProjectDlg::GetCurPageDowntTime()
{
CString strTime ;
CTime Curtime = CTime::GetCurrentTime();
strTime = Curtime.Format(_T("%Y-%m-%d %H:%M:%S"));
return Curtime;
}
//2020.11.23 发现不能将 “PageDown”、“->”、“Esc”定义为热键来监控ppt是否翻页
//定义为热键在打开本软件的过程中,这三个按钮原来的功能失效,并不能起到翻译功能(最后取消热键功能)
// 将“PageDown”和 “->”注册为热键
int CMyPPtinfoProjectDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
//RegisterHotKey(m_hWnd,WM_SHORTCUTKEY1,NULL,VK_NEXT);
//RegisterHotKey(m_hWnd,WM_SHORTCUTKEY2,NULL,VK_RIGHT);
//RegisterHotKey(m_hWnd,WM_SHORTCUTKEY3,NULL,VK_ESCAPE);
return 0;
}
// 热键响应
LRESULT CMyPPtinfoProjectDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
//if (wParam== WM_SHORTCUTKEY1||wParam == WM_SHORTCUTKEY2||wParam == WM_SHORTCUTKEY3)
//{
// //MessageBox(“PageDown 或-> 或Esc按下!”);
// RecPageDownInfo();
//}
return 0;
}
void CMyPPtinfoProjectDlg::OnDestroy()
{
// TODO: 在此处添加消息处理程序代码
//注销热键
/UnregisterHotKey(m_hWnd, WM_SHORTCUTKEY1);
UnregisterHotKey(m_hWnd, WM_SHORTCUTKEY2);
UnregisterHotKey(m_hWnd, WM_SHORTCUTKEY3);/
//卸载钩子
UnHookWindows();
//
if(App.m_lpDispatch!=NULL)
{
App.Quit(); //退出PowerPoint
App.ReleaseDispatch(); //释放资源
}
CDialogEx::OnDestroy();
}
//处理钩子消息
LRESULT CMyPPtinfoProjectDlg::PretendKeyboardAccelerator(WPARAM wparam, LPARAM lparam)
{
switch (wparam)
{
case VK_NEXT: //PageDown
RecPageDownInfo();
break;
case VK_RIGHT: //方向右键
RecPageDownInfo();
break;
case VK_ESCAPE: //Esc退出键
RecPageDownInfo();
break;
default:
break;
}
return 0;
}
void CMyPPtinfoProjectDlg::SetOldFilePath(CString strFilePth)
{
m_strOldFilePath = strFilePth;
}
//版本升级
BOOL CMyPPtinfoProjectDlg::CheckVersionAndUpdate()
{
int nStatus = 0;
//小于1表示程序正常运行,否则表示C2C被升级程序调起的(不再需要进行更新检测)
//2020.8.24
//if(__argc <= 1)
//{
// //检测是否需要更新
// m_strServerUrl = _T(“http://eus.chsedu.cn/”);//外网
// nStatus = m_cSoftVerUpdate.IsUpdateVersion(m_strServerUrl,m_strCurrSoftwarEversion);
//
// //需要更新 ,则获取相关更新数据
// if(SENDSUCCESSFUL == nStatus)
// {
// AfxBeginThread(SoftVerUpdate::ThreadUpdateVer,this);
// }
// else if(SENDFIXEDASSETNUMBERERROR == nStatus&&m_cSoftVerUpdate.GetMagess() != _T(“版本号相同,无需下载”))
// { //2020.10.29 更新失败不需要一直走更新程序 直接上传数据
// KillTimer(TIMER1);
// SetTimer(TIMER2,1000,0);
// }
//}
//需要更新 ,则获取相关更新数据
if(SENDSUCCESSFUL == nStatus)
{
AfxBeginThread(SoftVerUpdate::ThreadUpdateVer,this);
}
else if(SENDFIXEDASSETNUMBERERROR == nStatus&&m_cSoftVerUpdate.GetMagess() != _T("版本号相同,无需下载"))
{ //2020.10.29 更新失败不需要一直走更新程序 直接上传数据
KillTimer(TIMER1);
SetTimer(TIMER2,1000,0);
}
//else //已经更新了,并且被升级软件调起来就不需要再进行更新检测
//{
//本地软件为最新版本手动更新按钮不显示
// Confidlg.SetButtonVisible();
if(!IsOpenPowerPoint()) //PowerPoint 未安装直接退出
{
return false;
}
else
{
//启动PPT监控功能 杀死定时器1(停止升级),启动定时器2(开启监控)
KillTimer(TIMER1);
SetTimer(TIMER2,1000,0);
}
// }
}`