SysLib.cpp 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204
  1. #include "stdafx.h"
  2. #include <tlhelp32.h>
  3. #include "SysLib.h"
  4. #include <io.h>
  5. #include <odbcinst.h>
  6. #include <afxdb.h>
  7. #include "resource.h"
  8. #include "crc32.h"
  9. //增加自动启动注册表项
  10. INT AddAutoSysRun(CHAR *strExeFile, INT iAutoRunSystem)
  11. {
  12. HKEY hKey = NULL;
  13. DWORD dwErrorCode = 0;
  14. //创建注册表,有该键则读取,无则创建
  15. dwErrorCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
  16. "Software\\Microsoft\\Windows\\CurrentVersion\\Run",
  17. 0,
  18. NULL,
  19. REG_OPTION_NON_VOLATILE,
  20. KEY_ALL_ACCESS,
  21. NULL, //Security
  22. &hKey,
  23. NULL);
  24. if (dwErrorCode == ERROR_SUCCESS)
  25. {
  26. if (iAutoRunSystem)
  27. dwErrorCode = RegSetValueEx(hKey, "DataBase Monitor Service", NULL, REG_SZ, (BYTE*)strExeFile, strlen(strExeFile));
  28. else
  29. dwErrorCode = RegDeleteKey(hKey, "DataBase Monitor Service");
  30. }
  31. if (NULL != hKey)
  32. RegCloseKey(hKey);
  33. hKey = NULL;
  34. return 0;
  35. }
  36. int Handle_DeleteTrayNullIcon( BOOL &bNullBeDel )
  37. {
  38. bNullBeDel = FALSE;
  39. HWND hStatus=::FindWindow("Shell_TrayWnd",NULL); //得到任务栏句柄
  40. if (hStatus==NULL)
  41. {
  42. //AfxMessageBox ( "Get Shell_TrayWnd error!" );
  43. return -1;
  44. }
  45. HWND hNotify=FindWindowEx(hStatus,NULL,"TrayNotifyWnd",NULL); //右下角区域
  46. if (hNotify==NULL)
  47. {
  48. //AfxMessageBox ( "Get TrayNotifyWnd error!" );
  49. return -1;
  50. }
  51. HWND hNotify1=FindWindowEx(hNotify,NULL,"SysPager",NULL);
  52. if (hNotify==NULL)
  53. {
  54. //AfxMessageBox ( "Get SysPager error!" );
  55. return -1;
  56. }
  57. HWND hNotify1_0=FindWindowEx(hNotify1,NULL,"ToolBarWindow32",NULL);//右下角区域(不包括时间)
  58. if (hNotify1_0==NULL)
  59. {
  60. //AfxMessageBox ( "Get ToolBarWindow32 error!" );
  61. return -1;
  62. }
  63. //-------------------以上是得到任务栏右下脚一块地方的句柄
  64. DWORD pid = 0;
  65. GetWindowThreadProcessId(hNotify1_0,&pid);
  66. if (pid==NULL)
  67. {
  68. //AfxMessageBox ( "Get pid error!" );
  69. return -1;
  70. }
  71. HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_ALL_ACCESS,true,pid);
  72. if (hProcess==NULL)
  73. {
  74. //AfxMessageBox ( "Get hd error!" );
  75. return -1;
  76. }
  77. ::SendMessage(hNotify1_0,WM_PAINT ,NULL,NULL);
  78. CRect rect;
  79. ::GetWindowRect(hNotify1_0,&rect);
  80. ::InvalidateRect(hNotify1_0,&rect,false);
  81. int iNum=::SendMessage(hNotify1_0,TB_BUTTONCOUNT ,NULL,NULL); //获取任务栏上图标个数
  82. unsigned long n = 0;
  83. TBBUTTON *pButton = new TBBUTTON;
  84. CString strInfo = _T("");
  85. wchar_t name[256] = {0};
  86. TBBUTTON BButton;
  87. unsigned long whd,proid;
  88. CString x;
  89. for(int i=0; i<iNum; i++)
  90. {
  91. ::SendMessage(hNotify1_0,TB_GETBUTTON,i,(LPARAM)(&BButton));
  92. ReadProcessMemory(hProcess,&BButton,pButton,sizeof(TBBUTTON),&n);
  93. if (pButton->iString != 0xffffffff)
  94. {
  95. try
  96. {
  97. ReadProcessMemory(hProcess,(void *)pButton->iString,name,255,&n);
  98. }
  99. catch(...)
  100. {
  101. }
  102. strInfo.Format("%d : %s\n",i+1,CString(name));
  103. TRACE(strInfo);
  104. }
  105. try
  106. {
  107. whd=0;
  108. ReadProcessMemory(hProcess,(void *)pButton->dwData,&whd,4,&n);
  109. }
  110. catch(...)
  111. {
  112. }
  113. proid=NULL;
  114. GetWindowThreadProcessId((HWND)whd,&proid);
  115. if(proid==NULL)
  116. {
  117. bNullBeDel = TRUE;
  118. ::SendMessage(hNotify1_0,TB_DELETEBUTTON,i,0);
  119. }
  120. }
  121. delete pButton;
  122. return 0;
  123. }
  124. int GetSysData()
  125. {
  126. CHAR strFile[MAX_FILE_LENGTH + 1] = "";
  127. CHAR strValue[MAX_VALUE_LENGTH + 1] = "";
  128. int iPosFile = 0;
  129. int iLenghtFile = 0;
  130. ////////////////////////////////////////////////////////////////////////////
  131. //获取应用名
  132. GetModuleFileName(AfxGetApp()->m_hInstance, g_strDirectory, MAX_PATH_LENGTH);
  133. iLenghtFile = strlen(g_strDirectory);
  134. for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
  135. {
  136. if (g_strDirectory[iPosFile] == '\\')
  137. {
  138. memset(g_strAppName, 0, sizeof(g_strAppName));
  139. memcpy(g_strAppName, g_strDirectory + iPosFile + 1, iLenghtFile - iPosFile - 1);
  140. break;
  141. }
  142. }
  143. //获取系统路径
  144. //#ifdef _DEBUG
  145. // GetCurrentDirectory(MAX_PATH_LENGTH, g_strDirectory);
  146. //#else
  147. GetModuleFileName(AfxGetApp()->m_hInstance, g_strDirectory, MAX_PATH_LENGTH);
  148. iLenghtFile = strlen(g_strDirectory);
  149. for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
  150. {
  151. if (g_strDirectory[iPosFile] == '\\')
  152. {
  153. g_strDirectory[iPosFile] = '\0';
  154. break;
  155. }
  156. }
  157. //#endif
  158. wsprintf(strFile, "%s\\set.ini", g_strDirectory);
  159. //Server
  160. GetPrivateProfileString("Server", "ServerIP", "", g_strServerIP, sizeof(g_strServerIP), strFile);
  161. GetPrivateProfileString("Server", "Port", "", g_strServerPort, sizeof(g_strServerPort), strFile);
  162. int nSTDOUT = GetPrivateProfileInt("Server", "StdOut", 0, strFile);
  163. if ( nSTDOUT == 1 )
  164. {
  165. AllocConsole(); // 开辟控制台;
  166. SetConsoleTitle(_T("EMSoftClient调试输出")); // 设置控制台窗口标题;
  167. freopen("CONOUT$", "w+t", stdout); // 重定向输出;
  168. freopen("CONIN$", "r+t", stdin); // 重定向输入;
  169. HWND hWnd = NULL;
  170. again:
  171. hWnd = ::FindWindow(NULL, _T("EMSoftClient调试输出"));
  172. if( hWnd )
  173. {
  174. if (!::SetWindowPos(hWnd, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE))
  175. {
  176. printf(_T("前置设置失败\n"));
  177. }
  178. else
  179. {
  180. printf(_T("前置设置成功\n"));
  181. }
  182. }
  183. else
  184. {
  185. if (nSTDOUT <= 10)
  186. goto again;
  187. }
  188. }
  189. //是否自动启动系统
  190. GetPrivateProfileString("Other", "AutoRunSystem", "", strValue, sizeof(strValue), strFile);
  191. if (strcmp(strValue, ""))
  192. g_iAutoRunSystem = atoi(strValue);
  193. else
  194. g_iAutoRunSystem = 0;
  195. if (g_iAutoRunSystem <= 0)
  196. g_iAutoRunSystem = 0;
  197. else
  198. g_iAutoRunSystem = 1;
  199. GetPrivateProfileString("User", "UserID", "", g_strLoginUserID, sizeof(g_strLoginUserID), strFile);
  200. GetPrivateProfileString("User", "UserPwd", "", g_strLoginPwd, sizeof(g_strLoginPwd), strFile);
  201. //检查控制,设置是否有密码
  202. GetPrivateProfileString("User", "HaveControlPwd","", strValue,sizeof(strValue), strFile );
  203. g_bHaveControlPwd = atoi( strValue );
  204. g_nIsDemo = GetPrivateProfileInt("Other", "IsDemo", 0, strFile);
  205. //RunParam
  206. g_nIsPoll = GetPrivateProfileInt("RunParam", "IsPoll", 0, strFile);
  207. g_nPollInterval = GetPrivateProfileInt("RunParam", "PollInterval", 1, strFile);
  208. g_nPollCount = GetPrivateProfileInt("Poll", "PollCount", 0, strFile);
  209. CString strPollPath, strPollDesc;
  210. for( int i = 1; i < g_nPollCount + 1; i++ )
  211. {
  212. if( i > MAX_VIEW_NUM - 1 ) break;
  213. strPollPath.Format("PollPath%d", i);
  214. GetPrivateProfileString("Poll",
  215. (char *)(LPCTSTR)strPollPath, "", g_strPollPath[i-1], sizeof(g_strPollPath[i-1]), strFile);
  216. strPollDesc.Format("PollDesc%d", i);
  217. GetPrivateProfileString("Poll",
  218. (char *)(LPCTSTR)strPollDesc, "", g_strPollDesc[i-1], sizeof(g_strPollDesc[i-1]), strFile);
  219. }
  220. //语言
  221. GetPrivateProfileString("Other", "Language", "", g_strLanguage, sizeof(g_strLanguage), strFile);
  222. //Database
  223. GetPrivateProfileString("Database", "DBType", "", g_strDBType, sizeof(g_strDBType), strFile);
  224. GetPrivateProfileString("Database", "AccessFile", "", g_strAccessFile, sizeof(g_strAccessFile), strFile);
  225. GetPrivateProfileString("Database", "ServerName", "", g_strServerName, sizeof(g_strServerName), strFile);
  226. GetPrivateProfileString("Database", "DataBaseName", "", g_strDataBaseName, sizeof(g_strDataBaseName), strFile);
  227. GetPrivateProfileString("Database", "UserName", "", g_strUserName, sizeof(g_strUserName), strFile);
  228. GetPrivateProfileString("Database", "Password", "", g_strPassword, sizeof(g_strPassword), strFile);
  229. g_dwDataBasePort = GetPrivateProfileInt("Database", "DataBasePort", 5432, strFile);
  230. //数据库连接串
  231. if (!_stricmp(g_strDBType, "SQL SERVER"))
  232. sprintf(g_strConnectString, "Provider=sqloledb;Data Source=%s,1433;Initial Catalog=%s;User Id=%s;Password=%s; ",
  233. g_strServerName, g_strDataBaseName, g_strUserName, g_strPassword);
  234. else if (!_stricmp(g_strDBType, "ACCESS97"))
  235. sprintf(g_strConnectString, "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s", g_strAccessFile);
  236. else if (!_stricmp(g_strDBType, "ACCESS2000"))
  237. sprintf(g_strConnectString, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s", g_strAccessFile);
  238. else if(!_stricmp(g_strDBType, "PGSQL"))
  239. sprintf(g_strConnectString, "DRIVER={PostgreSQL ODBC Driver(UNICODE)}; SERVER=%s; port=%d; DATABASE=%s; UID=%s; PWD=%s;",
  240. g_strServerName, g_dwDataBasePort, g_strDataBaseName, g_strUserName, g_strPassword);
  241. else
  242. sprintf(g_strConnectString, "Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; ",
  243. g_strServerName, g_strDataBaseName, g_strUserName, g_strPassword);
  244. //用户信息
  245. GetPrivateProfileString("User", "UserID", "", g_strDefaultUserID, sizeof(g_strDefaultUserID), strFile);
  246. GetPrivateProfileString("User", "UserPwd", "", g_strDefaultUserPwd, sizeof(g_strDefaultUserPwd), strFile);
  247. //自动跳到报警画面
  248. g_nAlarmToView = GetPrivateProfileInt("AlarmMode", "AlarmToView", 0, strFile);;
  249. //AlarmMode
  250. g_nAlarmModeIsDlg = GetPrivateProfileInt("AlarmMode", "Dlg", 0, strFile);
  251. g_nAlarmModeIsSound = GetPrivateProfileInt("AlarmMode", "Sound", 0, strFile);
  252. g_nAlarmModeSoundPlayNum = GetPrivateProfileInt("AlarmMode", "PlayNum", 0, strFile);
  253. g_nAlarmModeSoundPlayNum += 1;
  254. //Comm
  255. g_nCommDlgLevel = GetPrivateProfileInt("Common", "LevelDlg", 0, strFile);;
  256. g_nCommWavLevel = GetPrivateProfileInt("Common", "LevelLocalWav", 0, strFile);;
  257. //TTS
  258. g_nTTSType = GetPrivateProfileInt("TTS", "VoiceType", 0, strFile);
  259. //视频采集卡
  260. GetPrivateProfileString("Video", "CapPath", "", g_strVideoCapPath, sizeof(g_strVideoCapPath), strFile);
  261. CString str;
  262. str = CString(g_strVideoCapPath);
  263. str.Replace("\\", "\\\\");
  264. strcpy(g_strVideoCapPath, (char *)(LPCTSTR)str);
  265. //Toolbar显示状态
  266. g_nToolbarTop = GetPrivateProfileInt("Toolbar", "ToolBarTop", 0, strFile);
  267. g_nToolbarLeft = GetPrivateProfileInt("Toolbar", "ToolBarLeft", 0, strFile);
  268. g_nToolbarRun = GetPrivateProfileInt("Toolbar", "ToolBarRun", 0, strFile);
  269. g_nToolBarStatus = GetPrivateProfileInt("Toolbar", "ToolBarStatus", 0, strFile);
  270. ////////////////////////////////////////////////////////////////////////////
  271. //增加自动启动注册表项
  272. #if 0
  273. wsprintf(strFile, "%s\\%s", g_strDirectory, g_strAppName);
  274. AddAutoSysRun(strFile, g_iAutoRunSystem);
  275. #endif
  276. return 0;
  277. }
  278. int GetResourceString()
  279. {
  280. g_strSet.LoadString(IDS_SET);
  281. g_strAdjust.LoadString(IDS_ADJUST);
  282. g_strPictureLink.LoadString(IDS_PICTURELINK);
  283. g_strExit.LoadString(IDS_EXIT);
  284. g_strExLink.LoadString(IDS_EXLINK);
  285. g_strTestAlarm.LoadString(IDS_TESTALARM);
  286. g_strAlarmRed.LoadString(IDS_COMMOND_ALARM_RED);
  287. g_strNoticeRed.LoadString(IDS_COMMOND_NOTICE_RED);
  288. g_strDeviceLog.LoadString(IDS_COMMOND_DEVICE_LOG);
  289. g_strSystemLog.LoadString(IDS_COMMOND_SYSTEM_LOG);
  290. g_strVarManage.LoadString(IDS_COMMOND_VAR_MANAGE);
  291. g_strUserManage.LoadString(IDS_COMMOND_USER_MANAGE);
  292. g_strPwdManage.LoadString(IDS_COMMOND_PWD_MANAGE);
  293. g_strFirstPage.LoadString(IDS_COMMOND_FIRST_PAGE);
  294. g_strNativageTree.LoadString(IDS_COMMOND_NATIVAGE_TREE);
  295. g_strVarTypeID.LoadString(IDS_VARTYPEID);
  296. g_strSelLine.LoadString(IDS_SELLINE);
  297. g_strVarID.LoadString(IDS_VARID);
  298. g_strVarUid1.LoadString(IDS_VARUID1);
  299. g_strVarName1.LoadString(IDS_VARNAME1);
  300. g_strVarDesc.LoadString(IDS_VARDESC);
  301. g_strVarDataLen.LoadString(IDS_VARDATALEN);
  302. g_strOnDesc.LoadString(IDS_ONDESC);
  303. g_strOffDesc.LoadString(IDS_OFFDESC);
  304. g_strMaxValues.LoadString(IDS_MAXVALUES);
  305. g_strMinValues.LoadString(IDS_MINVALUES);
  306. g_strMaxScale.LoadString(IDS_MAXSCALE);
  307. g_strMinScale.LoadString(IDS_MINSCALE);
  308. g_strLowerLimit.LoadString(IDS_LOWERLIMIT);
  309. g_strUpperLimit.LoadString(IDS_UPPERLIMIT);
  310. g_strNormalState.LoadString(IDS_NORMALSTATE);
  311. g_strSetValue.LoadString(IDS_SETVALUE);
  312. g_strRearm.LoadString(IDS_REARM);
  313. g_strOffset.LoadString(IDS_OFFSET);
  314. g_strUint.LoadString(IDS_UNIT);
  315. g_strCollectFreq.LoadString(IDS_COLLECTFREQ);
  316. g_strCoef.LoadString(IDS_COEF);
  317. g_strAlarmLevel.LoadString(IDS_ALARMLEVEL);
  318. g_strReadWrite.LoadString(IDS_READWRITE);
  319. g_strSaveData.LoadString(IDS_SAVEDATA);
  320. g_strCollectThreadData.LoadString(IDS_COLLECTTHRADDATA);
  321. g_strSaveCurve.LoadString(IDS_SAVECURVE);
  322. g_strIsDDE.LoadString(IDS_ISDDE);
  323. g_strRegNum.LoadString(IDS_REGNUM);
  324. g_strFuncID.LoadString(IDS_FUNCID);
  325. g_strChildID.LoadString(IDS_CHILDID);
  326. g_strItemID.LoadString(IDS_ITEMID);
  327. g_strSnmpOid.LoadString(IDS_SNMPOID);
  328. g_strSnmpPublic.LoadString(IDS_SNMPPUBLIC);
  329. g_strDevTypeID.LoadString(IDS_DEVTYPEID);
  330. g_strVarStartAddr.LoadString(IDS_VARSTARTADDR);
  331. g_strRs232Cmd.LoadString(IDS_RS232CMD);
  332. g_strRs232Type.LoadString(IDS_RS232TYPE);
  333. g_strRs232Index.LoadString(IDS_RS232INDEX);
  334. g_strIndentifyTime.LoadString(IDS_IDENTIFYTIME);
  335. g_strRedectTime.LoadString(IDS_REDETECTTIME);
  336. g_strReturnNormalAlarm.LoadString(IDS_RETURNNORMALTOTRIPALARM);
  337. g_strShowCurrValue.LoadString(IDS_SHOWCURRVALUE);
  338. g_strAlarmVarName.LoadString(IDS_ALARMVARNAME);
  339. g_strVarUidIsBlank.LoadString(IDS_VARUIDISBLANK);
  340. g_strVarNameIsBlank.LoadString(IDS_PARAMNAME_CANNOTBLANK);
  341. g_strVarNameExist.LoadString(IDS_VARNAMEEXIST);
  342. g_strVarName2.LoadString(IDS_VARNAME2);
  343. g_strSelDev.LoadString(IDS_SELDEV);
  344. g_strStoneuTech.LoadString(IDS_STONEU_TECH);
  345. g_strPictureFile1.LoadString(IDS_PICTUREFILE1);
  346. g_strCannotLoseAllForm.LoadString(IDS_CANNOTCLOSEALLFORM);
  347. g_strStartBit.LoadString(IDS_STARTBIT);
  348. g_strEndBit.LoadString(IDS_ENDBIT);
  349. g_strVarBitExist.LoadString(IDS_VARBITEXIST);
  350. g_strSelDevice.LoadString(IDS_SELDEV);
  351. g_strOldPasswordCannotBlank.LoadString(IDS_OLDPASSWORDCANNOTBLANK);
  352. g_strOldpasswordInCorrect.LoadString(IDS_OLDPASSWORDINCORRECT);
  353. g_strpasswordInCorrect.LoadString(IDS_PASSWORDINCORRECT);
  354. g_strPasswordNotMatch1.LoadString(IDS_PASSWORDNOTMATCH1);
  355. g_strAll.LoadString(IDS_ALL);
  356. g_strDevName.LoadString(IDS_DEVNAME);
  357. g_strHappentTime1.LoadString(IDS_HAPPENTIME1);
  358. g_strEventArea.LoadString( IDS_EVENTAREA );
  359. g_strCurrValue.LoadString(IDS_CURRVALUE);
  360. g_strDateTime.LoadString(IDS_DATETIME);
  361. g_strHappenTime2.LoadString(IDS_HAPPENTIME2);
  362. g_strWarnContent.LoadString(IDS_WARNCONTENT);
  363. g_strAllDev.LoadString(IDS_ALLDEV);
  364. g_strEthernet.LoadString(IDS_ETHERNET);
  365. g_strMywizard.LoadString(IDS_MYWIZARD);
  366. g_strDevNameInUse.LoadString(IDS_DEVNAMEINUSE);
  367. g_strUserID.LoadString(IDS_USERID);
  368. g_strHintUserName.LoadString(IDS_USERNAME);
  369. g_strTel.LoadString(IDS_TEL);
  370. g_strMobile.LoadString(IDS_MOBIL);
  371. g_strFax.LoadString(IDS_FAX);
  372. g_strMail.LoadString(IDS_EMAIL);
  373. g_strStatus.LoadString(IDS_STATUS);
  374. g_strUserPwd.LoadString(IDS_USERPWD);
  375. g_strUserNameCannotEmpty.LoadString(IDS_USERNAMECANNOTEMPTY);
  376. g_strPasswordNotMatch2.LoadString(IDS_PASSWORDNOTMATCH2);
  377. g_strUserNameExit.LoadString(IDS_USERNAMEEXIT);
  378. g_strID.LoadString(IDS_ID);
  379. g_strDevUid2.LoadString(IDS_DEVUID2);
  380. g_strAlarmStatus.LoadString(IDS_ALARMSTATUS);
  381. g_strAlarmStatusDesc.LoadString(IDS_ALARMSTATUSDESC);
  382. g_strNormalStatusID.LoadString(IDS_NORMALSTATUSID);
  383. g_strAlarmStatusIDCannotEmpty.LoadString(IDS_ALARMSTATUSIDCANNOTEMPTY);
  384. g_strAlarmStatusDescCannotEmpty.LoadString(IDS_ALARMSTATUSDESCCANNOTEMPTY);
  385. g_strNormalStatusIDCannotBlank.LoadString(IDS_NORMALSTATUSIDCANNOTBLANK);
  386. g_strAlarmStatusInfoExist.LoadString(IDS_ALARMSTATUSINFOEXIST);
  387. g_strTimesNewRoman.LoadString(IDS_TIMESNEWROMAN);
  388. g_strEntityProperty.LoadString(IDS_ENTITYPROPERTY);
  389. g_strParamSet.LoadString(IDS_PARAMSET);
  390. g_strHour.LoadString(IDS_HOUR);
  391. g_strDate.LoadString(IDS_DATE);
  392. g_strMean.LoadString(IDS_MEAN);
  393. g_strControl.LoadString(IDS_CONTROL);
  394. g_strTRACE0.LoadString(IDS_TRACE0);
  395. g_strAppwizardCreateApp.LoadString(IDS_APPWIZARDCREATAPP);
  396. g_strPictureFile2.LoadString(IDS_PICTUREFILE2);
  397. g_strSaveModify.LoadString(IDS_SAVEMODIFY);
  398. g_strStoneuIspcms.LoadString(IDS_STONEU_ISPCMS);
  399. g_strUnSelectEntity.LoadString(IDS_UNSELECTENTITY);
  400. g_strIsNotPrimitive.LoadString(IDS_ISNOTPRIMITIVE);
  401. g_strSelect.LoadString(IDS_SELECT);
  402. g_strTrace2.LoadString(IDS_TRACE);
  403. g_strTline.LoadString(IDS_TLINE);
  404. g_strText.LoadString(IDS_TEXT);
  405. g_strRect.LoadString(IDS_RECT);
  406. g_strOval.LoadString(IDS_OVAL);
  407. g_strButton.LoadString(IDS_BUTTON);
  408. g_strData.LoadString(IDS_DATA);
  409. g_strLed.LoadString(IDS_LED);
  410. g_strBar.LoadString(IDS_BAR);
  411. g_strCurve.LoadString(IDS_CURVE);
  412. g_strLine.LoadString(IDS_LINE);
  413. g_strBreaker.LoadString(IDS_BREAKER);
  414. g_strSwitch.LoadString(IDS_SWITCH);
  415. g_strGrid.LoadString(IDS_GRID);
  416. g_strBitmap.LoadString(IDS_BITMAP);
  417. g_strGif.LoadString(IDS_GIF);
  418. g_strTransfer.LoadString(IDS_TRANSFER);
  419. g_strArc.LoadString(IDS_ARC);
  420. g_strArrow.LoadString(IDS_ARROW);
  421. g_strPoly.LoadString(IDS_POLY);
  422. g_strMLine.LoadString(IDS_MLINE);
  423. g_strPipe.LoadString(IDS_PIPE);
  424. g_strZhePipe.LoadString(IDS_ZHEPIPE);
  425. g_strYPipe.LoadString(IDS_YPIPE);
  426. g_strWatch.LoadString(IDS_WATCH);
  427. g_strSingleBar.LoadString(IDS_SINGLEBAR);
  428. g_strRoundRect.LoadString(IDS_ROUNDRECT);
  429. g_strPie.LoadString(IDS_PIE);
  430. g_strFan.LoadString(IDS_FAN);
  431. g_strHisCurve.LoadString(IDS_HISCURVE);
  432. g_strTable.LoadString(IDS_TABLE);
  433. g_strComposite.LoadString(IDS_COMPOSITE);
  434. g_strConnectionFailed.LoadString(IDS_CONNECTIONFAILED);
  435. g_strMoniterSite.LoadString(IDS_MONITORSITE);
  436. g_strDevice.LoadString(IDS_DEVICE);
  437. g_strSerial.LoadString(IDS_SERIAL);
  438. g_strDataDict.LoadString(IDS_DATADICT);
  439. g_strVarSet.LoadString(IDS_VARSET);
  440. g_strScriptManage.LoadString(IDS_SCRIPTMANAGE);
  441. g_strActionWithAlarm.LoadString( IDS_ACTIONWITHALARM );
  442. g_strNoticeList.LoadString( IDS_STRING_NOTICELIST );
  443. g_strSysParam.LoadString(IDS_SYSPARAM);
  444. g_strExitConfirm.LoadString(IDS_EXITCONFIRM);
  445. g_strIPComoccupy.LoadString(IDS_IPCOMOCCUPY);
  446. g_strDevNumCannotBlank.LoadString(IDS_DEVNAMCANNOTBLANK);
  447. g_strDevUidExist.LoadString(IDS_DEVUIDEXIST);
  448. g_strDevNameExist.LoadString(IDS_DEVNAMEEXIST);
  449. g_strSerialPortInUse.LoadString(IDS_SERIALPORTINUSE);
  450. g_strIPNotBlank.LoadString(IDS_IPNOTBLANK);
  451. g_strComcanNot0.LoadString(IDS_COMCANNOT0);
  452. g_strNetDev.LoadString(IDS_NETDEV);
  453. g_strIPConflict.LoadString(IDS_IPCONFLICT);
  454. g_strCannotCreateDirecitory.LoadString(IDS_CANNOTCREATEDIRECTORY);
  455. g_strDelDev.LoadString(IDS_DELDEV);
  456. g_strDelView.LoadString(IDS_DELVIEW);
  457. g_strConfirm.LoadString(IDS_CONFIRM);
  458. g_strEventType.LoadString(IDS_EVENTTYPE);
  459. g_strEventInfo.LoadString(IDS_EVENTINFO);
  460. g_strLowAlarm.LoadString(IDS_LOWALARM);
  461. g_strHighAlarm.LoadString(IDS_UPALARM);
  462. g_strReturnNormal1.LoadString(IDS_RETURNNORMAL1);
  463. g_strReturnNormal2.LoadString(IDS_RETURNNORMAL2);
  464. g_strAlarm.LoadString(IDS_ALARM);
  465. g_strTime.LoadString(IDS_TIME);
  466. g_strVarName3.LoadString(IDS_VARNAME3);
  467. g_strColumnName.LoadString(IDS_COLUMNNAME);
  468. g_strHeader.LoadString(IDS_HEADER);
  469. g_strFormat.LoadString(IDS_FORMAT);
  470. g_strScriptPass.LoadString(IDS_SCRIPTPASS);
  471. g_strScriptNameCannotEmpty.LoadString(IDS_SCRIPTNAMECANNOTEMPTY);
  472. g_strStrVar.LoadString(IDS_STRVAR);
  473. g_strDes.LoadString(IDS_DES);
  474. g_strOne.LoadString(IDS_ONE);
  475. g_strTwo.LoadString(IDS_TWO);
  476. g_strThree.LoadString(IDS_THREE);
  477. g_strFour.LoadString(IDS_FOUR);
  478. g_strFine.LoadString(IDS_FINE);
  479. g_strSix.LoadString(IDS_SIX);
  480. g_strSeven.LoadString(IDS_SEVEN);
  481. g_strEight.LoadString(IDS_EIGHT);
  482. g_strNine.LoadString(IDS_NINE);
  483. g_strTen.LoadString(IDS_TEN);
  484. g_strHandred.LoadString(IDS_HUNDRED);
  485. g_strBilion.LoadString(IDS_BILLION);
  486. g_strWan.LoadString(IDS_WAN);
  487. g_strThousand.LoadString(IDS_THOUSAND);
  488. g_strYuan1.LoadString(IDS_YUAN1);
  489. g_strCent.LoadString(IDS_CENT);
  490. g_strZero.LoadString(IDS_ZERO);
  491. g_strMinute.LoadString(IDS_MINUTE);
  492. g_strYuan2.LoadString(IDS_YUAN2);
  493. g_strDevDataLog.LoadString(IDS_DEVDATALOG);
  494. g_strOverWriteError.LoadString(IDS_OVERWRITEERROR);
  495. g_strSaveas.LoadString(IDS_SAVEAS);
  496. g_strTip.LoadString(IDS_TIP);
  497. g_strScriptError.LoadString(IDS_SCRIPT_ERROR);
  498. g_strLogicDoorinate.LoadString(IDS_LOGIC_COORDINATE);
  499. g_strFontNameCHT.LoadString(IDS_FONT_CHT);
  500. g_strCharacter.LoadString(IDS_CHARACTER);
  501. g_strNormal.LoadString(IDS_NORMAL);
  502. g_strIsNotice.LoadString(IDS_IS_NOTICE);
  503. g_strIsModify.LoadString(IDS_IS_MODIFY);
  504. g_strParamInit.LoadString(IDS_PARAM_INIT);
  505. g_strParamMin.LoadString(IDS_PARAM_MIN);
  506. g_strParamMax.LoadString(IDS_PARAM_MAX);
  507. g_strOCX.LoadString( IDS_OCX );
  508. g_strGIF.LoadString( IDS_GIF );
  509. g_strFlash.LoadString( IDS_FLASH );
  510. g_strRadio.LoadString( IDS_RADIO);
  511. g_strCheck.LoadString( IDS_CHECK);
  512. g_strLogType.LoadString( IDS_LOG_TYPE );
  513. g_strModbusType.LoadString( IDS_LOG_MODBUSTYPE );
  514. g_strLogContent.LoadString( IDS_LOG_CONTENT );
  515. g_strLogHappenTime.LoadString( IDS_LOG_HAPPENTIME );
  516. g_strPastDue.LoadString( IDS_PROMPT_PASTDUE );
  517. g_strEditMoreVarOK.LoadString( IDS_PROMPT_EDITMOREVAROK );
  518. g_strGroup.LoadString( IDS_GROUP );
  519. g_strDClickFirstOperate.LoadString( IDS_PROMPT_DCLICKFIRSTOPERATE );
  520. g_strDelGroup.LoadString( IDS_PROMPT_COMFIR_DELGROUP );
  521. g_strNormalData.LoadString( IDS_NORMALDATA );
  522. g_strAlarmData.LoadString( IDS_ALARMDATA );
  523. g_strDealStatus.LoadString( IDS_DEALSTATUS );
  524. g_strAC_WaitConfig.LoadString( IDS_AC_WAITCONFIG );
  525. g_strAC_ConfigSuccess.LoadString( IDS_AC_CONFIGSUCCESS );
  526. g_strAC_WaitOut.LoadString( IDS_AC_WAITOUT );
  527. g_strAC_ConfigAllEvent.LoadString( IDS_AC_CONFIGALLEVENT );
  528. g_strAC_ConfigChooseEvent.LoadString( IDS_AC_CONFIGCHOOSEEVENT );
  529. g_strAC_DelAllEvent.LoadString( IDS_AC_DELALLEVENT );
  530. g_strAC_DelChooseEvent.LoadString( IDS_AC_DELCHOOSEEVENT );
  531. g_strAdd.LoadString( IDS_ADD );
  532. g_strEdit.LoadString( IDS_EDIT );
  533. g_strDel.LoadString( IDS_DEL );
  534. g_strDevice1.LoadString( IDS_DEVICE );
  535. g_strVariant.LoadString( IDS_VARIANT );
  536. g_strUser.LoadString( IDS_USER );
  537. g_strPwd.LoadString( IDS_PWD );
  538. g_strTimePlan.LoadString( IDS_TIMEPLAN );
  539. g_strRegiserOCX.LoadString( IDS_PROMPT_REGISEROCX );
  540. g_strNoPermit.LoadString( IDS_NO_PERMIT );
  541. g_strModifyPwdOK.LoadString( IDS_MODIFY_PWD_OK );
  542. g_strMonitorNameIsBlank.LoadString( IDS_MONITOR_BLANK );
  543. g_strMonitorNameCannotDel.LoadString( IDS_MONITOR_CANNOTDEL );
  544. g_strInputIsBlank.LoadString( IDS_CANNOT_BLANK );
  545. //界面语言,读取资源文件定义
  546. g_strLogTypeEvent.LoadString( IDS_EVENT_LOG );
  547. g_strLogTypeData.LoadString( IDS_DATA_LOG_TYPE );
  548. g_strLogTypeError.LoadString( IDS_LOG_TYPE_ERROR );
  549. g_strLogTypeWarning.LoadString( IDS_LOG_TYPE_WARNING );
  550. g_strLogModMainThread.LoadString( IDS_LOGMOD_MAIN_THREAD );
  551. g_strLogModDB.LoadString( IDS_LOGMOD_DB );
  552. g_strLogModEmail.LoadString( IDS_LOGMOD_EMAIL );
  553. g_strLogModSms.LoadString( IDS_LOGMOD_SMS );
  554. g_strLogModPing.LoadString( IDS_LOGMOD_PING );
  555. g_strLogModTrap.LoadString( IDS_LOGMOD_TRAP );
  556. g_strLogModSnmp.LoadString( IDS_LOGMOD_SNMP );
  557. g_strLogModDog.LoadString( IDS_LOGMOD_DOG );
  558. g_strLogModNotice.LoadString( IDS_LOGMOD_NOTICE );
  559. g_strLogModContents.LoadString( IDS_SEND_CONTENTS );
  560. g_strLogModTime.LoadString( IDS_SEND_TIME );
  561. //错误提示字符串
  562. CString strError, strMsgHint;
  563. strError.LoadString( IDS_ERROR_EXEC_SQL );
  564. strcpy(g_strErrorExecSql, (char*)(LPCTSTR)strError );
  565. strError.LoadString( IDS_ERROR_DB_DISCONNECTION );
  566. strcpy(g_strErrorDBDisConnection, (char*)(LPCTSTR)strError );
  567. //操作提示
  568. strMsgHint.LoadString( IDS_PROMPT_USERNAME_NOTNULL );
  569. strcpy(g_strMsgUserNotNULL, (char*)(LPCTSTR)strMsgHint);
  570. strMsgHint.LoadString( IDS_PROMPT_PWD_NOT_NULL );
  571. strcpy(g_strMsgPwdNotNULL, (char*)(LPCTSTR)strMsgHint);
  572. strMsgHint.LoadString( IDS_PROMPT_USER_INVALID );
  573. strcpy(g_strMsgUserInvalid, (char*)(LPCTSTR)strMsgHint);
  574. strMsgHint.LoadString( IDS_PROMPT_CONFIRM_DEL );
  575. strcpy(g_strMsgConfirmDel, (char*)(LPCTSTR)strMsgHint);
  576. strMsgHint.LoadString( IDS_PROMPT_SELECT_DEL );
  577. strcpy(g_strMsgSelectDel, (char*)(LPCTSTR)strMsgHint);
  578. strMsgHint.LoadString( IDS_PROMPT_EDIT_SUCCESS );
  579. strcpy(g_strMsgEditSuccess, (char*)(LPCTSTR)strMsgHint);
  580. strMsgHint.LoadString( IDS_PROMPT_SELECT_EDIT );
  581. strcpy(g_strMsgSelectEdit, (char*)(LPCTSTR)strMsgHint);
  582. strMsgHint.LoadString( IDS_PROMPT );
  583. strcpy(g_strMsgPrompt, (char*)(LPCTSTR)strMsgHint);
  584. strMsgHint.LoadString( IDS_PROMPT_CONFIRM_DELRECORD );
  585. strcpy(g_strMsgConfirmDelRecord, (char*)(LPCTSTR)strMsgHint);
  586. strMsgHint.LoadString( IDS_PROMPT_USER_DISENABLE );
  587. strcpy(g_strMsgUserDisable, (char *)(LPCTSTR)strMsgHint);
  588. strMsgHint.LoadString( IDS_MSG_HINT_DB_CONNECTION );
  589. strcpy(g_strMsgDBConnectionSuccess, (char*)(LPCTSTR)strMsgHint );
  590. strMsgHint.LoadString( IDS_MSG_HINT_DB_CONNECTION_FAIL );
  591. strcpy(g_strMsgDBConnectionFail, (char*)(LPCTSTR)strMsgHint );
  592. return 0;
  593. }
  594. VOID TerminateLastProcess()
  595. {
  596. HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  597. if (hSnapShot != NULL)
  598. {
  599. PROCESSENTRY32 ProcessInfo = {0};//声明进程信息变量
  600. ProcessInfo.dwSize = sizeof(ProcessInfo);//设置ProcessInfo的大小
  601. //返回系统中第一个进程的信息
  602. BOOL bStatus = Process32First(hSnapShot, &ProcessInfo);
  603. while (bStatus)
  604. {
  605. if (!_stricmp(g_strAppName, ProcessInfo.szExeFile))//映像名称
  606. {
  607. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.th32ProcessID);
  608. ::TerminateProcess(hProcess, 1);
  609. hProcess = NULL;
  610. Sleep(1000);
  611. break;
  612. }
  613. else
  614. //获取下一个进程的信息
  615. bStatus = Process32Next(hSnapShot, &ProcessInfo);
  616. }
  617. }
  618. }
  619. //-------------------------------------------------------------------------------------
  620. //Description:
  621. // This function maps a character string to a wide-character (Unicode) string
  622. //
  623. //Parameters:
  624. // lpcszStr: [in] Pointer to the character string to be converted
  625. // lpwszStr: [out] Pointer to a buffer that receives the translated string.
  626. // dwSize: [in] Size of the buffer
  627. //
  628. //Return Values:
  629. // TRUE: Succeed
  630. // FALSE: Failed
  631. //
  632. //Example:
  633. // MByteToWChar(szA,szW,sizeof(szW)/sizeof(szW[0]));
  634. //---------------------------------------------------------------------------------------
  635. BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
  636. {
  637. // Get the required size of the buffer that receives the Unicode
  638. // string.
  639. DWORD dwMinSize;
  640. dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
  641. if(dwSize < dwMinSize)
  642. {
  643. return FALSE;
  644. }
  645. // Convert headers from ASCII to Unicode.
  646. MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
  647. return TRUE;
  648. }
  649. //-------------------------------------------------------------------------------------
  650. //Description:
  651. // This function maps a wide-character string to a new character string
  652. //
  653. //Parameters:
  654. // lpcwszStr: [in] Pointer to the character string to be converted
  655. // lpszStr: [out] Pointer to a buffer that receives the translated string.
  656. // dwSize: [in] Size of the buffer
  657. //
  658. //Return Values:
  659. // TRUE: Succeed
  660. // FALSE: Failed
  661. //
  662. //Example:
  663. // MByteToWChar(szW,szA,sizeof(szA)/sizeof(szA[0]));
  664. //---------------------------------------------------------------------------------------
  665. BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
  666. {
  667. DWORD dwMinSize;
  668. dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
  669. if(dwSize < dwMinSize)
  670. {
  671. return FALSE;
  672. }
  673. WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
  674. return TRUE;
  675. }
  676. //////////////////////////////////////////////////////////////////////////////
  677. //名称:GetExcelDriver
  678. //功能:获取ODBC中Excel驱动
  679. //作者:徐景周(jingzhou_xu@163.net)
  680. //组织:未来工作室(Future Studio)
  681. //日期:2002.9.1
  682. /////////////////////////////////////////////////////////////////////////////
  683. CString GetExcelDriver()
  684. {
  685. char szBuf[2001];
  686. WORD cbBufMax = 2000;
  687. WORD cbBufOut;
  688. char *pszBuf = szBuf;
  689. CString sDriver;
  690. // 获取已安装驱动的名称(涵数在odbcinst.h里)
  691. if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
  692. return "";
  693. // 检索已安装的驱动是否有Excel...
  694. do
  695. {
  696. if (strstr(pszBuf, "Excel") != 0)
  697. {
  698. //发现 !
  699. sDriver = CString(pszBuf);
  700. break;
  701. }
  702. pszBuf = strchr(pszBuf, '\0') + 1;
  703. }
  704. while (pszBuf[1] != '\0');
  705. return sDriver;
  706. }
  707. bool IsExistExcelDriver()
  708. {
  709. bool bRet = false;
  710. char szBuf[2001];
  711. WORD cbBufMax = 2000;
  712. WORD cbBufOut;
  713. char *pszBuf = szBuf;
  714. CString sDriver;
  715. // 获取已安装驱动的名称(涵数在odbcinst.h里)
  716. if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
  717. return false;
  718. // 检索已安装的驱动是否有Excel...
  719. do
  720. {
  721. if (strstr(pszBuf, "Excel") != 0)
  722. {
  723. //发现 !
  724. sDriver = CString(pszBuf);
  725. bRet = true;
  726. break;
  727. }
  728. pszBuf = strchr(pszBuf, '\0') + 1;
  729. }
  730. while (pszBuf[1] != '\0');
  731. return bRet;
  732. }
  733. ///////////////////////////////////////////////////////////////////////////////
  734. // BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)
  735. // 参数:
  736. // Path 路径
  737. // FilenameIncluded 路径是否包含文件名
  738. // 返回值:
  739. // 文件是否存在
  740. // 说明:
  741. // 判断Path文件(FilenameIncluded=true)是否存在,存在返回TURE,不存在返回FALSE
  742. // 自动创建目录
  743. //
  744. ///////////////////////////////////////////////////////////////////////////////
  745. BOOL MakeSurePathExists( CString &Path,
  746. bool FilenameIncluded)
  747. {
  748. int Pos=0;
  749. while((Pos=Path.Find('\\',Pos+1))!=-1)
  750. CreateDirectory(Path.Left(Pos),NULL);
  751. if(!FilenameIncluded)
  752. CreateDirectory(Path,NULL);
  753. // return ((!FilenameIncluded)?!_access(Path,0):
  754. // !_access(Path.Left(Path.ReverseFind('\\')),0));
  755. return !_access(Path,0);
  756. }
  757. //获得默认的文件名
  758. BOOL GetDefaultXlsFileName(CString& sExcelFile)
  759. {
  760. ///默认文件名:yyyymmddhhmmss.xls
  761. CString timeStr;
  762. CTime day;
  763. day=CTime::GetCurrentTime();
  764. int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;
  765. filenameday=day.GetDay();//dd
  766. filenamemonth=day.GetMonth();//mm月份
  767. filenameyear=day.GetYear();//yyyy
  768. filehour=day.GetHour();//hh
  769. filemin=day.GetMinute();//mm分钟
  770. filesec=day.GetSecond();//ss
  771. timeStr.Format("%04d%02d%02d%02d%02d%02d",filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);
  772. sExcelFile = timeStr + ".xls";
  773. // prompt the user (with all document templates)
  774. CFileDialog dlgFile(FALSE,".xls",sExcelFile);
  775. CString title;
  776. CString strFilter;
  777. title = g_strDevDataLog;
  778. strFilter = "Excel文件(*.xls)";
  779. strFilter += (TCHAR)'\0'; // next string please
  780. strFilter += _T("*.xls");
  781. strFilter += (TCHAR)'\0'; // last string
  782. dlgFile.m_ofn.nMaxCustFilter++;
  783. dlgFile.m_ofn.nFilterIndex = 1;
  784. // append the "*.*" all files filter
  785. CString allFilter;
  786. VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
  787. strFilter += allFilter;
  788. strFilter += (TCHAR)'\0'; // next string please
  789. strFilter += _T("*.*");
  790. strFilter += (TCHAR)'\0'; // last string
  791. dlgFile.m_ofn.nMaxCustFilter++;
  792. dlgFile.m_ofn.lpstrFilter = strFilter;
  793. dlgFile.m_ofn.lpstrTitle = title;
  794. if (dlgFile.DoModal()==IDCANCEL)
  795. return FALSE; // open cancelled
  796. sExcelFile = dlgFile.GetPathName();
  797. if (MakeSurePathExists(sExcelFile,true))
  798. {
  799. if(!DeleteFile(sExcelFile))
  800. { // delete the file
  801. MessageBox(NULL, g_strOverWriteError, g_strTip, MB_ICONINFORMATION);
  802. return FALSE;
  803. }
  804. }
  805. return TRUE;
  806. }
  807. ///////////////////////////////////////////////////////////////////////////////
  808. // void ExportListToExcel(CListCtrl* pList, CString strTitle)
  809. // 参数:
  810. // pList 需要导出的List控件指针
  811. // strTitle 导出的数据表标题
  812. // 说明:
  813. // 导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”
  814. // 对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括
  815. // 列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。
  816. //
  817. // edit by [r]@dotlive.cnblogs.com
  818. ///////////////////////////////////////////////////////////////////////////////
  819. void ExportListToExcel(CDataGrid* pList, CString strTitle)
  820. {
  821. #if 1
  822. CString warningStr;
  823. if (pList->GetRowCount()>0)
  824. {
  825. CDatabase database;
  826. CString sDriver;
  827. CString sExcelFile;
  828. CString sSql;
  829. CString tableName = strTitle;
  830. // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
  831. sDriver = GetExcelDriver();
  832. if (sDriver.IsEmpty())
  833. {
  834. // 没有发现Excel驱动
  835. //AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!");
  836. MessageBox(NULL, "没有安装Excel!\n请先安装Excel软件才能使用导出功能!", g_strTip, MB_ICONINFORMATION);
  837. return;
  838. }
  839. ///默认文件名
  840. if (!GetDefaultXlsFileName(sExcelFile))
  841. return;
  842. // 创建进行存取的字符串
  843. sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
  844. // 创建数据库 (既Excel表格文件)
  845. if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
  846. {
  847. // 创建表结构
  848. int i=0;
  849. LVCOLUMN columnData;
  850. CString columnName;
  851. int columnNum = 0;
  852. CString strH;
  853. CString strV;
  854. sSql = "";
  855. strH = "";
  856. columnData.mask = LVCF_TEXT;
  857. columnData.cchTextMax =100;
  858. columnData.pszText = columnName.GetBuffer (100);
  859. for(i=0;i<pList->GetColumnCount();i++)//GetColumn(i,&columnData)
  860. {
  861. if (i!=0)
  862. {
  863. sSql = sSql + ", " ;
  864. strH = strH + ", " ;
  865. }
  866. CString sName = pList->m_field.GetAt(i).Caption.Trim();
  867. sSql = sSql + " " + sName +" TEXT";
  868. strH = strH + " " + sName +" ";
  869. }
  870. columnName.ReleaseBuffer ();
  871. columnNum = i;
  872. sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) ";
  873. database.ExecuteSQL(sSql);
  874. // 插入数据项
  875. int nItemIndex;
  876. for( nItemIndex=1;nItemIndex<pList->GetRowCount();nItemIndex++ )
  877. {
  878. strV = "";
  879. for(i=0;i<columnNum;i++)
  880. {
  881. if (i!=0)
  882. {
  883. strV = strV + ", " ;
  884. }
  885. strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";
  886. }
  887. sSql = "INSERT INTO "+ tableName
  888. +" ("+ strH + ")"
  889. +" VALUES("+ strV + ")";
  890. database.ExecuteSQL(sSql);
  891. }
  892. }
  893. // 关闭数据库
  894. database.Close();
  895. warningStr.Format(g_strSaveas,sExcelFile);
  896. MessageBox(NULL, warningStr, g_strTip, MB_ICONINFORMATION);
  897. }
  898. #endif
  899. }
  900. CString InterceptString(int qlen, CString strSource)
  901. {
  902. int len,i,y;
  903. CString sTemp,sreturn;
  904. strSource.TrimLeft();
  905. strSource.TrimRight();
  906. len=strSource.GetLength();
  907. y=0;
  908. sTemp=strSource.Right(len-qlen);
  909. for(i=0;i<len;i++)
  910. {
  911. //if(sTemp[y]<0 || sTemp[y]>255)
  912. //if(sTemp[i]<0 || sTemp[i]>=128)
  913. //if(sTemp.GetAt(y) & 0x80 )
  914. if(::IsDBCSLeadByte(sTemp.GetAt(y)))
  915. y=y+2;
  916. else
  917. y=y+1;
  918. if(y>=70)
  919. break;
  920. }
  921. sreturn=sTemp.Left(y);
  922. return sreturn;
  923. }
  924. //显示选择文件夹窗口
  925. //参数 sFolderPath:用于返回用户选择的文件夹的路径
  926. //参数 sTitle:用于指定选择文件夹窗口的标题
  927. //返回值 :操作结果,用户取消选择或操作失败返回FALSE,否则TRUE
  928. BOOL BrowseForFolder(CString & sFolderPath, CString sTitle)
  929. {
  930. BROWSEINFO bi;
  931. char Buffer[_MAX_PATH];
  932. bi.hwndOwner = NULL;
  933. bi.pidlRoot = NULL;
  934. bi.pszDisplayName = Buffer;
  935. bi.lpszTitle = sTitle;
  936. bi.ulFlags = 0;
  937. bi.lpfn = NULL;
  938. LPITEMIDLIST pIDList = SHBrowseForFolder(& bi);
  939. if (!pIDList)
  940. return FALSE;
  941. SHGetPathFromIDList(pIDList, Buffer);
  942. sFolderPath = Buffer;
  943. LPMALLOC lpMalloc;
  944. if (FAILED(SHGetMalloc(& lpMalloc)))
  945. return FALSE;
  946. //释放内存
  947. lpMalloc->Free(pIDList);
  948. lpMalloc->Release();
  949. return TRUE;
  950. }
  951. void TimeTicksToInt(CString strSrc, unsigned long &nDest)
  952. {
  953. CString strLeft;
  954. int nIndex = strSrc.Find(":");
  955. if( nIndex != -1 )
  956. {
  957. strLeft = strSrc.Left( nIndex - 1 );
  958. nDest = atoi(strLeft);
  959. }
  960. }
  961. ///目录是否存在的检查:
  962. bool CheckFolderExist(CString strPath)
  963. {
  964. WIN32_FIND_DATA wfd;
  965. bool rValue = false;
  966. HANDLE hFind = FindFirstFile((char *)(LPCTSTR)strPath, &wfd);
  967. if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  968. {
  969. rValue = true;
  970. }
  971. FindClose(hFind);
  972. return rValue;
  973. }
  974. BOOL BrowseFile(CString strFile, CString strFilter,
  975. CStringList *pFileList,
  976. CStringList *pFileNameList,
  977. CStringList *pShowNameList) //查找文件函数
  978. {
  979. CFileFind FileFind;
  980. CString SearchTarget = strFile; // + "\\" +strFilter;
  981. if( SearchTarget.Right(1) != "\\" )
  982. SearchTarget += "\\";
  983. SearchTarget += "*.*";
  984. BOOL res = FileFind.FindFile(SearchTarget);
  985. while(res)
  986. {
  987. res = FileFind.FindNextFile();
  988. if(FileFind.IsDirectory() && !FileFind.IsDots())
  989. {
  990. //如果是一个子目录,用递归继续往深一层找
  991. CString strPath = FileFind.GetFilePath();
  992. CString strTitle = FileFind.GetFileTitle();
  993. BrowseFile(strPath, strFilter, pFileList, pFileNameList, pShowNameList);
  994. }
  995. else if(!FileFind.IsDirectory() && !FileFind.IsDots())
  996. {
  997. //显示当前访问的文件
  998. CString strExtName;
  999. CString strName;
  1000. strName = FileFind.GetFileName();
  1001. strExtName = strName.Right(strName.GetLength() - strName.Find('.')-1);
  1002. strExtName.MakeUpper();
  1003. if(!strExtName.CompareNoCase(strFilter))//扩展名正确
  1004. {
  1005. CString strPath = FileFind.GetFilePath();
  1006. pFileList->AddTail(strPath);
  1007. pFileNameList->AddTail(strName);
  1008. strName = strName.Left(strName.Find('.'));
  1009. pShowNameList->AddTail(strName);
  1010. }
  1011. }
  1012. }
  1013. FileFind.Close();//关闭
  1014. return TRUE;
  1015. }
  1016. //注册OCX
  1017. BOOL RegisterOCX( CString sOcxPath )
  1018. {
  1019. LPCTSTR pszDllName = sOcxPath;
  1020. HINSTANCE hLib = LoadLibrary(pszDllName);
  1021. if (hLib < (HINSTANCE)HINSTANCE_ERROR)
  1022. {
  1023. return FALSE;
  1024. }
  1025. FARPROC lpDllEntryPoint;
  1026. lpDllEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer"));
  1027. if(lpDllEntryPoint!=NULL)
  1028. {
  1029. if(FAILED(( *lpDllEntryPoint)()))
  1030. {
  1031. FreeLibrary(hLib);
  1032. return FALSE;
  1033. }
  1034. return TRUE;
  1035. }
  1036. else
  1037. return FALSE;
  1038. }
  1039. //注销OCX
  1040. BOOL UnRegisterOCX( CString sOcxPath )
  1041. {
  1042. LPCTSTR pszDllName = sOcxPath;
  1043. HINSTANCE hLib = LoadLibrary(pszDllName);
  1044. if (hLib < (HINSTANCE)HINSTANCE_ERROR)
  1045. {
  1046. return FALSE;
  1047. }
  1048. FARPROC lpDllEntryPoint;
  1049. lpDllEntryPoint = GetProcAddress(hLib,_T("DllUnregisterServer"));
  1050. if(lpDllEntryPoint!=NULL)
  1051. {
  1052. if(FAILED(( *lpDllEntryPoint)()))
  1053. {
  1054. FreeLibrary(hLib);
  1055. return FALSE;
  1056. }
  1057. return TRUE;
  1058. }
  1059. else
  1060. return FALSE;
  1061. }
  1062. WCHAR* StrToWchar(CString strSrc)
  1063. {
  1064. size_t nLen = strSrc.GetLength()+1;
  1065. char *szText = new char[nLen];
  1066. snprintf(szText, nLen, "%s", strSrc);
  1067. size_t nLenW = ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),NULL,0);
  1068. WCHAR *wszText = new WCHAR[nLenW+1];
  1069. ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),wszText,int(nLenW));
  1070. wszText[nLenW] = L'\0';
  1071. //chn add
  1072. delete []szText;
  1073. szText = NULL;
  1074. return wszText;
  1075. }
  1076. bool g_FindProcess( CString sAppName )
  1077. {
  1078. bool bRet = false;
  1079. HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  1080. if (hSnapShot != NULL)
  1081. {
  1082. PROCESSENTRY32 ProcessInfo = {0};//声明进程信息变量
  1083. ProcessInfo.dwSize = sizeof(ProcessInfo);//设置ProcessInfo的大小
  1084. //返回系统中第一个进程的信息
  1085. BOOL bStatus = Process32First(hSnapShot, &ProcessInfo);
  1086. while (bStatus)
  1087. {
  1088. if (!_stricmp(sAppName, ProcessInfo.szExeFile))//映像名称
  1089. {
  1090. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.th32ProcessID);
  1091. bRet = true;
  1092. break;
  1093. }
  1094. else
  1095. {
  1096. //获取下一个进程的信息
  1097. bStatus = Process32Next(hSnapShot, &ProcessInfo);
  1098. }
  1099. }
  1100. }
  1101. return bRet;
  1102. }