wince2416应用软件

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"");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值