您的位置:首页 > 其它

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: