// registersnDlg.cpp : 实现文件 // #include "stdafx.h" #include "registersn.h" #include "registersnDlg.h" #include ".\registersndlg.h" #include "CheckDog.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialog { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 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() // CregistersnDlg 对话框 CregistersnDlg::CregistersnDlg(CWnd* pParent /*=NULL*/) : CDialog(CregistersnDlg::IDD, pParent) , m_strSN(_T("")) , m_strUseTime(_T("")) , m_strPname(_T("")) , m_strStartTime(_T("")) , m_strEndTime(_T("")) , m_strLeftTime(_T("")) , m_strCode(_T("")) { m_bSt = FALSE; m_btest = FALSE; m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CregistersnDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, ED_SN, m_strSN); DDX_Text(pDX, ED_USETIME, m_strUseTime); DDX_Text(pDX, ED_PNAME, m_strPname); DDX_Text(pDX, ED_STIME, m_strStartTime); DDX_Text(pDX, ED_ETIME, m_strEndTime); DDX_Text(pDX, ED_LTIME, m_strLeftTime); DDX_Text(pDX, ED_CODE, m_strCode); } BEGIN_MESSAGE_MAP(CregistersnDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(BTN_OPEN, OnBnClickedOpen) ON_BN_CLICKED(BTN_CREATE, OnBnClickedCreate) ON_BN_CLICKED(BTN_TEST, OnBnClickedTest) ON_WM_CLOSE() END_MESSAGE_MAP() // CregistersnDlg 消息处理程序 BOOL CregistersnDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将\“关于...\”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 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); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } void CregistersnDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CregistersnDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 { CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标显示。 HCURSOR CregistersnDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CregistersnDlg::OnBnClickedOpen() { m_strCode = ""; m_strSN = ""; m_strPname = ""; m_strUseTime = ""; m_strStartTime = ""; m_strEndTime = ""; m_strLeftTime = ""; UpdateData(FALSE); static char BASED_CODE szFilter[] = "SN Files (*.sn)|*.sn|All Files (*.*)|*.*||"; char sfilename[1024] = {0}; CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL); if (dlg.DoModal()==IDOK) { strcpy(sfilename, dlg.GetPathName()); } else return; CSNRegister rig; BOOL bOpen = rig.itf_read_snfile(sfilename); if (bOpen == FALSE) { MessageBox("无效文件","注意",MB_ICONWARNING); return; } CDlgCode dlgCode; if (dlgCode.DoModal() == IDOK) { if (dlgCode.m_strincode == "" || rig.m_strCode != dlgCode.m_strincode) { MessageBox("特征码错误","注意",MB_ICONWARNING); return; } ((CButton *)GetDlgItem(ED_CODE))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_SN))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_USETIME))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_PNAME))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_STIME))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_ETIME))->EnableWindow(FALSE); ((CButton *)GetDlgItem(ED_LTIME))->EnableWindow(FALSE); m_bSt = TRUE; } else return; m_strCode = rig.m_strCode; m_strSN = rig.m_strSn; m_strPname = rig.m_strPName; // 将分钟传为天数; m_strUseTime = rig.m_strUseTime; int nTime = atoi(m_strUseTime.GetBuffer());m_strUseTime.ReleaseBuffer(); m_strUseTime = ""; m_strUseTime.Format("%d",nTime/1140); m_strStartTime = rig.m_strStartTime; m_strEndTime = rig.m_strEndTime; m_strLeftTime = rig.m_strLeftTime; UpdateData(FALSE); } void CregistersnDlg::OnBnClickedCreate() { if (m_bSt) { m_strCode = ""; m_strSN = ""; m_strPname = ""; m_strUseTime = ""; m_strStartTime = ""; m_strEndTime = ""; m_strLeftTime = ""; UpdateData(FALSE); ((CButton *)GetDlgItem(ED_CODE))->EnableWindow(); ((CButton *)GetDlgItem(ED_SN))->EnableWindow(); ((CButton *)GetDlgItem(ED_USETIME))->EnableWindow(); ((CButton *)GetDlgItem(ED_PNAME))->EnableWindow(); ((CButton *)GetDlgItem(ED_STIME))->EnableWindow(); ((CButton *)GetDlgItem(ED_ETIME))->EnableWindow(); ((CButton *)GetDlgItem(ED_LTIME))->EnableWindow(); m_bSt = FALSE; return; } UpdateData(TRUE); if ( m_strSN == "" || m_strPname == "" || m_strUseTime == "" || m_strCode == "") { MessageBox("请填写完整","注意",MB_ICONWARNING); return; } if ( m_strUseTime.GetLength() > 5) { MessageBox("试用天数过限","注意",MB_ICONWARNING); return; } static char BASED_CODE szFilter[] = "SNRegister(*.sn)|*.sn|All Files (*.*)|*.*||"; char routfile[1024] = {0}; CString strFile = "register"; strFile.Format("register[%s 试用时间=%s]",m_strPname,m_strUseTime); // 文件名,不能有冒号; CFileDialog dlg(false, NULL, strFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL); if (dlg.DoModal() == IDOK) { //******************************************************** //获取文件类型; //******************************************************** DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个; filter_num -= 1;//适应数组 ; char a[][9] = {".sn",""};//文件类型数组 ; CString file_ext = a[filter_num];//获得文件类型的名称 ; int ext_length = file_ext.GetLength();//获得长度 ; strcpy(routfile, dlg.GetPathName()); int t = static_cast(strlen(routfile)); if (dlg.GetPathName().Right(ext_length)!=file_ext) memcpy(routfile+t,file_ext.GetBuffer(0),ext_length); } else return; CSNRegister rig; // 天数传为分钟; char szUset[30] = {0}; DWORD dwTime = atoi(m_strUseTime.GetBuffer());m_strUseTime.ReleaseBuffer(); dwTime *= 1140; itoa(dwTime,szUset,10); char szCode[1024] = {0}; char szSN[1024] = {0}; //BYTE szUSE[1024] = {0}; char szPName[1024] = {0}; char szSTIME[1024] = {0}; char szETime[1024] = {0}; char szLTIME[1024] = {0}; memcpy(szCode,m_strCode.GetBuffer(),m_strCode.GetLength()); memcpy(szSN,m_strSN.GetBuffer(),m_strSN.GetLength()); //memcpy(szUSE,m_strCode.GetBuffer(),m_strCode.GetLength()); memcpy(szPName,m_strPname.GetBuffer(),m_strPname.GetLength()); memcpy(szSTIME,m_strStartTime.GetBuffer(),m_strStartTime.GetLength()); memcpy(szETime,m_strEndTime.GetBuffer(),m_strEndTime.GetLength()); memcpy(szLTIME,m_strLeftTime.GetBuffer(),m_strLeftTime.GetLength()); rig.itf_create_snfile( routfile, szCode, szSN, szUset, szPName , szSTIME , szETime, szLTIME); m_strCode.ReleaseBuffer(); m_strSN.ReleaseBuffer(); //m_strUseTime.ReleaseBuffer(); m_strPname.ReleaseBuffer(); m_strStartTime.ReleaseBuffer(); m_strEndTime.ReleaseBuffer(); m_strLeftTime.ReleaseBuffer(); MessageBox("文件生成成功"); } /************************************************************************/ /* 以下为测试代码; */ /************************************************************************/ char g_szModulePath[260]; // 程序所在路径; // 获取程序目录; void GetModulePath() { TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; ::GetModuleFileName(NULL, g_szModulePath, sizeof(g_szModulePath)/sizeof(TCHAR)); _tsplitpath(g_szModulePath, szDrive, szDir, NULL, NULL); _tcscpy(g_szModulePath, szDrive); _tcscat(g_szModulePath, szDir); } // set.ini [Common] SNRIG键值为SN序列号; void CregistersnDlg::OnBnClickedTest() { m_btest = TRUE; #if 0 char szSNName[MAX_PATH] = {0}, szIniName[MAX_PATH] = {0}; GetModulePath(); sprintf(szSNName,"%s\\register.sn",g_szModulePath); sprintf(szIniName,"%s\\set.ini",g_szModulePath); CFileStatus Sfile; if (CFile::GetStatus(szSNName,Sfile) == FALSE) { //LOG4C((LOG_NOTICE,"SN文件不存在")); MessageBox("SN文件不存在","注意",MB_ICONWARNING); m_btest = FALSE; return ; } if (CFile::GetStatus(szIniName,Sfile) == FALSE) { //LOG4C((LOG_NOTICE,"配置文件不存在")); MessageBox("Ini文件不存在","注意",MB_ICONWARNING); m_btest = FALSE; return ; } //CSNRegister snrig; if ( !m_robj.IsCorrectSN(szSNName)) { MessageBox("无效文件","注意",MB_ICONWARNING); m_btest = FALSE; return; } m_TStart = CTime::GetCurrentTime(); #endif /************************************************************************/ /* 线程测试; */ /************************************************************************/ GetSysData(); MTVERIFY (g_hRunObject = ::CreateEvent( NULL, /* Security */ TRUE, /* Manual event */ 0, /* Clear on creation */ 0)); //if( ProgramEncrypt(NULL) == 0 ) return FALSE; if( InitDog() != 0 ) { if( g_hRunObject != NULL ) { MTVERIFY( CloseHandle( g_hRunObject ) ); g_hRunObject = NULL; } return; } } // 计算剩余时间; //void CalcLeftTime(DWORD dwTotal, DWORD dwLeft) void CregistersnDlg::CalcLeftTime() { char szSNName[MAX_PATH] = {0}; GetModulePath(); sprintf(szSNName,"%s\\register.sn",g_szModulePath); // 获取时间差 单位:分钟; m_TEndof = CTime::GetCurrentTime(); CTimeSpan ts = m_TEndof - m_TStart; DWORD dwMinute = ts.GetMinutes(); LOG4C((LOG_NOTICE,"时间差 = %d",dwMinute)); dwMinute = m_robj.itf_returnLeftTime() - dwMinute; m_robj.itf_SavebyLTime(dwMinute,szSNName); LOG4C((LOG_NOTICE,"剩余时间 = %d",dwMinute)); } /************************************************************************/ /* 以上为测试代码; */ /************************************************************************/ void CregistersnDlg::OnClose() { //if (m_btest) //{ // CalcLeftTime(); //} CDialog::OnClose(); }