wince2416应用软件
2016-05-18 15:01
274 查看
wince2416应用软件
// UpdateDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Update.h"
#include "UpdateDlg.h"
#include "Common.h"
#include "Reg.h"
#include "sipapi.h"
#include "Cefilefind.h"
#include "SysSet.h"
#include "pm.h"
//#include "afxmsg_.h"
//c:\program files\microsoft visual studio 8\vc\ce\atlmfc\include\afxmsg_.h
#define WM_DEVICECHANGE 0x219
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
////////////////////USB设备事件--begin
typedef struct _DEV_BROADCAST_DEVICEINTERFACE { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; TCHAR dbcc_name[1];
} DEV_BROADCAST_DEVICEINTERFACE, *PDEV_BROADCAST_DEVICEINTERFACE;
typedef struct _DEV_BROADCAST_HDR { DWORD dbch_size; DWORD dbch_devicetype; DWORD dbch_reserved;
} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
typedef struct _DEV_BROADCAST_PORT { DWORD dbcp_size; DWORD dbcp_devicetype; DWORD dbcp_reserved; TCHAR dbcp_name[1];
} DEV_BROADCAST_PORT, *PDEV_BROADCAST_PORT;
#define DBT_DEVTYP_DEVICEINTERFACE 0x00000005
//Class of devices. This structure is a DEV_BROADCAST_DEVICEINTERFACE structure.
#define DBT_DEVTYP_HANDLE 0x00000006
//File system handle. This structure is a DEV_BROADCAST_HANDLE structure.
#define DBT_DEVTYP_OEM 0x00000000
//OEM- or IHV-defined device type. This structure is a DEV_BROADCAST_OEM structure.
#define DBT_DEVTYP_PORT 0x00000003
//Port device (serial or parallel). This structure is a DEV_BROADCAST_PORT structure. 一般设备都是用的DBT_DEVTYP_PORT,U盘,键盘,鼠标,无线网卡等
#define DBT_DEVTYP_VOLUME 0x00000002
//Logical volume. This structure is a DEV_BROADCAST_VOLUME structure.
/*
* The following messages are for WM_DEVICECHANGE. The immediate list
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
*
*/
#define DBT_DEVICEARRIVAL 0x8000 // system detected a new device
#define DBT_DEVICEQUERYREMOVE 0x8001 // wants to remove, may fail
#define DBT_DEVICEQUERYREMOVEFAILED 0x8002 // removal aborted
#define DBT_DEVICEREMOVEPENDING 0x8003 // about to remove, still avail.
#define DBT_DEVICEREMOVECOMPLETE 0x8004 // device is gone
#define DBT_DEVICETYPESPECIFIC 0x8005 // type specific event
////////////////////USB设备事件--END
int countfile=0;
RECT rect;
BOOL m_bInsertUSB=FALSE;
/*******声明程序中用到的变量和函数*********/
HANDLE handle1;//线程句柄
int counter=0;//计数器
// CUpdateDlg 对话框
CUpdateDlg::CUpdateDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUpdateDlg::IDD, pParent)
, m_mem(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CUpdateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_MEM, m_stMem);
DDX_Control(pDX, IDC_LIST1, m_ListBox);
DDX_Text(pDX, IDC_STATIC2, m_mem);
DDX_Control(pDX, IDC_STATIC2, m_stMemctrl);
DDX_Control(pDX, IDC_BUTTON4, m_btRoot);
DDX_Control(pDX, IDC_BUTTON2, m_btUpdateLogo);
DDX_Control(pDX, IDC_BUTTON1, m_btUpdatePrj);
}
BEGIN_MESSAGE_MAP(CUpdateDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CUpdateDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CUpdateDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON3, &CUpdateDlg::OnBnClickedButton3)
ON_WM_DEVICECHANGE() //注册消息映射
ON_BN_CLICKED(IDC_BUTTON2, &CUpdateDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
/*******屏幕保护线程函数,监测屏幕的不活跃状态*********/
DWORD CUpdateDlg::PBThreadProc1(LPVOID lparam)
{
HANDLE hUserInactive;//定义电源管理事件,该事件代表屏幕无操作
TCHAR buf[64];
DWORD dw;
DWORD dw2;
const TCHAR szON[]=L"on";
const TCHAR szIdle[]=L"useridle";
int i;
static int nBackLight;
CUpdateApp *app = (CUpdateApp *)AfxGetApp();
while(1)
{
Sleep(1000);//延时1000ms
dw2=GetSystemPowerState(buf,64,&dw);//"useridle","on","systemidle"
if (_wcsicmp(buf,szON)==0)
{
if (nBackLight!=2)
{
nBackLight=2;
DeviceIoControl(app->m_ledblk,0x6,NULL,0,NULL,0,NULL,NULL);//开背光 0x123-----------0x06
}
}
else if (_wcsicmp(buf,szIdle)==0)
{
if (nBackLight!=3)
{
nBackLight=3;
DeviceIoControl(app->m_ledblk,0x1,NULL,0,NULL,0,NULL,NULL);//关背光0x124-----0x1
}
}
}
return 1;
}
// CUpdateDlg 消息处理程序
BOOL CUpdateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE);
// 设置大图标
SetIcon(m_hIcon, FALSE);
// 设置小图标
CSysSet ss;
// TODO: 在此添加额外的初始化代码
TCHAR szBuf_w[MAX_PATH]={0};
//CCommon::ShowTaskBar(FALSE);
iFullWidth = GetSystemMetrics(SM_CXSCREEN);
iFullHeight = GetSystemMetrics(SM_CYSCREEN);
CCommon::GetCurrentDirectory(m_szAppPath,sizeof(m_szAppPath)/sizeof(TCHAR));
//_tcscpy(lpFileName,m_szAppPath);
_tcscat(m_szAppPath,L"Set.ini");
if (GetFileAttributes(m_szAppPath)==-1)
{
ss.iniset(0);
}
ss.readset();
//::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,iFullWidth,iFullHeight,NULL,NULL,SWP_NOSIZE|SWP_HIDEWINDOW);//
//AfxMessageBox(L"没有找到U盘!");
if (GetFileAttributes(_T("\\NandFlash\\bin\\Server.exe"))==-1)
{
CreateProcess(TEXT("\\windows\\explorer.exe"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
}
else
{
CreateProcess(_T("\\NandFlash\\bin\\Server.exe"), NULL, NULL, NULL, NULL ,NULL,NULL, NULL, NULL,NULL);
}
//::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW);
/*******在主程序中创建屏幕保护线程*********/
handle1=::CreateThread(NULL,0,PBThreadProc1,this,0,NULL); //创建“屏幕无操作”线程
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CUpdateDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_UPDATE_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_UPDATE_DIALOG));
}
}
#endif
BOOL CUpdateDlg::OnDeviceChange(UINT nEventType,DWORD_PTR dwData)
{
DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)dwData;
PDEV_BROADCAST_PORT lpdbp = (PDEV_BROADCAST_PORT)dhr;
TCHAR *TCH_DISK1=_T("DSK1:");//插入的第一个U盘
TCHAR *TCH_DISK2=_T("DSK2:");//插入的第二个U盘
TCHAR *TCH_DISK3=_T("DSK3:");//插入的第三个U盘
switch(nEventType)
{
case DBT_DEVICEARRIVAL:
if( lpdbp->dbcp_devicetype == DBT_DEVTYP_PORT )
{
if ( _tcsicmp(lpdbp->dbcp_name, TCH_DISK1) == 0 || _tcsicmp(lpdbp->dbcp_name, TCH_DISK2) == 0 || _tcsicmp(lpdbp->dbcp_name, TCH_DISK3) == 0 ) //U盘1
{
if (!m_bInsertUSB)
{
m_bInsertUSB=TRUE;
m_mem=L"已插入U盘";
m_stMemctrl.SetWindowText(L"已插入U盘");
Sleep(1000);
GetPrjFile();
CCommon::CenterWindow(AfxGetMainWnd()->m_hWnd);
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}
//::AfxMessageBox(TEXT("得到新的设备"),1,0);
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if (m_bInsertUSB)
{
m_bInsertUSB=FALSE;
m_stMemctrl.SetWindowText(L"已拨出U盘");
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW);
}
break;
}
return TRUE;
}
void CUpdateDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int nSel;
nSel=m_ListBox.GetCurSel();
m_btUpdatePrj.EnableWindow(FALSE);
if (countfile>1 && nSel==-1)
{
AfxMessageBox(L"请在上方列表中选择一个文件进行更新!");
}
else if (countfile==1)
{
m_stMemctrl.SetWindowText(L"系统正在更新*.PRJ,请等待。。。");
m_stMemctrl.UpdateWindow();
if (CopyFile(m_szFilePath,_T("\\NandFlash\\bin\\hmi2.prj"),FALSE))
{
AfxMessageBox(L"HMI.PRJ更新完成,请拔出U盘,然后重启!");
}
else
{
AfxMessageBox(L"PRJ更新出错!");
}
}
else if (countfile>1 && nSel!=-1)
{
CString s;
m_ListBox.GetText(nSel,s);
m_stMemctrl.SetWindowText(L"系统正在更新*.PRJ,请等待。。。");
m_stMemctrl.UpdateWindow();
if (CopyFile(s,_T("\\NandFlash\\bin\\hmi2.prj"),FALSE))
{
AfxMessageBox(L"HMI.PRJ更新完成,请拔出U盘,然后重启!");
}
else
{
AfxMessageBox(L"PRJ更新出错!");
}
}
else
{
AfxMessageBox(L"U盘中无*.PRJ文件!");
}
m_stMemctrl.SetWindowText(L" ");
m_btUpdatePrj.EnableWindow(TRUE);
}
void reboot()
{
HANDLE hPort2;
// NKDbgPrintfW(TEXT("i will reboot\r\n"));
hPort2 = CreateFile(_T("WDG1:"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if ( hPort2 == INVALID_HANDLE_VALUE )
{
// NKDbgPrintfW(TEXT("open WDG1 failed\r\n"));
return;
}
while(1);
}
void CUpdateDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
m_btRoot.EnableWindow(FALSE);
m_stMemctrl.SetWindowText(L"系统正在重新启动,请等待。。。");
m_stMemctrl.UpdateWindow();
reboot();
}
void CUpdateDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CSysSet sys;
sys.DoModal();
}
/*
void CUpdateDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//if (m_password=="123456789")
{
HWND hWnd=::FindWindow(_T("HHTaskBar"),NULL);
if (hWnd && !::IsWindowVisible(hWnd))
{
::ShowWindow(hWnd,SW_SHOWNORMAL);//显示任务栏
}
CreateProcess(TEXT("\\windows\\explorer.exe"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
Sleep(1000);
hWnd=::FindWindow(_T("desktopexplorerwindow"),NULL);
::SetWindowPos(hWnd,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
exit(0);
}
}
*/
void CUpdateDlg::GetPrjFile(void)
{
CCeFileFind cf;//*.PRJ
BOOL bResult;
CString strFile;
TCHAR szBuf_w[MAX_PATH]={0};
DWORD dwValue;
int count=0;
while(1)
{
_tcscpy(szBuf_w,_T("\\硬盘"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
break;
}
else
{
count++;
Sleep(1000);
}
if (count>=25)
{
break;
}
}
Sleep(2000);
_tcscpy(szBuf_w,_T("\\硬盘\\bin\\Update.txt"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
bResult=cf.FindFile(_T("\\硬盘\\bin\\*.PRJ"));
countfile=0;
while (bResult)
{
countfile++;
bResult=cf.FindNextFile();
strFile=cf.GetFilePath();//
m_szFilePath=strFile;
m_ListBox.AddString(strFile);
}
if (countfile>1)
{
m_ListBox.ShowWindow(TRUE);
m_stMem.ShowWindow(TRUE);
}
else if (countfile==1)
{
m_stMemctrl.SetWindowText(L"U盘有1个*.PRJ");
}
else
{
m_stMemctrl.SetWindowText(L"U盘无*.PRJ");
}
}
else
{
m_stMemctrl.SetWindowText(L"U盘无Update.txt");
}
}
void CUpdateDlg::OnBnClickedButton2()
{
BOOL bResult;
CString strFile;
TCHAR szBuf_w[MAX_PATH]={0};
DWORD dwValue;
// TODO: 在此添加控件通知处理程序代码
m_btUpdateLogo.EnableWindow(FALSE);
_tcscpy(szBuf_w,_T("\\硬盘\\bin\\Logo.bmp"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
//m_stMemctrl.SetWindowText(L"系统正在更新LOGO,请等待。。。");
SetDlgItemText(IDC_STATIC2,L"系统正在更新LOGO,请等待。。。");
m_stMemctrl.UpdateWindow();
//::SetWindowText();
//Sleep(1000);
bResult=CopyFile(szBuf_w,_T("\\NandFlash\\bin\\Logo.bmp"),FALSE);
if (bResult)
{
AfxMessageBox(L"Logo.bmp更新成功,重启生效!");
}
else
{
AfxMessageBox(L"Logo.bmp更新失败!");
}
}
else
{
AfxMessageBox(L"\\U盘\\bin\\Logo.bmp找不到!");
}
m_btUpdateLogo.EnableWindow(TRUE);
m_stMemctrl.SetWindowText(L"");
}
// UpdateDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Update.h"
#include "UpdateDlg.h"
#include "Common.h"
#include "Reg.h"
#include "sipapi.h"
#include "Cefilefind.h"
#include "SysSet.h"
#include "pm.h"
//#include "afxmsg_.h"
//c:\program files\microsoft visual studio 8\vc\ce\atlmfc\include\afxmsg_.h
#define WM_DEVICECHANGE 0x219
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
////////////////////USB设备事件--begin
typedef struct _DEV_BROADCAST_DEVICEINTERFACE { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; TCHAR dbcc_name[1];
} DEV_BROADCAST_DEVICEINTERFACE, *PDEV_BROADCAST_DEVICEINTERFACE;
typedef struct _DEV_BROADCAST_HDR { DWORD dbch_size; DWORD dbch_devicetype; DWORD dbch_reserved;
} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
typedef struct _DEV_BROADCAST_PORT { DWORD dbcp_size; DWORD dbcp_devicetype; DWORD dbcp_reserved; TCHAR dbcp_name[1];
} DEV_BROADCAST_PORT, *PDEV_BROADCAST_PORT;
#define DBT_DEVTYP_DEVICEINTERFACE 0x00000005
//Class of devices. This structure is a DEV_BROADCAST_DEVICEINTERFACE structure.
#define DBT_DEVTYP_HANDLE 0x00000006
//File system handle. This structure is a DEV_BROADCAST_HANDLE structure.
#define DBT_DEVTYP_OEM 0x00000000
//OEM- or IHV-defined device type. This structure is a DEV_BROADCAST_OEM structure.
#define DBT_DEVTYP_PORT 0x00000003
//Port device (serial or parallel). This structure is a DEV_BROADCAST_PORT structure. 一般设备都是用的DBT_DEVTYP_PORT,U盘,键盘,鼠标,无线网卡等
#define DBT_DEVTYP_VOLUME 0x00000002
//Logical volume. This structure is a DEV_BROADCAST_VOLUME structure.
/*
* The following messages are for WM_DEVICECHANGE. The immediate list
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
*
*/
#define DBT_DEVICEARRIVAL 0x8000 // system detected a new device
#define DBT_DEVICEQUERYREMOVE 0x8001 // wants to remove, may fail
#define DBT_DEVICEQUERYREMOVEFAILED 0x8002 // removal aborted
#define DBT_DEVICEREMOVEPENDING 0x8003 // about to remove, still avail.
#define DBT_DEVICEREMOVECOMPLETE 0x8004 // device is gone
#define DBT_DEVICETYPESPECIFIC 0x8005 // type specific event
////////////////////USB设备事件--END
int countfile=0;
RECT rect;
BOOL m_bInsertUSB=FALSE;
/*******声明程序中用到的变量和函数*********/
HANDLE handle1;//线程句柄
int counter=0;//计数器
// CUpdateDlg 对话框
CUpdateDlg::CUpdateDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUpdateDlg::IDD, pParent)
, m_mem(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CUpdateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_MEM, m_stMem);
DDX_Control(pDX, IDC_LIST1, m_ListBox);
DDX_Text(pDX, IDC_STATIC2, m_mem);
DDX_Control(pDX, IDC_STATIC2, m_stMemctrl);
DDX_Control(pDX, IDC_BUTTON4, m_btRoot);
DDX_Control(pDX, IDC_BUTTON2, m_btUpdateLogo);
DDX_Control(pDX, IDC_BUTTON1, m_btUpdatePrj);
}
BEGIN_MESSAGE_MAP(CUpdateDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CUpdateDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CUpdateDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON3, &CUpdateDlg::OnBnClickedButton3)
ON_WM_DEVICECHANGE() //注册消息映射
ON_BN_CLICKED(IDC_BUTTON2, &CUpdateDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
/*******屏幕保护线程函数,监测屏幕的不活跃状态*********/
DWORD CUpdateDlg::PBThreadProc1(LPVOID lparam)
{
HANDLE hUserInactive;//定义电源管理事件,该事件代表屏幕无操作
TCHAR buf[64];
DWORD dw;
DWORD dw2;
const TCHAR szON[]=L"on";
const TCHAR szIdle[]=L"useridle";
int i;
static int nBackLight;
CUpdateApp *app = (CUpdateApp *)AfxGetApp();
while(1)
{
Sleep(1000);//延时1000ms
dw2=GetSystemPowerState(buf,64,&dw);//"useridle","on","systemidle"
if (_wcsicmp(buf,szON)==0)
{
if (nBackLight!=2)
{
nBackLight=2;
DeviceIoControl(app->m_ledblk,0x6,NULL,0,NULL,0,NULL,NULL);//开背光 0x123-----------0x06
}
}
else if (_wcsicmp(buf,szIdle)==0)
{
if (nBackLight!=3)
{
nBackLight=3;
DeviceIoControl(app->m_ledblk,0x1,NULL,0,NULL,0,NULL,NULL);//关背光0x124-----0x1
}
}
}
return 1;
}
// CUpdateDlg 消息处理程序
BOOL CUpdateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE);
// 设置大图标
SetIcon(m_hIcon, FALSE);
// 设置小图标
CSysSet ss;
// TODO: 在此添加额外的初始化代码
TCHAR szBuf_w[MAX_PATH]={0};
//CCommon::ShowTaskBar(FALSE);
iFullWidth = GetSystemMetrics(SM_CXSCREEN);
iFullHeight = GetSystemMetrics(SM_CYSCREEN);
CCommon::GetCurrentDirectory(m_szAppPath,sizeof(m_szAppPath)/sizeof(TCHAR));
//_tcscpy(lpFileName,m_szAppPath);
_tcscat(m_szAppPath,L"Set.ini");
if (GetFileAttributes(m_szAppPath)==-1)
{
ss.iniset(0);
}
ss.readset();
//::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,iFullWidth,iFullHeight,NULL,NULL,SWP_NOSIZE|SWP_HIDEWINDOW);//
//AfxMessageBox(L"没有找到U盘!");
if (GetFileAttributes(_T("\\NandFlash\\bin\\Server.exe"))==-1)
{
CreateProcess(TEXT("\\windows\\explorer.exe"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
}
else
{
CreateProcess(_T("\\NandFlash\\bin\\Server.exe"), NULL, NULL, NULL, NULL ,NULL,NULL, NULL, NULL,NULL);
}
//::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW);
/*******在主程序中创建屏幕保护线程*********/
handle1=::CreateThread(NULL,0,PBThreadProc1,this,0,NULL); //创建“屏幕无操作”线程
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CUpdateDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_UPDATE_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_UPDATE_DIALOG));
}
}
#endif
BOOL CUpdateDlg::OnDeviceChange(UINT nEventType,DWORD_PTR dwData)
{
DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)dwData;
PDEV_BROADCAST_PORT lpdbp = (PDEV_BROADCAST_PORT)dhr;
TCHAR *TCH_DISK1=_T("DSK1:");//插入的第一个U盘
TCHAR *TCH_DISK2=_T("DSK2:");//插入的第二个U盘
TCHAR *TCH_DISK3=_T("DSK3:");//插入的第三个U盘
switch(nEventType)
{
case DBT_DEVICEARRIVAL:
if( lpdbp->dbcp_devicetype == DBT_DEVTYP_PORT )
{
if ( _tcsicmp(lpdbp->dbcp_name, TCH_DISK1) == 0 || _tcsicmp(lpdbp->dbcp_name, TCH_DISK2) == 0 || _tcsicmp(lpdbp->dbcp_name, TCH_DISK3) == 0 ) //U盘1
{
if (!m_bInsertUSB)
{
m_bInsertUSB=TRUE;
m_mem=L"已插入U盘";
m_stMemctrl.SetWindowText(L"已插入U盘");
Sleep(1000);
GetPrjFile();
CCommon::CenterWindow(AfxGetMainWnd()->m_hWnd);
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}
//::AfxMessageBox(TEXT("得到新的设备"),1,0);
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if (m_bInsertUSB)
{
m_bInsertUSB=FALSE;
m_stMemctrl.SetWindowText(L"已拨出U盘");
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_BOTTOM,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW);
}
break;
}
return TRUE;
}
void CUpdateDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int nSel;
nSel=m_ListBox.GetCurSel();
m_btUpdatePrj.EnableWindow(FALSE);
if (countfile>1 && nSel==-1)
{
AfxMessageBox(L"请在上方列表中选择一个文件进行更新!");
}
else if (countfile==1)
{
m_stMemctrl.SetWindowText(L"系统正在更新*.PRJ,请等待。。。");
m_stMemctrl.UpdateWindow();
if (CopyFile(m_szFilePath,_T("\\NandFlash\\bin\\hmi2.prj"),FALSE))
{
AfxMessageBox(L"HMI.PRJ更新完成,请拔出U盘,然后重启!");
}
else
{
AfxMessageBox(L"PRJ更新出错!");
}
}
else if (countfile>1 && nSel!=-1)
{
CString s;
m_ListBox.GetText(nSel,s);
m_stMemctrl.SetWindowText(L"系统正在更新*.PRJ,请等待。。。");
m_stMemctrl.UpdateWindow();
if (CopyFile(s,_T("\\NandFlash\\bin\\hmi2.prj"),FALSE))
{
AfxMessageBox(L"HMI.PRJ更新完成,请拔出U盘,然后重启!");
}
else
{
AfxMessageBox(L"PRJ更新出错!");
}
}
else
{
AfxMessageBox(L"U盘中无*.PRJ文件!");
}
m_stMemctrl.SetWindowText(L" ");
m_btUpdatePrj.EnableWindow(TRUE);
}
void reboot()
{
HANDLE hPort2;
// NKDbgPrintfW(TEXT("i will reboot\r\n"));
hPort2 = CreateFile(_T("WDG1:"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if ( hPort2 == INVALID_HANDLE_VALUE )
{
// NKDbgPrintfW(TEXT("open WDG1 failed\r\n"));
return;
}
while(1);
}
void CUpdateDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
m_btRoot.EnableWindow(FALSE);
m_stMemctrl.SetWindowText(L"系统正在重新启动,请等待。。。");
m_stMemctrl.UpdateWindow();
reboot();
}
void CUpdateDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CSysSet sys;
sys.DoModal();
}
/*
void CUpdateDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//if (m_password=="123456789")
{
HWND hWnd=::FindWindow(_T("HHTaskBar"),NULL);
if (hWnd && !::IsWindowVisible(hWnd))
{
::ShowWindow(hWnd,SW_SHOWNORMAL);//显示任务栏
}
CreateProcess(TEXT("\\windows\\explorer.exe"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
Sleep(1000);
hWnd=::FindWindow(_T("desktopexplorerwindow"),NULL);
::SetWindowPos(hWnd,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
exit(0);
}
}
*/
void CUpdateDlg::GetPrjFile(void)
{
CCeFileFind cf;//*.PRJ
BOOL bResult;
CString strFile;
TCHAR szBuf_w[MAX_PATH]={0};
DWORD dwValue;
int count=0;
while(1)
{
_tcscpy(szBuf_w,_T("\\硬盘"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
break;
}
else
{
count++;
Sleep(1000);
}
if (count>=25)
{
break;
}
}
Sleep(2000);
_tcscpy(szBuf_w,_T("\\硬盘\\bin\\Update.txt"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
bResult=cf.FindFile(_T("\\硬盘\\bin\\*.PRJ"));
countfile=0;
while (bResult)
{
countfile++;
bResult=cf.FindNextFile();
strFile=cf.GetFilePath();//
m_szFilePath=strFile;
m_ListBox.AddString(strFile);
}
if (countfile>1)
{
m_ListBox.ShowWindow(TRUE);
m_stMem.ShowWindow(TRUE);
}
else if (countfile==1)
{
m_stMemctrl.SetWindowText(L"U盘有1个*.PRJ");
}
else
{
m_stMemctrl.SetWindowText(L"U盘无*.PRJ");
}
}
else
{
m_stMemctrl.SetWindowText(L"U盘无Update.txt");
}
}
void CUpdateDlg::OnBnClickedButton2()
{
BOOL bResult;
CString strFile;
TCHAR szBuf_w[MAX_PATH]={0};
DWORD dwValue;
// TODO: 在此添加控件通知处理程序代码
m_btUpdateLogo.EnableWindow(FALSE);
_tcscpy(szBuf_w,_T("\\硬盘\\bin\\Logo.bmp"));
dwValue=GetFileAttributes(szBuf_w);
if (dwValue!=-1)
{
//m_stMemctrl.SetWindowText(L"系统正在更新LOGO,请等待。。。");
SetDlgItemText(IDC_STATIC2,L"系统正在更新LOGO,请等待。。。");
m_stMemctrl.UpdateWindow();
//::SetWindowText();
//Sleep(1000);
bResult=CopyFile(szBuf_w,_T("\\NandFlash\\bin\\Logo.bmp"),FALSE);
if (bResult)
{
AfxMessageBox(L"Logo.bmp更新成功,重启生效!");
}
else
{
AfxMessageBox(L"Logo.bmp更新失败!");
}
}
else
{
AfxMessageBox(L"\\U盘\\bin\\Logo.bmp找不到!");
}
m_btUpdateLogo.EnableWindow(TRUE);
m_stMemctrl.SetWindowText(L"");
}
相关文章推荐
- HDU5547
- 图论学习笔记 Part 1
- 普通函数、构造函数、inline函数、友元函数为什么不能声明为虚函数
- Android中AsyncTask使用教程及源码分析
- delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据
- 冲刺阶段day7
- Android学习小记-----拦截电话/拒接电话,规避拒接电话前响一声或者两声的问题
- SQL viewId 比较好看的 Id
- SOCKSify Ruby
- Android Validator 验证
- MFC串口调试工具教程
- 关系模式候选码
- Java面试题(02)_数组
- Python格式化输出
- eclipse debug 技巧
- 类变量的@protected ,@private,@public,@package,声明各有什么含义?
- js中的prototype和基于prototype的继承总结
- 算法杂货铺——分类算法之决策树(Decision tree)
- 玩转 Linux 之:磁盘分区、挂载知多少?
- 需求评审阶段和设计评审阶段测试人员该做什么呢