IDE.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. // IDE.cpp : 定义应用程序的类行为。
  2. //
  3. #include "stdafx.h"
  4. //#include <vld.h>
  5. #include "IDE.h"
  6. #include "MainFrm.h"
  7. #include "ChildFrm.h"
  8. #include "IDEDoc.h"
  9. #include "IDEView.h"
  10. #include "SysLib.h"
  11. #include ".\ide.h"
  12. #include "StartupDlg.h"
  13. #include "Login.h"
  14. #include "gooddc.h"
  15. #include "public.h"
  16. #include "md5class.h"
  17. //#include "conv.h"
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #endif
  21. HANDLE g_hScriptThread = NULL; //线程对象
  22. HANDLE g_hReConnectSrvThread = NULL;
  23. DWORD WINAPI ReConnectSrvThread( void *pData );
  24. extern CStringArray g_saCurPicVar;
  25. extern CRITICAL_SECTION g_CSLimit;
  26. // CIDEApp
  27. BEGIN_MESSAGE_MAP(CIDEApp, CWinApp)
  28. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  29. // 基于文件的标准文档命令
  30. ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  31. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  32. // 标准打印设置命令
  33. ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  34. ON_COMMAND(ID_APP_EXIT, OnAppExit)
  35. END_MESSAGE_MAP()
  36. // CIDEApp 构造
  37. CIDEApp::CIDEApp()
  38. {
  39. // TODO: 在此处添加构造代码,
  40. // 将所有重要的初始化放置在 InitInstance 中
  41. }
  42. // 唯一的一个 CIDEApp 对象
  43. CIDEApp theApp;
  44. CMainFrame *g_pMainFrm = NULL;
  45. // CIDEApp 初始化
  46. HANDLE hMutex;
  47. BOOL CIDEApp::InitInstance()
  48. {
  49. // 如果一个运行在 Windows XP 上的应用程序清单指定要
  50. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  51. //则需要 InitCommonControls()。否则,将无法创建窗口。
  52. InitializeCriticalSection(&g_CSLimit);
  53. InitCommonControls();
  54. CoInitialize( NULL );
  55. CWinApp::InitInstance();
  56. //// 初始化 OLE 库
  57. if (!AfxOleInit())
  58. {
  59. AfxMessageBox(IDP_OLE_INIT_FAILED);
  60. return FALSE;
  61. }
  62. AfxEnableControlContainer();
  63. // 标准初始化
  64. // 如果未使用这些功能并希望减小
  65. // 最终可执行文件的大小,则应移除下列
  66. // 不需要的特定初始化例程
  67. // 更改用于存储设置的注册表项
  68. // TODO: 应适当修改该字符串,
  69. // 例如修改为公司或组织名
  70. SetRegistryKey(g_strAppwizardCreateApp);
  71. LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
  72. // START GDI+ SUB SYSTEM
  73. GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
  74. MTVERIFY( g_hRunObject = ::CreateEvent(
  75. NULL, /* Security */
  76. TRUE, /* Manual event */
  77. 0, /* Clear on creation */
  78. "IDE::g_hRunObject") );
  79. //InitPrintQueue();
  80. GetSysData();
  81. if( !g_FindProcess( "eBusShortCut.exe" ) )
  82. {
  83. CString sTemp;
  84. sTemp = g_strDirectory;
  85. sTemp += "\\eBusShortCut.exe";//
  86. ShellExecute( NULL, NULL, sTemp,0,NULL, SW_SHOWNORMAL );
  87. }
  88. CString strFileName;
  89. strFileName.Format("%s\\log4crc", g_strDirectory);
  90. ///设置日志配置文件名
  91. LOG4C_PARAM_CFG_FILE_NAME(strFileName);
  92. ///设置日志级别
  93. LOG4C_PARAM_LOG_LEVEL("unknown");
  94. ///设置日志文件大小
  95. LOG4C_PARAM_LOG_FILE_SIZE(10240);
  96. ///设置生成日志文件个数,达到最大个数将自动覆盖最旧的日志
  97. LOG4C_PARAM_LOG_FILE_NUM(5);
  98. ///设置每次记录日志都重新读取日志配置文件
  99. LOG4C_PARAM_REREAD_LOG_CFG_FILE(1);
  100. ///带参数日志模块初始化,以上所有设置了的参数都将生效,没有设置的采用缺省值
  101. LOG4C_INIT_WITH_PARAM();
  102. LOG4C((LOG_NOTICE, "系统成功启动!"));
  103. CHAR strFile[MAX_FILE_LENGTH + 1] = "";
  104. if( strcmp(g_strLanguage, "CHS") == 0 )
  105. {
  106. wsprintf(strFile, "%s\\ChineseRes.dll", g_strDirectory);
  107. }
  108. else if( strcmp(g_strLanguage, "CHT") == 0 )
  109. {
  110. wsprintf(strFile, "%s\\TaiwanRes.dll", g_strDirectory);
  111. }
  112. else if( strcmp(g_strLanguage, "ENG") == 0 )
  113. {
  114. wsprintf(strFile, "%s\\EnglishRes.dll", g_strDirectory);
  115. }
  116. g_hLangDLL = ::LoadLibrary(strFile);
  117. AfxSetResourceHandle(g_hLangDLL);
  118. GetResourceString();
  119. #if 0
  120. CStartupDlg dlg;
  121. dlg.Create(IDD_STARTUP);
  122. char* lpBmpFile = "Bitmap\\tryto.bmp";
  123. BITMAPFILEHEADER bf;
  124. BITMAPINFOHEADER bi;
  125. FILE* fp = fopen(lpBmpFile,"rb");
  126. if (fp)
  127. {
  128. fread(&bf,sizeof(bf),1,fp);
  129. fread(&bi,sizeof(bi),1,fp);
  130. fclose(fp);
  131. int nCX = GetSystemMetrics(SM_CXSCREEN);
  132. int nCY = GetSystemMetrics(SM_CYSCREEN);
  133. int nW = bi.biWidth;
  134. int nH = bi.biHeight;
  135. dlg.MoveWindow((nCX-nW)/2,(nCY-nH)/2,nW,nH);
  136. }
  137. dlg.ShowWindow(TRUE);
  138. CDC* pDC = dlg.GetDC();
  139. CRect rect;
  140. dlg.GetClientRect(rect);
  141. int screenx=GetSystemMetrics(SM_CXSCREEN);
  142. int screeny=GetSystemMetrics(SM_CYSCREEN);
  143. DisplayBMP(pDC, 0, 0, rect.Width(), rect.Height(), lpBmpFile, FALSE);
  144. dlg.ReleaseDC(pDC);
  145. Sleep(3000);
  146. dlg.ShowWindow(FALSE);
  147. #endif
  148. PMS_InitSDK();
  149. CDBInterface::GetInstancePtr()->AddGroupToDll();
  150. CDBInterface::GetInstancePtr()->AddUserToDll();
  151. // 登录
  152. int nRet = IsNoDlgLogin();
  153. if( nRet!=1 )
  154. {
  155. CLogin udlg;
  156. if( udlg.DoModal() != IDOK )
  157. {
  158. return FALSE;
  159. }
  160. CString sContent;
  161. sContent.Format("用戶< %s >登录",udlg.m_sUserID );
  162. CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_LOGIN,0,"",(char *)(LPCTSTR)sContent );
  163. //检查控制,设置是否有密码
  164. CHAR strFile[MAX_FILE_LENGTH + 1] = "";
  165. wsprintf(strFile, "%s\\clientset.ini", g_strDirectory);
  166. CHAR strPwd[MAX_PASSWORD_LENGTH + 1] = "";
  167. GetPrivateProfileString("User", "ControlPwd","", strPwd,sizeof(strPwd), strFile );
  168. if( (CString)strPwd=="d41d8cd98f00b204e9800998ecf8427e" )
  169. g_bHaveControlPwd = false;
  170. }
  171. // 注册应用程序的文档模板。文档模板
  172. // 将用作文档、框架窗口和视图之间的连接
  173. CMultiDocTemplate* pDocTemplate;
  174. pDocTemplate = new CMultiDocTemplate(IDR_MAINFRAME,
  175. RUNTIME_CLASS(CIDEDoc),
  176. RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
  177. RUNTIME_CLASS(CIDEView));
  178. AddDocTemplate(pDocTemplate);
  179. // 创建主 MDI 框架窗口
  180. CMainFrame* pMainFrame = new CMainFrame;
  181. pMainFrame->m_pDoc = (CIDEDoc *)pDocTemplate->CreateNewDocument();
  182. if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
  183. {
  184. MessageBox(NULL,"资源文件不对1", g_strTip, MB_ICONWARNING);
  185. return FALSE;
  186. }
  187. m_pMainWnd = pMainFrame;
  188. // 仅当具有后缀时才调用 DragAcceptFiles
  189. // 在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生
  190. // 分析标准外壳命令、DDE、打开文件操作的命令行
  191. CCommandLineInfo cmdInfo;
  192. ParseCommandLine(cmdInfo);
  193. // 调度在命令行中指定的命令。如果
  194. // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
  195. cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
  196. if (!ProcessShellCommand(cmdInfo))
  197. {
  198. MessageBox(NULL,"资源文件不对2", g_strTip, MB_ICONWARNING);
  199. return FALSE;
  200. }
  201. // 主窗口已初始化,因此显示它并对其进行更新
  202. m_pMainWnd->SetWindowText(g_strStoneuIspcms);
  203. pMainFrame->ShowWindow(m_nCmdShow);
  204. //if( g_bFullScreen )
  205. //{
  206. // m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//窗口最大化 关于全屏
  207. //}
  208. pMainFrame->UpdateWindow();
  209. g_pMainFrm = pMainFrame;
  210. MTVERIFY( g_hReConnectSrvThread = ::CreateThread(NULL, 0, ReConnectSrvThread, 0, 0, 0) );
  211. DWORD thredid;
  212. g_hScriptThread = (HANDLE) ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ScriptRunProc,NULL,0,&thredid); //脚本处理
  213. return TRUE;
  214. }
  215. int CIDEApp::ExitInstance()
  216. {
  217. // TODO: 在此添加专用代码和/或调用基类
  218. LOG4C((LOG_NOTICE, "ExitInstance!"));
  219. if( g_hRunObject )
  220. MTVERIFY( SetEvent( g_hRunObject ) );
  221. if( pDevicesManager != NULL )
  222. {
  223. //if (g_bStartRun)
  224. {
  225. #if 1
  226. for( int iPortIndex=0;iPortIndex<2;iPortIndex++ )
  227. {
  228. CString sPortTemp;
  229. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  230. pDevicesManager->DisConnection(sPortTemp);
  231. }
  232. #else
  233. int nVarSize = pVariantsManager->m_analog.GetSize();
  234. int nVarUseSize=0;
  235. for( int i=0;i<nVarSize;i++ )
  236. {
  237. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice==NULL )
  238. continue;
  239. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice->m_bUsed )
  240. nVarUseSize++;
  241. }
  242. int nPortSize = nVarUseSize/VARNUM2PORT;
  243. if( nPortSize%VARNUM2PORT==0 && nPortSize>0 )
  244. nPortSize--;
  245. for( int iPortIndex=0;iPortIndex<=nPortSize;iPortIndex++ )
  246. {
  247. CString sPortTemp;
  248. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  249. pDevicesManager->DisConnection(sPortTemp);
  250. }
  251. #endif
  252. }
  253. }
  254. if( g_hScriptThread != NULL )
  255. {
  256. if( g_hScriptThread )
  257. {
  258. MTVERIFY( WaitForSingleObject( g_hScriptThread, INFINITE ) != WAIT_FAILED );
  259. MTVERIFY( CloseHandle(g_hScriptThread) );
  260. }
  261. g_hScriptThread = NULL;
  262. // 清除脚本队列
  263. POSITION pos = g_ScriptParamList.GetHeadPosition();
  264. while (pos != NULL)
  265. {
  266. POSITION tmpPos = pos;
  267. ScriptParam* pScriptParam = g_ScriptParamList.GetNext( pos );
  268. g_ScriptParamList.RemoveAt( tmpPos );
  269. delete pScriptParam;
  270. }
  271. }
  272. if( g_hReConnectSrvThread != NULL )
  273. {
  274. MTVERIFY( WaitForSingleObject( g_hReConnectSrvThread, INFINITE ) != WAIT_FAILED );
  275. MTVERIFY( CloseHandle( g_hReConnectSrvThread ) );
  276. g_hReConnectSrvThread = NULL;
  277. }
  278. if( pDevicesManager != NULL )
  279. {
  280. //chn mem
  281. #if 1
  282. for( int iPortIndex=0;iPortIndex<2;iPortIndex++ )
  283. {
  284. CString sPortTemp;
  285. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  286. pDevicesManager->Release( sPortTemp );
  287. }
  288. #else
  289. int nVarSize = pVariantsManager->m_analog.GetSize();
  290. int nVarUseSize=0;
  291. for( int i=0;i<nVarSize;i++ )
  292. {
  293. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice==NULL )
  294. continue;
  295. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice->m_bUsed )
  296. nVarUseSize++;
  297. }
  298. int nPortSize = nVarUseSize/VARNUM2PORT;
  299. if( nPortSize%VARNUM2PORT==0 && nPortSize>0 )
  300. nPortSize--;
  301. for( int iPortIndex=0;iPortIndex<=nPortSize;iPortIndex++ )
  302. {
  303. CString sPortTemp;
  304. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  305. pDevicesManager->Release( sPortTemp );
  306. }
  307. #endif
  308. delete pDevicesManager;
  309. pDevicesManager = NULL;
  310. }
  311. //chn mem
  312. CDBInterface::GetInstancePtr()->Release();
  313. if( pVariantsManager != NULL )
  314. {
  315. delete pVariantsManager;
  316. pVariantsManager = NULL;
  317. }
  318. if( pEventServer != NULL )
  319. {
  320. delete pEventServer;
  321. pEventServer = NULL;
  322. }
  323. if( g_hRunObject )
  324. MTVERIFY( CloseHandle( g_hRunObject ) );
  325. //UninitPrintQueue();
  326. CDBConnection::GetInstancePtr()->DBConnectionCheckThreadStop();
  327. //DBConnectionThreadEnd();
  328. //chn mem
  329. CDBConnection::GetInstancePtr()->Release();
  330. if(g_hLangDLL)
  331. {
  332. AfxFreeLibrary(g_hLangDLL);
  333. }
  334. LOG4C((LOG_NOTICE, "系统成功退出!"));
  335. ///关闭日志模块防止内存/资源泄漏
  336. LOG4C_FINI();
  337. // Shutdown GDI+ subystem
  338. GdiplusShutdown(m_gdiplusToken);
  339. //释放权限所占的内存
  340. PMS_UnInitSDK();
  341. ::CloseHandle( hMutex );
  342. hMutex = NULL;
  343. DeleteCriticalSection( &g_CSLimit );
  344. CoUninitialize();
  345. return CWinApp::ExitInstance();
  346. }
  347. void CIDEApp::OnAppExit()
  348. {
  349. // TODO: 在此添加命令处理程序代码
  350. CMainFrame *pMainFrm=(CMainFrame*)m_pMainWnd;
  351. pMainFrm->m_nViewCount = 0;
  352. pMainFrm->OnSuperEnd();
  353. }
  354. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  355. class CAboutDlg : public CDialog
  356. {
  357. public:
  358. CAboutDlg();
  359. // 对话框数据
  360. enum { IDD = IDD_ABOUTBOX };
  361. protected:
  362. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  363. // 实现
  364. protected:
  365. DECLARE_MESSAGE_MAP()
  366. public:
  367. virtual BOOL OnInitDialog();
  368. };
  369. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  370. {
  371. }
  372. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  373. {
  374. CDialog::DoDataExchange(pDX);
  375. }
  376. BOOL CAboutDlg::OnInitDialog()
  377. {
  378. CDialog::OnInitDialog();
  379. // TODO: 在此添加额外的初始化
  380. CString str;
  381. str.Format("Ver:%s",g_strVersion );
  382. GetDlgItem(IDC_STA_VERSION)->SetWindowText(str);
  383. return TRUE; // return TRUE unless you set the focus to a control
  384. // 异常: OCX 属性页应返回 FALSE
  385. }
  386. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  387. END_MESSAGE_MAP()
  388. // 用于运行对话框的应用程序命令
  389. void CIDEApp::OnAppAbout()
  390. {
  391. CAboutDlg aboutDlg;
  392. aboutDlg.DoModal();
  393. }
  394. // My:
  395. DWORD WINAPI ReConnectSrvThread( void *pData )
  396. {
  397. do
  398. {
  399. //if (g_bStartRun)
  400. {
  401. #if 1
  402. for( int iPortIndex=0;iPortIndex<2;iPortIndex++ )
  403. {
  404. CString sPortTemp;
  405. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  406. // 判断与服务Socket的连接状态;
  407. if( FALSE == pDevicesManager->GetSocketStatus(sPortTemp) )
  408. {
  409. pVariantsManager->SetSysComunicationVar( 1.0 );
  410. if( pDevicesManager->GetOpenStatus(sPortTemp) == TRUE )
  411. {
  412. pDevicesManager->DisConnection(sPortTemp);
  413. }
  414. if( !pDevicesManager->Connection(g_strServerIP, sPortTemp) )
  415. {
  416. pDevicesManager->SetSocketStatus(FALSE,sPortTemp);
  417. }
  418. else
  419. {
  420. pVariantsManager->SetSysComunicationVar( 0.0 );
  421. pDevicesManager->SetSocketStatus(TRUE,sPortTemp);
  422. }
  423. }
  424. }
  425. #else
  426. int nVarSize = pVariantsManager->m_analog.GetSize();
  427. int nVarUseSize=0;
  428. for( int i=0;i<nVarSize;i++ )
  429. {
  430. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice==NULL )
  431. continue;
  432. if( pVariantsManager->m_analog.GetAt(i)->m_pDevice->m_bUsed )
  433. nVarUseSize++;
  434. }
  435. int nPortSize = nVarUseSize/VARNUM2PORT;
  436. if( nPortSize%VARNUM2PORT==0 && nPortSize>0 )
  437. nPortSize--;
  438. for( int iPortIndex=0;iPortIndex<=nPortSize;iPortIndex++ )
  439. {
  440. CString sPortTemp;
  441. sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex );
  442. if( FALSE == pDevicesManager->GetSocketStatus(sPortTemp) )
  443. {
  444. pVariantsManager->SetSysComunicationVar( 1.0 );
  445. if( pDevicesManager->GetOpenStatus(sPortTemp) == TRUE )
  446. {
  447. pDevicesManager->DisConnection(sPortTemp);
  448. }
  449. if( !pDevicesManager->Connection(g_strServerIP, sPortTemp) )
  450. {
  451. pDevicesManager->SetSocketStatus(FALSE,sPortTemp);
  452. }
  453. else
  454. {
  455. pVariantsManager->SetSysComunicationVar( 0.0 );
  456. pDevicesManager->SetSocketStatus(TRUE,sPortTemp);
  457. }
  458. }
  459. }
  460. #endif
  461. }
  462. //Sleep(2000);
  463. }while( WaitForSingleObject( g_hRunObject, 125L ) == WAIT_TIMEOUT );
  464. return 0;
  465. }
  466. // CIDEApp 消息处理程序
  467. int CIDEApp::IsNoDlgLogin()//是否是没对话框登录 -1:不是 0:失败 1:成功
  468. {
  469. int nRet = -1;
  470. CHAR strFile[MAX_FILE_LENGTH + 1] = "";
  471. wsprintf(strFile, "%s\\clientset.ini", g_strDirectory);
  472. char RUN[MAX_PATH] = {0};
  473. memset(RUN, 0, sizeof(RUN));
  474. //是否是没对话框登录
  475. if ( GetPrivateProfileString("User", "NoDlgLogin","",RUN, 10, strFile) != 0)
  476. {
  477. if( RUN[0] == '0' )
  478. return nRet;
  479. }
  480. WritePrivateProfileString("User", "NoDlgLogin", "0", strFile);
  481. GetPrivateProfileString("User", "UserID","", g_strLoginUserID,sizeof(g_strLoginUserID), strFile );
  482. memset(g_strDefaultUserID, 0, sizeof(g_strDefaultUserID) );
  483. strcpy(g_strDefaultUserID, g_strLoginUserID);
  484. GetPrivateProfileString("User", "UserPwd","", g_strLoginPwd,sizeof(g_strLoginPwd), strFile );
  485. memset(g_strDefaultUserPwd, 0, sizeof(g_strDefaultUserPwd) );
  486. strcpy(g_strDefaultUserPwd, g_strLoginPwd);
  487. CString sUserID,sUserPwd;
  488. sUserID = g_strLoginUserID;
  489. sUserPwd = g_strLoginPwd;
  490. if( sUserID=="" || sUserPwd=="" )
  491. return nRet;
  492. ///////////////////////////////////////////////////////////////////////////////
  493. char Path[_MAX_PATH] = {0};
  494. strcat(Path, g_strDirectory);
  495. strcat(Path,"\\");
  496. strcat(Path, _PROJECTDIR);
  497. strcat(Path,"\\");
  498. strcat(Path, "runpara.ini");
  499. //CString str;
  500. if ( GetPrivateProfileString("RUNPARA", "STARTRUN","",RUN, 10, Path) != 0)
  501. {
  502. g_bStartRun = (RUN[0] == '1' ? true:false);
  503. }
  504. if ( GetPrivateProfileString("RUNPARA", "FULLSCREEN","",RUN, 10, Path) != 0)
  505. {
  506. g_bFullScreen = RUN[0] == '1' ? true:false;
  507. }
  508. CMD5 md5;
  509. md5.setPlainText( (char *)(LPCTSTR)sUserPwd );
  510. if( ( ( strcmp(g_strDefaultUserPwd, "") != 0 ) && (strcmp(g_strLoginUserID, (char*)(LPCTSTR)sUserID) != 0 ) ) ||
  511. ( strcmp(g_strDefaultUserPwd, "") == 0 ) ||
  512. (strcmp(g_strLoginUserID, (char*)(LPCTSTR)sUserID) != 0 ) ||
  513. ( strcmp(g_strDefaultUserPwd, sUserPwd) != 0 ) ||
  514. (strcmp(g_strLoginUserID, "") == 0) )
  515. {
  516. sUserPwd = CString(md5.getMD5Digest());
  517. }
  518. nRet = CDBInterface::GetInstancePtr()->ValidateUser((char*)(LPCTSTR)sUserID, (char *)(LPCTSTR)sUserPwd);
  519. //LOG4C((LOG_NOTICE, "ValidateUser return %d", nRet));
  520. if( nRet < 1 )
  521. {
  522. MessageBox(NULL,g_strMsgUserInvalid, g_strTip, MB_ICONWARNING);
  523. return 0;
  524. }
  525. CHAR chStatus[MAX_STATUS_LENGTH + 1] = {0};
  526. CDBInterface::GetInstancePtr()->ValidateUserEnable( (char*)(LPCTSTR)sUserID, chStatus );
  527. if( atoi(chStatus) == 1 )
  528. {
  529. MessageBox(NULL,g_strMsgUserDisable, g_strTip, MB_ICONWARNING);
  530. return 0;
  531. }
  532. //cHn add
  533. CDBInterface::GetInstancePtr()->GetUserIDByName( sUserID,g_nUserID );
  534. if( g_bStartRun==0 && -1==PMS_VerifyUserPermit( g_nUserID,PMS_EDIT_STATUS_MANAGE,"" ) )
  535. {
  536. MessageBox(NULL,g_strNoPermit, g_strTip, MB_ICONWARNING);
  537. return 0;
  538. }
  539. return 1;
  540. }