Пример #1
0
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;
}
Пример #2
0
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;
}