VC 操作PowerPoint

VC 操作PowerPoint 获取PPT相关信息

  1. 检测PowerPoint是否安装
  2. 获取当前激活的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); 
}
//	}

}`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值