BOOL CHeavenShadowApp::InitInstance() { ////////////////////////////////////////////////////////////////////////// HANDLE hMutex = ::CreateMutexW(NULL,TRUE,HS_ONLY_ONE_PROCESS); if (GetLastError() == ERROR_ALREADY_EXISTS) { ::MessageBox( NULL, L"您已经运行了天影卫士!", L"天影卫士", 0 ); //弹出对话框确认不能运行第二个实例。 CloseHandle(hMutex); ExitProcess(0); } if (HsIs64BitWindows() == TRUE && sizeof(ULONG_PTR) == sizeof(ULONG32)) { ::MessageBox( NULL, L"您在使用 64 位的 Windows 操作系统。运行天影卫士 32 位版\r\n可能会造成不可预料的后果。敬请选择天影卫士 64 位版。", L"天影卫士", 0 ); ExitProcess(0); } //////////////////显示Splash,2010-10-15/////////////////////////////////// CWzdSplash wndSplash; //创建启动窗口类的实例 wndSplash.Create(IDB_BITMAP_WZDSPLASH); wndSplash.CenterWindow(); wndSplash.UpdateWindow(); //send WM_PAINT ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); AfxEnableControlContainer(); // 创建 shell 管理器,以防对话框包含 // 任何 shell 树视图控件或 shell 列表视图控件。 CShellManager *pShellManager = new CShellManager; // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("天影卫士")); ////////////////////////////////////////////////////////////////////////// // WCHAR *Temp = AfxGetApp()->m_lpCmdLine; // // BOOL bIsHideWnd = FALSE; // // if (wcslen(Temp)) // { // WCHAR* p = Temp; // // for (int i = 0; i< wcslen(Temp); i++) // { // if (_wcsnicmp(p,L"-HideWnd",wcslen(L"-HideWnd"))==0) // { // bIsHideWnd = TRUE; // } // p++; // } // } // CHeavenShadowDlg* dlg = new CHeavenShadowDlg(); // // m_pMainWnd = dlg; // // INT_PTR nResponse = dlg->Create(IDD_HEAVENSHADOW_DIALOG); // // dlg->ShowWindow(SW_HIDE); // // return FALSE; ////////////////////////////////////////////////////////////////////////// //加载驱动 //ExtractFile(); ////////////////////////////////////////////////////////////////////////// WCHAR wzSysPath[260] = {0}; WCHAR *p; CString SysPath; HMODULE module = GetModuleHandle(0); GetModuleFileName(module,wzSysPath,sizeof(wzSysPath)); p = wcsrchr(wzSysPath,L'\\'); *p = 0; SysPath = wzSysPath; if (HsIs64BitWindows()) SysPath += L"\\sys\\x64\\HeavenShadowDrv.sys"; else SysPath += L"\\sys\\x86\\HeavenShadowDrv.sys"; HsLoadNTDriver(HS_DRIVER_NAME,SysPath.GetBuffer()); ////////////////////////////////////////////////////////////////////////// g_hDevice = CreateFileW(HS_LINK_NAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (g_hDevice != INVALID_HANDLE_VALUE) { ULONG_PTR ulCurrentPid = GetCurrentProcessId(); ULONG_PTR ulRetCode = 0; DWORD dwReturnSize = 0; BOOL dwRet = DeviceIoControl(g_hDevice, HS_IOCTL(HS_IOCTL_PROC_SENDSELFPID), &ulCurrentPid, sizeof(ULONG_PTR), &ulRetCode, sizeof(ULONG_PTR), &dwReturnSize, NULL); if (dwRet && ulRetCode) { bDriverIsOK = TRUE; } } ////////////////////////////////////////////////////////////////////////// CHeavenShadowDlg dlg; m_pMainWnd = &dlg; wndSplash.DestroyWindow(); INT_PTR nResponse = dlg.DoModal(); ////////////////////////////////////////////////////////////////////////// CloseHandle(hMutex); CloseHandle(g_hDevice); HsUnloadNTDriver(HS_DRIVER_NAME); //卸载驱动 ////////////////////////////////////////////////////////////////////////// if (nResponse == IDOK) { // TODO: 在此放置处理何时用 // “确定”来关闭对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 } // 删除上面创建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // // 而不是启动应用程序的消息泵。 return FALSE; }
BOOL CSmartVillageApp::InitInstance() { //XP数据库支持 //ZOGNA//DOWN AfxOleInit(); //CoInitialize(NULL); //AfxGetStaticModuleState(); // AfxGetModuleState()->m_hCurrentInstanceHandle = GetModuleHandle(NULL); /* HRESULT hr = OleInitialize(NULL); if(hr == S_FALSE) { OleUninitialize(); } AfxEnableControlContainer(); COleObjectFactory::RegisterAll(); */ //当前路径 GetCurrentDirectory(ZOG_MAX_PATH_STR, CurrentDir); sprintf(DlgSetSystem.SystemIniPath,"%s\\yrsysteminfo.ini",CurrentDir); //ZOGNA//UP //读系统配置表 DlgSetSystem.Read2Dlg(); CWzdSplash wndSplash; //创建启动窗口类的实例 wndSplash.Create(IDB_SPLASH); wndSplash.CenterWindow(); wndSplash.UpdateWindow(); //send WM_PAINT // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif ////////////////lynn///////////////// ////////////////lynn///////////////// int ioError = MySqlIO.ConnectionMySQL("YRSVDataBaseConfig.db"); if(ioError == ReadFile_FAIL) { CDLGWarnning dlgw; dlgw.m_wintxt="连接数据库"; //窗口标题 dlgw.m_warntxt="读数据库配置文件失败"; //窗口内容 dlgw.DoModal(); return FALSE; } else if(ioError == MySQLInit_FAIL) { CDLGWarnning dlgw; dlgw.m_wintxt="连接数据库"; //窗口标题 dlgw.m_warntxt="数据库ADO初始化失败"; //窗口内容 dlgw.DoModal(); return FALSE; } else if(ioError == ContOpen_FAIL) { CDLGWarnning dlgw; dlgw.m_wintxt="连接数据库"; //窗口标题 dlgw.m_warntxt="数据库无法连接:账号密码IP异常 或文件夹带()"; //窗口内容 dlgw.DoModal(); return FALSE; } else if(ioError == Connectd_DONE) { //MessageBox("连接数据库成功"); } #if OPEN_FACEDETECT_CODE //初始化人脸模型 SetCurrentDirectory(CurrentDir); if(Face_Init("models", &RWmodule_handle) != 0) { CDLGWarnning dlgw; dlgw.m_wintxt="人脸模型"; //窗口标题 dlgw.m_warntxt="人脸模型加载失败"; //窗口内容 dlgw.DoModal(); } #endif wndSplash.DestroyWindow();//销毁初始画面窗口 ////////////////lynn///////////////// LPWSTR *szArglist = NULL; int nArgs = 0; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if( nArgs > 1) { //szArglist就是保存参数的数组 //nArgs是数组中参数的个数 //数组的第一个元素表示进程的path,也就是szArglist[0],其他的元素依次是输入参数。 DlgLogin.SilentMode=TRUE; DlgLogin.flag=LOGIN_IN; DlgLogin.m_user = szArglist[1]; DlgLogin.m_password = szArglist[2]; //静默登陆 DlgLogin.OnOK_Silent(); } else { DlgLogin.SilentMode=FALSE; //登陆框 DlgLogin.flag=LOGIN_IN; if( IDCANCEL == DlgLogin.DoModal()) { #if OPEN_FACEDETECT_CODE Face_UnInit(); #endif return FALSE; } } //取得参数后,释放CommandLineToArgvW申请的空间 LocalFree(szArglist); //主界面 CSmartVillageDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } #if OPEN_FACEDETECT_CODE Face_UnInit(); #endif //ZOGNA//DOWN //CoUninitialize(); //ZOGNA//UP // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; }