681 lines
15 KiB
C++
681 lines
15 KiB
C++
|
|
// DnMakeFullPatchDlg.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#include "stdafx.h"
|
|||
|
|
#include "DnMakeFullPatch.h"
|
|||
|
|
#include "DnMakeFullPatchDlg.h"
|
|||
|
|
#include "MD5Checksum.h"
|
|||
|
|
#include "zip.h"
|
|||
|
|
#include "LogWnd.h"
|
|||
|
|
|
|||
|
|
#include <direct.h>
|
|||
|
|
#include <io.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new DEBUG_NEW
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CDnPatcherDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
|
|||
|
|
BOOL PeekAndPump()
|
|||
|
|
{
|
|||
|
|
static MSG msg;
|
|||
|
|
|
|||
|
|
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
|
|||
|
|
{
|
|||
|
|
if(!AfxGetApp()->PumpMessage())
|
|||
|
|
{
|
|||
|
|
::PostQuitMessage(0);
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> CAboutDlg <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
|
|||
|
|
class CAboutDlg : public CDialog
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
CAboutDlg();
|
|||
|
|
|
|||
|
|
// <20><>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
enum { IDD = IDD_ABOUTBOX };
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
protected:
|
|||
|
|
DECLARE_MESSAGE_MAP()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CDnMakeFullPatchDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
CDnMakeFullPatchDlg::CDnMakeFullPatchDlg(CWnd* pParent /*=NULL*/)
|
|||
|
|
: CDialog(CDnMakeFullPatchDlg::IDD, pParent)
|
|||
|
|
, m_szEditPath(_T(""))
|
|||
|
|
, m_szStaticMsg(_T(""))
|
|||
|
|
, m_szEditOutFolder(_T(""))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|||
|
|
m_bSetInputFolder = false;
|
|||
|
|
m_bSetOutputFolder = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT_PATH, m_szEditPath);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT_OUT_PATH, m_szEditOutFolder);
|
|||
|
|
DDX_Text(pDX, IDC_STATIC_MSG, m_szStaticMsg);
|
|||
|
|
DDX_Control(pDX, IDC_PROGRESS_CURRENT, m_ProgressCurrent);
|
|||
|
|
DDX_Control(pDX, IDC_PROGRESS_TOTAL, m_ProgressTotal);
|
|||
|
|
DDX_Control(pDX, IDC_LIST_FILELIST, m_ListCtrlFileList);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CDnMakeFullPatchDlg, CDialog)
|
|||
|
|
ON_WM_SYSCOMMAND()
|
|||
|
|
ON_WM_PAINT()
|
|||
|
|
ON_WM_QUERYDRAGICON()
|
|||
|
|
//}}AFX_MSG_MAP
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON_SET_PATH, &CDnMakeFullPatchDlg::OnBnClickedButtonSetPath)
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON_BUILD, &CDnMakeFullPatchDlg::OnBnClickedButtonBuild)
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON_SET_OUT_PATH, &CDnMakeFullPatchDlg::OnBnClickedButtonSetOutPath)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CDnMakeFullPatchDlg <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
BOOL CDnMakeFullPatchDlg::OnInitDialog()
|
|||
|
|
{
|
|||
|
|
CDialog::OnInitDialog();
|
|||
|
|
|
|||
|
|
// <20>ý<EFBFBD><C3BD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> "<22><><EFBFBD><EFBFBD>..." <20><EFBFBD> <20><EFBFBD><D7B8><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
// IDM_ABOUTBOX<4F><58> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>մϴ<D5B4>.
|
|||
|
|
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
|||
|
|
ASSERT(IDM_ABOUTBOX < 0xF000);
|
|||
|
|
|
|||
|
|
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
|||
|
|
if (pSysMenu != NULL)
|
|||
|
|
{
|
|||
|
|
CString strAboutMenu;
|
|||
|
|
strAboutMenu.LoadString(IDS_ABOUTBOX);
|
|||
|
|
if (!strAboutMenu.IsEmpty())
|
|||
|
|
{
|
|||
|
|
pSysMenu->AppendMenu(MF_SEPARATOR);
|
|||
|
|
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><> â<><C3A2> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
SetIcon(m_hIcon, TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
// TODO: <20><><EFBFBD> <20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
m_ListCtrlFileList.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );
|
|||
|
|
|
|||
|
|
CRect rt;
|
|||
|
|
|
|||
|
|
m_ListCtrlFileList.GetWindowRect(rt);
|
|||
|
|
m_ListCtrlFileList.InsertColumn(0, _T("<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>"), 0, int(rt.Width()*0.07f));
|
|||
|
|
m_ListCtrlFileList.InsertColumn(1, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), 0, int(rt.Width()*0.13f));
|
|||
|
|
m_ListCtrlFileList.InsertColumn(2, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), 0, int(rt.Width()*0.80f));
|
|||
|
|
|
|||
|
|
m_szEditPath = _T("<EFBFBD>Է<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD> <20>Է<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD>.");
|
|||
|
|
m_szEditOutFolder = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD>.");
|
|||
|
|
|
|||
|
|
m_szStaticMsg = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.");
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
|
|||
|
|
return TRUE; // <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE<55><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||
|
|
{
|
|||
|
|
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
|||
|
|
{
|
|||
|
|
CAboutDlg dlgAbout;
|
|||
|
|
dlgAbout.DoModal();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDialog::OnSysCommand(nID, lParam);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD>߸<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20>Ʒ<EFBFBD> <20>ڵ尡 <20>ʿ<EFBFBD><CABF>մϴ<D5B4>. <20><><EFBFBD><EFBFBD>/<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> MFC <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::OnPaint()
|
|||
|
|
{
|
|||
|
|
if (IsIconic())
|
|||
|
|
{
|
|||
|
|
CPaintDC dc(this); // <20><EFBFBD><D7B8>⸦ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ؽ<EFBFBD>Ʈ
|
|||
|
|
|
|||
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|||
|
|
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>簢<EFBFBD><E7B0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB5A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8>ϴ<EFBFBD>.
|
|||
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDialog::OnPaint();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ּ<EFBFBD>ȭ<EFBFBD><C8AD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȿ<EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> ǥ<>õǵ<C3B5><C7B5><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD><DBBF><EFBFBD>
|
|||
|
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
|||
|
|
HCURSOR CDnMakeFullPatchDlg::OnQueryDragIcon()
|
|||
|
|
{
|
|||
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
|
|||
|
|
{
|
|||
|
|
switch (uMsg)
|
|||
|
|
{
|
|||
|
|
case BFFM_INITIALIZED:
|
|||
|
|
SetWindowText(hwnd, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
SetWindowPos(hwnd,NULL,10,10,0,0,SWP_NOSIZE | SWP_NOZORDER);
|
|||
|
|
break;
|
|||
|
|
case BFFM_VALIDATEFAILED:
|
|||
|
|
MessageBox(hwnd,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20>ٽ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>"),
|
|||
|
|
_T("<EFBFBD>˸<EFBFBD>"),MB_OK);
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
BOOL BrowseFolder(HWND hWnd, TCHAR *szFolder)
|
|||
|
|
{
|
|||
|
|
LPMALLOC pMalloc;
|
|||
|
|
LPITEMIDLIST pidl;
|
|||
|
|
BROWSEINFO bi;
|
|||
|
|
LPITEMIDLIST root;
|
|||
|
|
|
|||
|
|
bi.hwndOwner = hWnd;
|
|||
|
|
|
|||
|
|
//<2F><> <20><>ǻ<EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SHGetSpecialFolderLocation(hWnd,CSIDL_DRIVES,&root);
|
|||
|
|
|
|||
|
|
bi.pidlRoot = root;
|
|||
|
|
bi.pidlRoot = NULL;
|
|||
|
|
bi.pszDisplayName = NULL;
|
|||
|
|
bi.lpszTitle = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>." );
|
|||
|
|
bi.ulFlags = BIF_EDITBOX | BIF_STATUSTEXT | BIF_VALIDATE;
|
|||
|
|
bi.lpfn = BrowseCallbackProc;
|
|||
|
|
bi.lParam = 0;
|
|||
|
|
|
|||
|
|
pidl = SHBrowseForFolder(&bi);
|
|||
|
|
|
|||
|
|
if (pidl == NULL) {
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
SHGetPathFromIDList(pidl, szFolder);
|
|||
|
|
|
|||
|
|
if (SHGetMalloc(&pMalloc) != NOERROR) {
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
pMalloc->Free(pidl);
|
|||
|
|
pMalloc->Release();
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::OnBnClickedButtonSetPath()
|
|||
|
|
{
|
|||
|
|
// TODO: Add your control notification handler code here
|
|||
|
|
TCHAR szPath[1024] = {0, } ;
|
|||
|
|
|
|||
|
|
ZeroMemory( szPath,sizeof(szPath));
|
|||
|
|
if ( BrowseFolder(GetSafeHwnd(), szPath) == TRUE)
|
|||
|
|
{
|
|||
|
|
m_szEditPath = szPath;
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
DropFolder(szPath);
|
|||
|
|
_UpdateFileList();
|
|||
|
|
|
|||
|
|
m_bSetInputFolder = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::OnBnClickedButtonSetOutPath()
|
|||
|
|
{
|
|||
|
|
// TODO: Add your control notification handler code here
|
|||
|
|
TCHAR szPath[1024] = {0, } ;
|
|||
|
|
|
|||
|
|
ZeroMemory( szPath,sizeof(szPath));
|
|||
|
|
if ( BrowseFolder(GetSafeHwnd(), szPath) == TRUE)
|
|||
|
|
{
|
|||
|
|
m_szEditOutFolder = szPath;
|
|||
|
|
m_szStaticMsg = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>.");
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
m_bSetOutputFolder = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::OnBnClickedButtonBuild()
|
|||
|
|
{
|
|||
|
|
// TODO: Add your control notification handler code here
|
|||
|
|
if ( m_bSetOutputFolder && m_bSetOutputFolder )
|
|||
|
|
{
|
|||
|
|
Build();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
AfxMessageBox(_T("<EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD>"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CDnMakeFullPatchDlg::PreTranslateMessage(MSG* pMsg)
|
|||
|
|
{
|
|||
|
|
// TODO: Add your specialized code here and/or call the base class
|
|||
|
|
switch(pMsg->wParam)
|
|||
|
|
{
|
|||
|
|
case VK_ESCAPE:
|
|||
|
|
pMsg->wParam=NULL; // ESC <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
break;
|
|||
|
|
case VK_RETURN:
|
|||
|
|
pMsg->wParam=NULL; // <20><><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
/*
|
|||
|
|
switch(pMsg->message)
|
|||
|
|
{
|
|||
|
|
case WM_DROPFILES:
|
|||
|
|
DropFile((HDROP)pMsg->wParam);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CDnMakeFullPatchDlg::DropFile(HDROP hDrop)
|
|||
|
|
{
|
|||
|
|
m_FileList.clear();
|
|||
|
|
|
|||
|
|
int iCount = DragQueryFile(hDrop,0xFFFFFFFF,NULL,0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|
|||
|
|
TCHAR strPath[_MAX_PATH]={0,};
|
|||
|
|
if ( iCount < 0 )
|
|||
|
|
return ;
|
|||
|
|
|
|||
|
|
if ( iCount != 1 )
|
|||
|
|
{
|
|||
|
|
AfxMessageBox(_T("<EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>巡<EFBFBD><E5B7A1> <20><><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < iCount ; i++ )
|
|||
|
|
{
|
|||
|
|
DragQueryFile(hDrop,i,strPath,_MAX_PATH);
|
|||
|
|
|
|||
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|||
|
|
hFile = CreateFile(strPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
|||
|
|
FILE_ATTRIBUTE_NORMAL,NULL );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
if ( hFile != INVALID_HANDLE_VALUE )
|
|||
|
|
{
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
AfxMessageBox(_T("<EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>巡<EFBFBD><E5B7A1> <20><><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD><CFB0><EFBFBD>
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_szEditPath = strPath;
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
DropFolder(strPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_szStaticMsg = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20>ϼ<EFBFBD><CFBC><EFBFBD>.");
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
_UpdateFileList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CDnMakeFullPatchDlg::DropFolder(const TCHAR* szPath)
|
|||
|
|
{
|
|||
|
|
WIN32_FIND_DATA fd;
|
|||
|
|
HANDLE hFD;
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("DropFolder %s", szPath);
|
|||
|
|
hFD = FindFirstFile(szPath, &fd);
|
|||
|
|
if (hFD != INVALID_HANDLE_VALUE)
|
|||
|
|
{
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
|
|||
|
|
{
|
|||
|
|
CString _szName(fd.cFileName);
|
|||
|
|
if ( _szName != _T(".") && _szName != _T("..") )
|
|||
|
|
{
|
|||
|
|
TCHAR szDrive[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szDir[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szFileName[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szExt[MAX_PATH] = { 0, };
|
|||
|
|
|
|||
|
|
_tsplitpath(szPath, szDrive, szDir, szFileName, szExt );
|
|||
|
|
CString szNewPath;
|
|||
|
|
szNewPath.Format(_T("%s%s%s\\*.*"), szDrive, szDir, _szName.GetBuffer());
|
|||
|
|
DropFolder(szNewPath.GetBuffer());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
TCHAR szDrive[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szDir[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szFileName[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szExt[MAX_PATH] = { 0, };
|
|||
|
|
|
|||
|
|
_tsplitpath(szPath, szDrive, szDir, szFileName, szExt );
|
|||
|
|
CString szNewPath;
|
|||
|
|
szNewPath.Format(_T("%s%s%s"), szDrive, szDir, fd.cFileName );
|
|||
|
|
|
|||
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|||
|
|
hFile = CreateFile(szNewPath.GetBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
|||
|
|
FILE_ATTRIBUTE_NORMAL,NULL );
|
|||
|
|
|
|||
|
|
DWORD tmp = 0;
|
|||
|
|
DWORD nFileSize = 0;
|
|||
|
|
nFileSize = GetFileSize(hFile, &tmp);
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
|
|||
|
|
|
|||
|
|
FILELIST f;
|
|||
|
|
f.nFileSize = nFileSize;
|
|||
|
|
|
|||
|
|
CString szTemp;
|
|||
|
|
szTemp = m_szEditPath;
|
|||
|
|
szTemp += _T("\\");
|
|||
|
|
int n = szNewPath.Find(szTemp.GetBuffer());
|
|||
|
|
if ( n >= 0 && n < szNewPath.GetLength() )
|
|||
|
|
{
|
|||
|
|
szNewPath.Delete(0, szTemp.GetLength());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strcpy(f.szFilePath, szNewPath.GetBuffer());
|
|||
|
|
LogWnd::TraceLog(_T("FileList Add %s"), szNewPath.GetBuffer());
|
|||
|
|
|
|||
|
|
m_FileList.push_back(f);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
} while(FindNextFile(hFD, &fd));
|
|||
|
|
|
|||
|
|
FindClose( hFD );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CDnMakeFullPatchDlg::_UpdateFileList()
|
|||
|
|
{
|
|||
|
|
m_ListCtrlFileList.DeleteAllItems();
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_FileList.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
CString szTemp;
|
|||
|
|
szTemp.Format(_T("%d"), i);
|
|||
|
|
FILELIST* pF = (FILELIST*)&(m_FileList[i]);
|
|||
|
|
m_ListCtrlFileList.InsertItem(i, szTemp.GetBuffer());
|
|||
|
|
szTemp.Format(_T("%d"), pF->nFileSize);
|
|||
|
|
|
|||
|
|
TCHAR text[512] = {0,};
|
|||
|
|
LV_ITEM lvitem;
|
|||
|
|
strcpy(text, szTemp.GetBuffer());
|
|||
|
|
lvitem.pszText = text;
|
|||
|
|
lvitem.mask = LVIF_TEXT;
|
|||
|
|
lvitem.iSubItem = 1;
|
|||
|
|
lvitem.iItem = i;
|
|||
|
|
m_ListCtrlFileList.SetItem(&lvitem);
|
|||
|
|
|
|||
|
|
|
|||
|
|
strcpy(text, pF->szFilePath);
|
|||
|
|
lvitem.pszText = text;
|
|||
|
|
lvitem.mask = LVIF_TEXT;
|
|||
|
|
lvitem.iSubItem = 2;
|
|||
|
|
lvitem.iItem = i;
|
|||
|
|
m_ListCtrlFileList.SetItem(&lvitem);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// d:\sample\sample
|
|||
|
|
// d:/sample/sample
|
|||
|
|
bool __AccessFolder( char *sSrcFullPath_ )
|
|||
|
|
{
|
|||
|
|
char spath[1024+1];
|
|||
|
|
char *ps;
|
|||
|
|
char *pd;
|
|||
|
|
|
|||
|
|
ZeroMemory( spath, sizeof(spath) );
|
|||
|
|
ps = sSrcFullPath_;
|
|||
|
|
pd = spath;
|
|||
|
|
|
|||
|
|
int i;
|
|||
|
|
for (i=0; i< (int) strlen(sSrcFullPath_); ++i)
|
|||
|
|
{
|
|||
|
|
char ch = *(ps);
|
|||
|
|
if ( ch == '\\' || ch == '/' )
|
|||
|
|
{
|
|||
|
|
if ( strlen( ps ) > 0 && *(ps-1) != ':')
|
|||
|
|
{
|
|||
|
|
::_mkdir( spath );
|
|||
|
|
if ( ::_access( spath, 0) == -1)
|
|||
|
|
return false;
|
|||
|
|
/*
|
|||
|
|
OutputDebugString(spath);
|
|||
|
|
OutputDebugString("\n");
|
|||
|
|
*/
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
*(pd) = ch;
|
|||
|
|
++pd;
|
|||
|
|
++ps;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CDnMakeFullPatchDlg::Build()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog(_T("Build Begin...."));
|
|||
|
|
|
|||
|
|
if ( ::_access( m_szEditOutFolder.GetBuffer(), 6) == -1 )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!! m_szEditOutFolder[%s] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>"), m_szEditOutFolder.GetBuffer());
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( GetSafeHwnd() )
|
|||
|
|
{
|
|||
|
|
m_szStaticMsg = _T("Ǯ<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٷ<EFBFBD><D9B7>ּ<EFBFBD><D6BC><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>!");
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
|
|||
|
|
PeekAndPump();
|
|||
|
|
m_ProgressCurrent.SetRange(0,100);
|
|||
|
|
m_ProgressTotal.SetRange(0,(int)m_FileList.size() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
for ( int i = 0 ; i < (int)m_FileList.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
if ( GetSafeHwnd() )
|
|||
|
|
{
|
|||
|
|
m_ProgressTotal.SetPos(i);
|
|||
|
|
PeekAndPump();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CString szTemp;
|
|||
|
|
szTemp.Format(_T("%d"), i);
|
|||
|
|
FILELIST* pF = (FILELIST*)&(m_FileList[i]);
|
|||
|
|
|
|||
|
|
CString szPath, szOnlyPath ;
|
|||
|
|
szPath = m_szEditPath;
|
|||
|
|
szPath += _T("\\");
|
|||
|
|
szOnlyPath = szPath;
|
|||
|
|
szPath += pF->szFilePath;
|
|||
|
|
|
|||
|
|
CString szChecksum = CMD5Checksum::GetMD5(szPath);
|
|||
|
|
|
|||
|
|
if ( GetSafeHwnd() )
|
|||
|
|
{
|
|||
|
|
m_ProgressCurrent.SetPos(50);
|
|||
|
|
PeekAndPump();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strcpy(pF->szChecksum, szChecksum.GetBuffer());
|
|||
|
|
|
|||
|
|
CString szZipPath ;
|
|||
|
|
szZipPath = m_szEditOutFolder;
|
|||
|
|
szZipPath += _T("\\");
|
|||
|
|
szZipPath += pF->szFilePath;
|
|||
|
|
szZipPath += _T(".zip");
|
|||
|
|
|
|||
|
|
TCHAR szDrive[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szDir[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szFileName[MAX_PATH] = { 0, };
|
|||
|
|
TCHAR szExt[MAX_PATH] = { 0, };
|
|||
|
|
_tsplitpath(szZipPath, szDrive, szDir, szFileName, szExt );
|
|||
|
|
CString szOnlyFolder;
|
|||
|
|
szOnlyFolder.Format(_T("%s%s"), szDrive, szDir);
|
|||
|
|
LogWnd::TraceLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [%s]"), szOnlyFolder.GetBuffer());
|
|||
|
|
|
|||
|
|
if ( __AccessFolder(szOnlyFolder.GetBuffer()) == false )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!! <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [%s]"), szOnlyFolder.GetBuffer());
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
DeleteFile(szZipPath);
|
|||
|
|
HZIP hz;
|
|||
|
|
hz = CreateZip( szZipPath, "" );
|
|||
|
|
ZipAdd(hz, szFileName, szPath );
|
|||
|
|
CloseZip(hz);
|
|||
|
|
|
|||
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|||
|
|
hFile = CreateFile(szZipPath.GetBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
|||
|
|
FILE_ATTRIBUTE_NORMAL,NULL );
|
|||
|
|
|
|||
|
|
DWORD tmp = 0;
|
|||
|
|
DWORD nFileSize = 0;
|
|||
|
|
nFileSize = GetFileSize(hFile, &tmp);
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
|
|||
|
|
pF->nCompressFileSize = nFileSize;
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog(_T("[%s] [%s]<5D><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> "), pF->szFilePath, pF->szChecksum);
|
|||
|
|
|
|||
|
|
if ( GetSafeHwnd() )
|
|||
|
|
{
|
|||
|
|
m_ProgressCurrent.SetPos(100);
|
|||
|
|
PeekAndPump();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_BuildChecksumFile();
|
|||
|
|
if ( GetSafeHwnd() )
|
|||
|
|
{
|
|||
|
|
m_ProgressTotal.SetPos((int)m_FileList.size()+1);
|
|||
|
|
AfxMessageBox(_T("<EFBFBD>Ϸ<EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|||
|
|
}
|
|||
|
|
LogWnd::TraceLog(_T("<EFBFBD>Ϸ<EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> "));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnMakeFullPatchDlg::_BuildChecksumFile()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog(_T("_BuildChecksumFile <20><><EFBFBD><EFBFBD>"));
|
|||
|
|
TCHAR sfile[ 1024+1 ];
|
|||
|
|
|
|||
|
|
if ( m_FileList.size() <= 0)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
_stprintf( sfile,_T("%s\\fullpatch_svr.cfg"), m_szEditOutFolder.GetBuffer() );
|
|||
|
|
|
|||
|
|
FILE *fw;
|
|||
|
|
if (( fw =fopen(sfile,"w+")) != NULL )
|
|||
|
|
{
|
|||
|
|
for ( int i = 0 ; i < (int)m_FileList.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
FILELIST* pF = (FILELIST*)&(m_FileList[i]);
|
|||
|
|
fprintf(fw,"%10ld|%10ld|%-32s|%s\n",pF->nFileSize,pF->nCompressFileSize, pF->szChecksum, pF->szFilePath);
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog(_T("%10ld|%10ld|%-32s|%s\n"),pF->nFileSize,pF->nCompressFileSize, pF->szChecksum, pF->szFilePath);
|
|||
|
|
}
|
|||
|
|
fclose(fw);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MD5::üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD>
|
|||
|
|
CString sAccess;
|
|||
|
|
CString sCheckSum;
|
|||
|
|
|
|||
|
|
sCheckSum = CMD5Checksum::GetMD5( sfile );
|
|||
|
|
|
|||
|
|
// MD5 üũ<C3BC><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf( sfile,"%s\\fullpatch_svr.md5", m_szEditOutFolder.GetBuffer());
|
|||
|
|
if ((fw = fopen( sfile,"w+")) != NULL)
|
|||
|
|
{
|
|||
|
|
fprintf(fw,"%s\n",sCheckSum.GetBuffer());
|
|||
|
|
fclose(fw);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog(_T("_BuildChecksumFile <20>Ϸ<EFBFBD>"));
|
|||
|
|
}
|