Conference.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // Conference.cpp : Defines the class behaviors for the application.
  2. //
  3. #include "stdafx.h"
  4. #include "Conference.h"
  5. #include "LoginDlg.h"
  6. #include "MainFrame.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CConferenceApp
  14. BEGIN_MESSAGE_MAP(CConferenceApp, CWinApp)
  15. //{{AFX_MSG_MAP(CConferenceApp)
  16. //}}AFX_MSG
  17. END_MESSAGE_MAP()
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CConferenceApp construction
  20. CConferenceApp::CConferenceApp() : mutex( false , "深圳赛力视频监控系统会议客户端" )
  21. {
  22. this->appIni = "";
  23. this->slock = NULL;
  24. this->hlogWnd = NULL;
  25. }
  26. /////////////////////////////////////////////////////////////////////////////
  27. // The one and only CConferenceApp object
  28. CConferenceApp theApp;
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CConferenceApp initialization
  31. BOOL CConferenceApp::InitInstance()
  32. {   //设定程序开机自动运行
  33. this->SetAutoRun( );
  34.     //所订互斥量
  35. this->slock = new CSingleLock( &this->mutex );
  36.     //如果锁定失败,表示程序已经运行
  37. if( ! this->slock->Lock( 0 ) )
  38. {   //查找窗口
  39. CWnd * pWnd = CWnd::FindWindow( "AfxFrameOrView42d" , NULL );
  40. CString text;
  41. while( pWnd )
  42. {
  43. pWnd->GetWindowText( text );
  44. if( text.Find( "视频会议系统" ) != -1 )
  45. break;
  46.     else
  47. pWnd = pWnd->GetNextWindow( );
  48. }//显示已经运行的程序
  49. if( pWnd )
  50. {
  51. pWnd->ShowWindow( SW_SHOW );
  52. pWnd->SendMessage( WM_SYSCOMMAND , SC_MAXIMIZE );
  53. pWnd->SetForegroundWindow( );
  54. }
  55. else
  56. CWnd::GetActiveWindow( )->MessageBox( "视频会议系统已经运行" , "视频会议" , MB_ICONSTOP | MB_OK );
  57. delete this->slock ;
  58. this->slock = NULL;
  59. return false;
  60. }
  61. CLoginDlg dlg;
  62. //日志窗口
  63. if( ::GetPrivateProfileInt( "用户信息" , "日志窗口" , 0 , this->appIni ) )
  64. {
  65. this->hlogWnd = ::CreateLogWnd( NULL , NULL );
  66. CWnd::FromHandle( this->hlogWnd )->SetWindowText( "视频会议客户端日志信息" );
  67. }//连接服务器窗口
  68. if( dlg.DoModal( ) == IDOK )
  69. {   //启动初始化界面的等待窗口
  70. ::AfxBeginThread( CConferenceApp::OnInitDialog , this );
  71. while( ! this->initdlg.GetSafeHwnd( ) ) ::Sleep( 100 );
  72.         //主界面
  73. this->m_pMainWnd = new CMainFrame( );
  74.         //判断窗口运行的初始状态 
  75. if( ! ::GetPrivateProfileInt( "用户信息" , "运行窗口" , 0 , this->appIni ) )
  76. this->m_pMainWnd->SendMessage( WM_SYSCOMMAND , SC_MINIMIZE );
  77. return true;
  78. }//销毁日志窗口
  79. ::DestroyLogWnd( this->hlogWnd );
  80. return false;
  81. }
  82. //退出系统
  83. int CConferenceApp::ExitInstance() 
  84. {
  85. ::WriteLog( theApp.GetLogHwnd( ) , "视频会议客户端退出系统" );
  86. this->GetClient( ).Stop( );
  87. if( this->slock )
  88. {
  89. this->slock->Unlock( );
  90. delete this->slock;
  91. this->slock = NULL;
  92. }//保存日志窗口的日志信息
  93. ::SaveLog( this->hlogWnd , this->appIni.Left( this->appIni.ReverseFind( '\' ) + 1 ) + "会议日志.txt" );
  94. ::DestroyLogWnd( this->hlogWnd );
  95. return CWinApp::ExitInstance();
  96. }
  97. UINT CConferenceApp::OnInitDialog( void * wParam )
  98. {
  99. theApp.initdlg.DoModal( );
  100. return 0;
  101. }
  102. //设定开机自动运行
  103. void CConferenceApp::SetAutoRun( void )
  104. {
  105. CString name;
  106. ::GetModuleFileName( NULL , name.GetBufferSetLength( MAX_PATH ) , MAX_PATH );
  107. name.ReleaseBuffer( );
  108. HKEY key;
  109. ::RegOpenKey( HKEY_LOCAL_MACHINE , "Software\Microsoft\Windows\CurrentVersion\Run" , &key );
  110. ::RegSetValueEx( key , "视频会议" , 0 , REG_SZ , ( const unsigned char * )( const char * )name , name.GetLength( ) );
  111. ::RegCloseKey( key );
  112. this->appIni = name.Left( name.ReverseFind( '\' ) + 1 ) + "meeting.ini";
  113. }