// Global.cpp : 应用程序的全局变量、函数源文件 // // 代码生成在 2014年9月25日, 09:55 #include "StdAfx.h" #include "Global.h" #include // _access_s头文件; #include "afxcoll.h" #include "afxtempl.h" #include "atlconv.h" #include //#include #include "lzari.h" #include "ffsco.h" #include #pragma comment(lib,"Version.lib") #if JEFF_TEST_ON #include #pragma comment(lib, "ws2_32.lib")//使用了ws2_32.lib就不能同时再使用WinSock #else #include #endif #if JEFF_CODE //------------------------------------------------------------------ int g_nVersion = -1; static CONST BYTE g_byShotVersion[6][10] = { { 6, 0, 148, 11, 205, 50, 4, 171, 32, 39 }, // 儿童座席版; { 6, 0, 4, 29, 24, 247, 189, 95, 83, 76 }, // 婚纱座席版; { 6, 0, 4, 187, 103, 10, 59, 169, 240, 220 }, // 儿童企业版; { 6, 0, 137, 160, 230, 173, 202, 2, 117, 142 }, // 婚纱企业版; { 6, 0, 194, 199, 210, 67, 185, 1, 138, 195 }, // 儿童全能版; { 6, 0, 188, 145, 100, 47, 154, 177, 34, 205 }, // 婚纱全能版; }; // start---------------加密表达式加密后的数组----------------------; static CONST BYTE g_byCalExVersion[6][114] = { // 儿童座席版; { 109, 0, 90, 15, 108, 138, 37, 190, 82, 8, 20, 252, 32, 162, 7, 8, 254, 255, 56, 245, 194, 4, 46, 120, 49, 120, 156, 27, 17, 164, 217, 79, 167, 146, 197, 69, 55, 117, 197, 149, 42, 217, 151, 195, 254, 145, 187, 197, 232, 188, 114, 223, 40, 229, 151, 245, 116, 177, 141, 94, 134, 14, 13, 169, 165, 94, 5, 216, 235, 60, 176, 38, 174, 121, 187, 174, 16, 30, 17, 20, 246, 34, 20, 252, 32, 162, 7, 8, 254, 255, 56, 245, 194, 4, 46, 120, 49, 120, 156, 27, 17, 164, 217, 79, 167, 146, 143, 132, 219, 173, 211, 2, 99, 180 }, // 婚纱座席版; { 109, 0, 128, 13, 164, 143, 252, 87, 30, 48, 20, 21, 145, 114, 160, 96, 49, 127, 181, 32, 144, 213, 109, 99, 142, 219, 71, 26, 22, 220, 177, 179, 191, 82, 138, 45, 173, 160, 9, 83, 162, 106, 182, 175, 47, 92, 214, 78, 93, 21, 202, 165, 167, 200, 198, 172, 218, 74, 236, 194, 194, 228, 40, 27, 95, 60, 160, 173, 66, 185, 178, 7, 159, 220, 58, 71, 140, 19, 20, 37, 66, 84, 20, 21, 145, 114, 160, 96, 49, 127, 181, 32, 144, 213, 109, 99, 142, 219, 71, 26, 22, 220, 177, 179, 191, 82, 232, 182, 45, 27, 13, 195, 225, 204 }, // 儿童企业版; { 109, 0, 229, 36, 223, 222, 213, 46, 70, 55, 240, 207, 237, 75, 226, 68, 133, 100, 42, 119, 89, 131, 79, 104, 158, 17, 172, 239, 4, 158, 201, 51, 62, 51, 94, 232, 14, 124, 81, 64, 100, 141, 187, 85, 156, 59, 205, 116, 200, 24, 108, 218, 145, 22, 7, 36, 45, 7, 156, 255, 170, 130, 165, 140, 99, 216, 120, 72, 171, 196, 27, 49, 138, 199, 137, 246, 214, 247, 121, 114, 215, 199, 240, 207, 237, 75, 226, 68, 133, 100, 42, 119, 89, 131, 79, 104, 158, 17, 172, 239, 4, 158, 201, 51, 62, 51, 248, 214, 27, 254, 221, 208, 181, 209 }, // 婚纱企业版; { 109, 0, 94, 220, 40, 182, 30, 120, 56, 193, 78, 101, 1, 144, 68, 206, 192, 52, 67, 9, 243, 20, 9, 195, 153, 15, 22, 217, 243, 79, 177, 22, 24, 171, 185, 157, 172, 67, 117, 124, 153, 165, 3, 41, 218, 47, 149, 150, 48, 152, 75, 250, 204, 253, 92, 53, 121, 147, 242, 140, 80, 66, 34, 194, 16, 109, 237, 17, 222, 161, 96, 8, 11, 194, 58, 45, 86, 15, 207, 121, 247, 104, 78, 101, 1, 144, 68, 206, 192, 52, 67, 9, 243, 20, 9, 195, 153, 15, 22, 217, 243, 79, 177, 22, 24, 171, 122, 243, 190, 146, 77, 222, 208, 129 }, // 儿童全能版; { 109, 0, 26, 222, 0, 239, 199, 199, 188, 225, 180, 168, 178, 208, 21, 79, 62, 90, 51, 31, 88, 128, 180, 105, 53, 137, 230, 254, 244, 50, 195, 49, 167, 143, 168, 125, 130, 125, 8, 73, 224, 120, 80, 95, 178, 49, 44, 158, 38, 38, 247, 169, 62, 187, 119, 192, 77, 194, 118, 246, 133, 241, 157, 62, 144, 24, 94, 173, 49, 192, 46, 250, 249, 239, 82, 78, 135, 3, 86, 154, 8, 135, 180, 168, 178, 208, 21, 79, 62, 90, 51, 31, 88, 128, 180, 105, 53, 137, 230, 254, 244, 50, 195, 49, 167, 143, 241, 214, 38, 180, 198, 3, 158, 165 }, // 婚纱全能版; { 109, 0, 139, 145, 163, 176, 66, 18, 207, 79, 172, 200, 12, 124, 89, 151, 248, 238, 26, 85, 137, 146, 119, 58, 76, 194, 151, 239, 204, 104, 18, 166, 208, 54, 37, 85, 3, 174, 28, 74, 154, 156, 120, 194, 8, 112, 79, 42, 27, 89, 81, 95, 238, 74, 59, 199, 160, 101, 117, 179, 51, 138, 70, 176, 239, 182, 160, 212, 11, 33, 224, 74, 155, 143, 216, 10, 220, 71, 8, 168, 18, 175, 172, 200, 12, 124, 89, 151, 248, 238, 26, 85, 137, 146, 119, 58, 76, 194, 151, 239, 204, 104, 18, 166, 208, 54, 114, 118, 181, 24, 252, 41, 246, 88 }, }; // endof---------------加密表达式加密后的数组----------------------; // 升级包版本号; WORD g_arrFileVersion[4] = { 0 }; TCHAR g_szLoginUser[MAX_PATH] = _T(""); // 当前软件的登陆用户名; TCHAR g_szLoginPsw[MAX_PATH] = _T(""); // 当前软件的登陆密码; TCHAR g_szModulePath[MAX_PATH] = _T(""); // 软件目录; TCHAR g_szModuleFileName[MAX_PATH] = _T(""); // 软件全名称; TCHAR g_szConnectString[MAX_PATH] = _T(""); // DB连接串; // 服务端主机信息; TCHAR g_szHostComputerIP[MAX_PATH] = _T(""); // 服务端主机名称; DWORD g_dwTCPChatPort = 0; // 服务端主机通信TCP端口; DWORD g_dwTCPFilePort = 0; // 服务端主机文件传输端口; // 短信服务端主机信息; TCHAR g_szSMSServer[MAX_PATH] = _T(""); // 短信服务端主机名称; DWORD g_dwTCPSMSPort = 0; // 短信服务端主机通信端口; // 数据库信息; TCHAR g_szDBSource[MAX_PATH] = _T(""); // 数据库源(服务所在IP或计算机名); TCHAR g_szDBSourcePort[MAX_PATH] = _T(""); // 数据库源端口; DWORD g_dwDBServerPort = 0; // 数据库源端口; TCHAR g_szDBAccount[MAX_PATH] = _T(""); // 数据库登录用户; TCHAR g_szDBPassWord[MAX_PATH] = _T(""); // 数据库登录密码; TCHAR g_szDBName[MAX_PATH] = _T(""); // 数据库名称; // 相片存储目录; TCHAR g_szShareHost[MAX_PATH] = _T(""); // 共享主机名; TCHAR g_szOriginalFolder[MAX_PATH] = _T(""); // 原片目录; TCHAR g_szOriginalBkFolder[MAX_PATH] = _T(""); // 原片备份目录; TCHAR g_szEarlyRepairFolder[MAX_PATH] = _T(""); // 初修片目录; TCHAR g_szEarlyRepairBkFolder[MAX_PATH] = _T(""); // 初修片备份目录; TCHAR g_szFurtherRepairFolder[MAX_PATH] = _T(""); // 精修片目录; TCHAR g_szFurtherRepairBkFolder[MAX_PATH] = _T(""); // 精修片备份目录; TCHAR g_szDesignFolder[MAX_PATH] = _T(""); // 设计片目录; TCHAR g_szDesignBkFolder[MAX_PATH] = _T(""); // 设计片备份目录; TCHAR g_szTelRecordingFolder[MAX_PATH] = _T(""); // 电话录音目录; TCHAR g_szFullDressImageFolder[MAX_PATH] = _T(""); // 礼服图片目录; #endif #if FORMER_CODE // 软件所用加密狗是否已注册医院跟踪功能; // Jeff,应该放在SoftKey做为静态变量使用; BOOL g_bSoftWareReg = FALSE; // 加密狗中的字符信息S1:如 201409062003558789.ly.com // 该全局变量在旧软件名称是:g_sdomain; // 该变量在数据库表字段[path].[path1]中存储; CString g_strDogMainInfo = _T(""); // 未知用途; // 该全局变量在旧软件中名称是:CString g_bMain; // 与集团版有关联性; // 有可能是主店名称; CString g_strMain = _T(""); // 分店名称数组;旧软件中名称:g_branchnamearray CStringArray g_strArrayOfBranchName; // ?? CStringArray g_strArrayOfBranchName2; // 分店IP地址数组; CStringArray g_strArrayOfBranchIPAdress; // 分店的加密狗S1信息数组; CStringArray g_strArrayOfBranchDogMainInfo; // 座席版允许连接数(从加密狗中获取); unsigned int g_nCountOfAllowToConn = 0; DWORD g_nLeng = 0; BYTE *g_pData = NULL; DWORD g_nLeng2 = 0; BYTE *g_pData2 = NULL; SENDHEAD g_sendhead; BOOL g_bRedSkin = 0; COLORREF g_gridcol1 = RGB(204, 204, 204); COLORREF g_gridcol2 = RGB(190, 190, 190); COLORREF g_bkcol = RGB(184, 184, 184); CString g_date = _T(""); CString g_title = _T(""); CArrayg_userarray; CArrayg_cominfoarray; CArrayg_cominfoarraylocal; CArrayg_lengarray; CArrayg_btnlengarray; CArrayg_pointerarray; CBrush g_editbkbrush; DWORD g_btnleng[8] = { 0 }; int g_btnlengpos = -1; int g_nYearpos = -1; CString g_branchname = _T(""); // Jeff.集团版:????本分店名称; CString g_branchip = _T(""); CString g_branchip2 = _T(""); BOOL g_bBranchModify = 0; BOOL g_bShowOK = 0; // Jeff:? BOOL g_bStaffAchievementShow = 0; // 此机用于员工业绩查看; BOOL g_bSaveUploadTask1 = 0; BOOL g_bSaveUploadTask2 = 0; BOOL g_bSaveUploadTask3 = 0; BOOL g_bSaveUploadTask4 = 0; BOOL g_bSearchFilter = 0; CString g_waiter1 = _T(""); CString g_waiter2 = _T(""); CString g_waiter3 = _T(""); CString g_waiter4 = _T(""); CString g_waiter5 = _T(""); CString g_filterdate1 = _T(""); CString g_filterdate2 = _T(""); CString g_filterdate3 = _T(""); CString g_filterdate4 = _T(""); CString g_filterdate5 = _T(""); CString g_filterdate6 = _T(""); CString g_filterbranch = _T(""); USER g_user; CString g_mainpath = _T(""); // 软件目录 CString g_id = _T(""); // CString g_server = _T(""); // 服务端地址 CStringArray g_serverarray; // CString g_serverbak = _T(""); // CString g_path1 = _T(""); /* 共享目录 <客户原片(管理软件)$> 如:"\\lyfz-pc\客户原片(管理软件)$" */ CString g_path2 = _T(""); /* 共享目录 <修好的片(管理软件)$> 如:"\\lyfz-pc\修好的片(管理软件)$" */ CString g_path3 = _T(""); /* 共享目录 <设计好的片(管理软件$)> 如:""> */ CString g_path4 = _T(""); /* 共享目录 <精修好的片(管理软件$)> 如:""> */ CString g_path5 = _T(""); /* 共享目录 <礼服图片(管理软件$)> 如:""> */ CString g_path6 = _T(""); /* 共享目录 <电话录音(管理软件$)> 如:""> */ CString g_path7 = _T(""); /* 共享目录 <客户原片(管理软件$)\效果图> 如:""> */ CString g_path1bak = _T(""); CString g_path2bak = _T(""); CString g_path3bak = _T(""); CString g_path4bak = _T(""); CString g_path5bak = _T(""); CString g_path6bak = _T(""); CString g_path7bak = _T(""); CDatabase g_db; DWORD g_ncount = 0; CFont g_titlefont; DWORD g_nSendCode = 0; BOOL g_bSendOK = 0; CString g_temp = _T(""); CArrayg_hisyeararray; CArrayg_brancharray; CArrayg_oldclientarray; BOOL g_bNoConnDlg = 0; BOOL g_bInSkin = 0; BOOL g_bGenBranchData = 0; BOOL g_bSortAscending = FALSE; CFont g_listctrlfont; float g_fscalex = 0.0; // x坐标刻度 float g_fscaley = 0.0; // y坐标刻度 int g_screenwid = 0.0; // 桌面宽 int g_screenhei = 0.0; // 桌面高 float g_WidthScale2 = 1; float g_HeightScale2 = 1; RESDATA2 g_resdata2; BOOL g_bAlphaWnd = 0; BYTE g_bNeedDrawParent = 0; BOOL g_bAllBranch = 0; CString g_domain = _T(""); CString g_sInfo = _T(""); int g_ncot = 0; // Jeff:订单总数(包含历史订单在内),该变量作用是当订单总数大于1000时,向公司服务器发送数据; int g_conpos = 0; int g_nAutoShowStaffAchievement = -1; BOOL g_bShowBar = 1; int g_bookingtype = 0; BOOL g_bNoLoginLia = 0; BOOL g_bConnLYFZ = 0; BOOL g_bSendLYFZ = 0; int g_ntimeout = 29000; float g_WidthScale = 0.0; float g_HeightScale = 0.0; int g_dx = 0; int g_dy = 0; BOOL g_bNeedCoon = 1; // remark by Jeff:是否需要重新连接服务端; CStringArray g_menubranchname; CArrayg_List1array; /************************************************************************/ /* Jeff:g_conntype g_conntype == 0 :表示正常连接?(或是连接本地服务器?) g_conntype == 1 :表示连接公司服务器(http://lijiafz.vicp.net) g_conntype == 2 :http://www.lyfz.net/download/ip.txt g_conntype == 3 :http://photo.bjlyfz.com/download/ip.txt g_conntype == 4 : */ /************************************************************************/ int g_conntype = 0;//正常 //0 正常 //1 连接1 //2 连接2 //3 连接3 //4 连接4 #endif #if FORMER_CODE // Pump messages while waiting for event //---------------------------------------------------------- // 函数:WaitWithMessageLoop // 描述:等待某内核事件触发; // 参数: // hEvent: 被等待响应的内核事件对象; // nTimeout: 超时值; // 返回:TRUE返回触发成功; //---------------------------------------------------------- BOOL WaitWithMessageLoop(HANDLE hEvent, int nTimeout) { DWORD dwRet = 0; while (1) { // wait for event or message, if it's a message, process it and return to waiting state dwRet = MsgWaitForMultipleObjects(1, &hEvent, FALSE, nTimeout, QS_ALLINPUT); if (dwRet == WAIT_OBJECT_0) { TRACE0("WaitWithMessageLoop() event triggered.\n"); return TRUE; } else if (dwRet == WAIT_OBJECT_0 + 1) { // process window messages AfxGetApp()->PumpMessage(); } else if (dwRet == WAIT_TIMEOUT) { // timed out ! return FALSE; } else { // WAIT_ABANDONED_0 ... return TRUE; } } } //---------------------------------------------------------- // 函数:DeleteDirectory // 描述:删除指定目录下的所有文件; // 参数:strDir:指定要删除的文件目录; // 返回:; //---------------------------------------------------------- void DeleteDirectory(CString strDir) { try { // 首先删除文件及子文件夹 CFileFind ff; BOOL bFound = ff.FindFile(strDir + "\\*", 0); while (bFound) { bFound = ff.FindNextFile(); if (ff.GetFileName() == "." || ff.GetFileName() == "..") continue; // 去掉文件(夹)只读等属性 SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL); if (ff.IsDirectory()) { // 递归删除子文件夹 DeleteDirectory(ff.GetFilePath()); RemoveDirectory(ff.GetFilePath()); } else { DeleteFile(ff.GetFilePath()); // 删除文件 } } ff.Close(); // 然后删除该文件夹 RemoveDirectory(strDir); } catch (...) { //WriteLogin("出错在函数deldir中"); } // int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp ); } void DataToArray(CArray*pArrayOfString, int datapos) { try { pArrayOfString->RemoveAll(); if (g_nLeng == 0) { return; } // 1.code[0]数组:用作发送时,存储着操作指令;用作接收时,存储着接收数据大小???; if (g_sendhead.code[0]) { // 1.1.将g_pData全局变量里保存的数据进行解压,并存储在lpszOut数组里; BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData, g_nLeng, (const BYTE*&)lpszOut, nOutSize); // 1.2.将解压后的数据lpszOut附加到内存文件里; CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); // 1.3.将内存文件序列化保存到CArchive对象里; CArchive ar(&memfile, CArchive::load); pArrayOfString->SetSize(g_sendhead.count[0]); // 1.4.将CArchive对象里的数据,序列化到指定的CArray对象里; for (int ii = 0; ii < pArrayOfString->GetSize(); ii++) { pArrayOfString->ElementAt(ii).Serialize(ar); } // 1.5.完成数据的导出任务,释放内存; ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData, g_nLeng); CArchive ar(&memfile, CArchive::load); pArrayOfString->SetSize(g_sendhead.count[0]); for (int ii = 0; ii < pArrayOfString->GetSize(); ii++) { pArrayOfString->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, int datapos) { try { CArray*parray[2] = { pArrayOfString1, pArrayOfString2 }; DWORD bytereads = 0; for (int i = 0; i < 2; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0) continue; if (g_sendhead.code[i]) { // 1.1.将g_pData全局变量里保存的数据进行解压,并存储在lpszOut数组里; BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); // 1.2.将解压后的数据lpszOut附加到内存文件里; CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); // 1.3.将内存文件序列化保存到CArchive对象里; bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); // 1.4.将CArchive对象里的数据,序列化到指定的CArray对象里; for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } // 1.5.完成数据的导出任务,释放内存; ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, int datapos) { try { CArray*parray[3] = { pArrayOfString1, pArrayOfString2, pArrayOfString3 }; DWORD bytereads = 0; for (int i = 0; i < 3; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, int datapos) { try { CArray*parray[4] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4 }; DWORD bytereads = 0; for (int i = 0; i < 4; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, CArray*pArrayOfString5, int datapos) { try { CArray*parray[5] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4, pArrayOfString5 }; DWORD bytereads = 0; for (int i = 0; i < 5; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0) continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, CArray*pArrayOfString5, CArray*pArrayOfString6, int datapos) { try { CArray*parray[6] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4, pArrayOfString5, pArrayOfString6 }; DWORD bytereads = 0; for (int i = 0; i < 6; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, CArray*pArrayOfString5, CArray*pArrayOfString6, CArray*pArrayOfString7, int datapos) { try { CArray*parray[7] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4, pArrayOfString5, pArrayOfString6, pArrayOfString7 }; DWORD bytereads = 0; for (int i = 0; i < 7; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, CArray*pArrayOfString5, CArray*pArrayOfString6, CArray*pArrayOfString7, CArray*pArrayOfString8, int datapos) { try { CArray*parray[8] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4, pArrayOfString5, pArrayOfString6, pArrayOfString7, pArrayOfString8 }; DWORD bytereads = 0; for (int i = 0; i < 8; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } void DataToArray( CArray*pArrayOfString1, CArray*pArrayOfString2, CArray*pArrayOfString3, CArray*pArrayOfString4, CArray*pArrayOfString5, CArray*pArrayOfString6, CArray*pArrayOfString7, CArray*pArrayOfString8, CArray*pArrayOfString9, CArray*pArrayOfString10, int datapos) { try { CArray*parray[10] = { pArrayOfString1, pArrayOfString2, pArrayOfString3, pArrayOfString4, pArrayOfString5, pArrayOfString6, pArrayOfString7, pArrayOfString8, pArrayOfString9, pArrayOfString10 }; DWORD bytereads = 0; for (int i = 0; i < 10; i++) { parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue; if (g_sendhead.code[i]) { BYTE *lpszOut = NULL; int nOutSize = 0; LZARI Lzari; Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize); CMemFile memfile; memfile.Attach(lpszOut, nOutSize); Lzari.Release(); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } else { CMemFile memfile; memfile.Attach(g_pData + bytereads, g_sendhead.length[i]); bytereads += g_sendhead.length[i]; CArchive ar(&memfile, CArchive::load); parray[i]->SetSize(g_sendhead.count[i]); for (int ii = 0; ii < parray[i]->GetSize(); ii++) { parray[i]->ElementAt(ii).Serialize(ar); } ar.Close(); memfile.Detach(); } } } catch (...) { } } // 从缓存中加载图片; void LoadImageFromBuf(Bitmap **img, BYTE *pData, DWORD leng) { try { if (pData == NULL)return; if (*img)delete *img; *img = NULL; // Allocate global memory on which to create stream HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, leng); if (m_hMem == NULL)return; BYTE* pmem = (BYTE*)GlobalLock(m_hMem); memcpy(pmem, pData, leng); IStream* pstm; CreateStreamOnHGlobal(m_hMem, TRUE, &pstm); // load from stream *img = Gdiplus::Bitmap::FromStream(pstm); // free/release stuff GlobalUnlock(m_hMem); pstm->Release(); } catch (...) { } } void LoadImageFromFile(Image **img, CString path) { try { if (!PathFileExists(path))return; if (*img)delete *img; *img = NULL; BSTR bstr = path.AllocSysString(); *img = Image::FromFile(bstr); SysFreeString(bstr); } catch (...) { } } void LoadImageFromFile(Bitmap **img, CString path) { try { if (!PathFileExists(path))return; if (*img)delete *img; *img = NULL; BSTR bstr = path.AllocSysString(); *img = Bitmap::FromFile(bstr); SysFreeString(bstr); } catch (...) { } } void LoadImageFromBuf(Image **img, BYTE *pData, DWORD leng) { try { if (pData == NULL)return; if (*img)delete *img; *img = NULL; // Allocate global memory on which to create stream HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, leng); if (m_hMem == NULL)return; BYTE* pmem = (BYTE*)GlobalLock(m_hMem); memcpy(pmem, pData, leng); IStream* pstm; CreateStreamOnHGlobal(m_hMem, TRUE, &pstm); // load from stream *img = Gdiplus::Image::FromStream(pstm); // free/release stuff GlobalUnlock(m_hMem); pstm->Release(); } catch (...) { } } void LoadImageFromBuf(Image **img, CString path) { try { CFile fp; if (fp.Open(path, CFile::modeRead)) { DWORD leng = fp.GetLength(); BYTE *pData = new BYTE[leng]; fp.Read(pData, leng); fp.Close(); LoadImageFromBuf(img, pData, leng); delete[]pData; } } catch (...) { } } void LoadImageFromBuf(Bitmap **img, CString path) { try { CFile fp; if (fp.Open(path, CFile::modeRead)) { DWORD leng = fp.GetLength(); BYTE *pData = new BYTE[leng]; fp.Read(pData, leng); fp.Close(); LoadImageFromBuf(img, pData, leng); delete[]pData; } } catch (...) { } } void LoadImageFromRes(Image **img, LPCTSTR lpszResourceName, LPCTSTR ResourceType) { try { HGLOBAL hGlobal = NULL; HRSRC hSource = NULL; LPVOID lpVoid = NULL; int nSize = 0; BOOL bResult = FALSE; hSource = FindResource(NULL, lpszResourceName, ResourceType); if (hSource == NULL)return; hGlobal = LoadResource(NULL, hSource); if (hGlobal == NULL)return; lpVoid = LockResource(hGlobal); if (lpVoid == NULL)return; nSize = (UINT)SizeofResource(NULL, hSource); LoadImageFromBuf(img, (BYTE*)hGlobal, nSize); UnlockResource(hGlobal); // 16Bit Windows Needs This FreeResource(hGlobal); // 16Bit Windows Needs This (32Bit - Automatic Release) } catch (...) { } } int GetOrientation(Image *image) { try { if (image) { UINT totalBufferSize; UINT numProperties; image->GetPropertySize(&totalBufferSize, &numProperties); // Allocate the buffer that will receive the property items. PropertyItem* pAllItems = (PropertyItem*)malloc(totalBufferSize); // Fill the buffer. image->GetAllPropertyItems(totalBufferSize, numProperties, pAllItems); // Print the id data member of each property item. for (UINT j = 0; j < numProperties; ++j) { if (PropertyTagOrientation == pAllItems[j].id) { short* ptrLong = (short*)(pAllItems[j].value); int ret = (int)*ptrLong; free(pAllItems); return ret; } } free(pAllItems); } } catch (...) { } return 1; } int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if (size == 0) return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if (pImageCodecInfo == NULL) return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for (UINT j = 0; j < num; ++j) { if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } free(pImageCodecInfo); return -1; // FailureFailure } void SaveImageToFile(Image *img, CString path) { try { if (img == NULL)return; CLSID encoderClsid; BSTR bstr = path.AllocSysString(); path.MakeLower(); if (path.Right(3) == "bmp") { GetEncoderClsid(L"image/bmp", &encoderClsid); img->Save(bstr, &encoderClsid, NULL); } else if (path.Right(3) == "png") { GetEncoderClsid(L"image/png", &encoderClsid); img->Save(bstr, &encoderClsid, NULL); } else// if(path.Right (3)=="jpg") { GetEncoderClsid(L"image/jpeg", &encoderClsid); EncoderParameters encoderParameters; ULONG quality; encoderParameters.Count = 1; encoderParameters.Parameter[0].Guid = EncoderQuality; encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; // Save the image as a JPEG with quality level 100. quality = 100; encoderParameters.Parameter[0].Value = &quality; img->Save(bstr, &encoderClsid, &encoderParameters); } SysFreeString(bstr); } catch (...) { } } void SaveImageToFile2(Image *img, CString path, ULONG quality) { try { if (img == NULL)return; CLSID encoderClsid; BSTR bstr = path.AllocSysString(); path.MakeLower(); if (path.Right(3) == "bmp") { GetEncoderClsid(L"image/bmp", &encoderClsid); img->Save(bstr, &encoderClsid, NULL); } else if (path.Right(3) == "png") { GetEncoderClsid(L"image/png", &encoderClsid); img->Save(bstr, &encoderClsid, NULL); } else// if(path.Right (3)=="jpg") { GetEncoderClsid(L"image/jpeg", &encoderClsid); EncoderParameters encoderParameters; encoderParameters.Count = 1; encoderParameters.Parameter[0].Guid = EncoderQuality; encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; // Save the image as a JPEG with quality level 100. encoderParameters.Parameter[0].Value = &quality; img->Save(bstr, &encoderClsid, &encoderParameters); } SysFreeString(bstr); } catch (...) { } } void IsWaiter2(CString id, CString name, CArray*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2, BOOL bCheckDate, CString date1, CString date2) { for (int i = 0; i < waiterarray->GetSize(); i++) { if (id == waiterarray->ElementAt(i).ElementAt(0)) { if (bCheckDate) { if (waiterarray->ElementAt(i).ElementAt(21) < date1 || waiterarray->ElementAt(i).ElementAt(21) > date2 || waiterarray->ElementAt(i).ElementAt(22) != "OK") { bWait1 = bWait2 = 0; return; } } if (name == waiterarray->ElementAt(i).ElementAt(1)) { bWait1 = 1; fscale1 = _tstof(waiterarray->ElementAt(i).ElementAt(5)) / 100.0; if (fscale1 == 0)fscale1 = 1; } else if (name == waiterarray->ElementAt(i).ElementAt(2)) { bWait1 = 1; fscale1 = _tstof(waiterarray->ElementAt(i).ElementAt(6)) / 100.0; } else if (name == waiterarray->ElementAt(i).ElementAt(3)) { bWait1 = 1; fscale1 = _tstof(waiterarray->ElementAt(i).ElementAt(7)) / 100.0; } else if (name == waiterarray->ElementAt(i).ElementAt(4)) { bWait1 = 1; fscale1 = _tstof(waiterarray->ElementAt(i).ElementAt(8)) / 100.0; } /////////////////////////////////////////////////////////////////////// if (name == waiterarray->ElementAt(i).ElementAt(9)) { bWait2 = 1; fscale2 = _tstof(waiterarray->ElementAt(i).ElementAt(13)) / 100.0; if (fscale2 == 0)fscale2 = 1; } else if (name == waiterarray->ElementAt(i).ElementAt(10)) { bWait2 = 1; fscale2 = _tstof(waiterarray->ElementAt(i).ElementAt(14)) / 100.0; } else if (name == waiterarray->ElementAt(i).ElementAt(11)) { bWait2 = 1; fscale2 = _tstof(waiterarray->ElementAt(i).ElementAt(15)) / 100.0; } else if (name == waiterarray->ElementAt(i).ElementAt(12)) { bWait2 = 1; fscale2 = _tstof(waiterarray->ElementAt(i).ElementAt(16)) / 100.0; } return; } } return; } void IsWaiter3(CString id, CString name, CArray*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2) { bWait1 = bWait2 = 0; for (int i = 0; i < waiterarray->GetSize(); i++) { if (id == waiterarray->ElementAt(i).ElementAt(0)) { if (name == waiterarray->ElementAt(i).ElementAt(17)) { bWait1 = 1; fscale1 = _tstof(waiterarray->ElementAt(i).ElementAt(19)) / 100.0; if (fscale1 == 0)fscale1 = 1; } /////////////////////////////////////////////////////////////////////// if (name == waiterarray->ElementAt(i).ElementAt(18)) { bWait2 = 1; fscale2 = _tstof(waiterarray->ElementAt(i).ElementAt(20)) / 100.0; } return; } } return; } //------------------------------------------------------------------------------ // Remark by Jeff; // 函数:CheckPhoneType // 描述:判断手机号属于哪个运营商的; // 参数: // phoneno: 欲判断的手机号; // // 返回:返回0表示移动; 1表示联通; 2表示电信; 3表示小灵通; -1表示未知的; // // 注意: // 移动: // 139, 138, 137, 136, 135, 134, 159, 158, 152, 151, 150, 157, 188, 187, 144 // 联通: // 130, 131, 132, 155, 156, 186, 185 // 电信 : // 133, 153, 189, 180, 181 //------------------------------------------------------------------------------ int CheckPhoneType(CONST CString &phoneno) { if (phoneno.IsEmpty()) return -1; for (int i = 0; i < phoneno.GetLength(); i++) { if (phoneno.GetAt(i) < '0' || phoneno.GetAt(i) > '9')return -1; } if (phoneno.GetAt(0) == '1') { if (phoneno.GetLength() != 11) return -1; int mobile[] = { 139, 138, 137, 136, 135, 134, 159, 158, 152, 151, 150, 157, 188, 187, 144, 182, 147, 183, 184, 178 }; int unicom[] = { 130, 131, 132, 155, 156, 186, 185, 176 }; int telecom[] = { 133, 153, 189, 180, 181, 177 }; for (int i = 0; i < sizeof(mobile) / sizeof(int); i++) { if (mobile[i] == _ttoi(phoneno.Left(3))) { return 0; } } for (int i = 0; i < sizeof(unicom) / sizeof(int); i++) { if (unicom[i] == _ttoi(phoneno.Left(3))) { return 1; } } for (int i = 0; i < sizeof(telecom) / sizeof(int); i++) { if (telecom[i] == _ttoi(phoneno.Left(3))) { return 2; } } TRACE(_T("------------------电话无效------------------\n")); return -1; } return -1; } BOOL CheckDateOK(CString &str) { if (str.IsEmpty())return 1; CString tip; int i; CString demo = CTime::GetCurrentTime().Format("%Y-%m-%d"); if (str.GetLength() != demo.GetLength()) goto ll; //2009-01-01 if (str.GetAt(4) != '-') goto ll; if (str.GetAt(7) != '-') goto ll; for (i = 0; i < str.GetLength(); i++) { if (i == 4 || i == 7)continue; if (str.GetAt(i) < '0' || str.GetAt(i) > '9') goto ll; } return 1; ll: tip.Format(_T("日期:%s格式错误!\r\n样板:%s"), str, demo); AfxMessageBox(tip, MB_ICONSTOP); return 0; } BOOL CheckBadWords(CString str, BOOL bMsg) { //165 CString badwords[1065] = { _T("东北独立"), _T("杜智富"), _T("法伦"), _T("刘国凯"), _T("刘凯中"), _T("薛伟"), _T("蔡崇国"), _T("陈一谘"), _T("大家论坛"), _T("弟子"), _T("两会新闻"), _T("王力雄"), _T("辛灏年"), _T("新语丝"), _T("张钢"), _T("中华人民实话实说"), _T("猪聋畸"), _T("转化"), _T("自由民主论坛"), _T("走私"), _T("法lun功"), _T("法轮功"), _T("江泽民"), _T("毛泽东"), _T("minghuinews"), _T("狗b"), _T("法抡"), _T("疆独"), _T("操蛋"), _T("喷你"), _T("大B"), _T("精液"), _T("发正念"), _T("法抡功"), _T("共狗"), _T("洪志"), _T("西藏独"), _T("瞒报"), _T("法*轮*功"), _T("枪枝"), _T("枪"), _T("迷幻药"), _T("黄色"), _T("淫乱"), _T("淫"), _T("强奸"), _T("奸"), _T("大中国论坛"), _T("戴相龙"), _T("登辉"), _T("地下教会"), _T("东土耳其斯坦"), _T("多维"), _T("反腐败论坛"), _T("反攻"), _T("高自联"), _T("戈扬"), _T("共党"), _T("关卓中"), _T("华语世界论坛"), _T("黄慈萍"), _T("贾庆林"), _T("江core"), _T("江流氓"), _T("江澤民"), _T("将则民"), _T("禁看"), _T("劳教"), _T("老毛"), _T("黎安友"), _T("李继耐"), _T("李岚清"), _T("李录"), _T("李少民"), _T("李旺阳"), _T("李小朋"), _T("李总理"), _T("连胜德"), _T("两岸三地论坛"), _T("凌锋"), _T("流亡"), _T("吕秀莲"), _T("卖国"), _T("民猪"), _T("木犀地"), _T("木子论坛"), _T("南大自由论坛"), _T("闹事"), _T("亲美"), _T("轻舟快讯"), _T("热站政论网"), _T("人民真实"), _T("上海帮"), _T("升天"), _T("盛雪"), _T("台湾建国运动组织"), _T("汤光中"), _T("唐柏桥"), _T("王润生"), _T("吴邦国"), _T("吴方城"), _T("吴官正"), _T("吴宏达"), _T("吴学灿"), _T("八九"), _T("八老"), _T("保钓"), _T("鲍彤"), _T("北京当局"), _T("邓笑贫"), _T("东南西北论谈"), _T("东社"), _T("法十轮十功"), _T("方励之"), _T("分裂"), _T("歌功颂德"), _T("工自联"), _T("功法"), _T("共产"), _T("郭伯雄"), _T("郭罗基"), _T("国家安全"), _T("国军"), _T("韩联潮"), _T("江泽慧"), _T("交班"), _T("看中国"), _T("李红痔"), _T("李宏志"), _T("李洪宽"), _T("李月月鸟"), _T("林长盛"), _T("林樵清"), _T("林慎立"), _T("刘晓波"), _T("轮大"), _T("美国之音"), _T("绵恒"), _T("日内瓦金融"), _T("瑞士金融大学"), _T("色情"), _T("统战"), _T("外交与方略"), _T("万维读者论坛"), _T("汪岷"), _T("王丹"), _T("王刚"), _T("五不"), _T("西藏"), _T("洗脑"), _T("下体"), _T("项怀诚"), _T("新观察论坛"), _T("邢铮"), _T("修炼"), _T("阎明复"), _T("央视内部晚会"), _T("杨月清"), _T("亦凡"), _T("易志熹"), _T("尹庆民"), _T("由喜贵"), _T("于大海"), _T("余英时"), _T("宇明网"), _T("圆满"), _T("岳武"), _T("择民"), _T("贼民"), _T("赵品潞"), _T("正见网"), _T("郑义"), _T("政治犯"), _T("指点江山论坛"), _T("中俄边界"), _T("中国和平"), _T("中国社会进步党"), _T("中国威胁论"), _T("中华大地"), _T("中华讲清"), _T("中华真实报道"), _T("周天法"), _T("朱嘉明"), _T("自已的故事"), _T("作秀"), _T("89-64cdjp"), _T("boxun"), _T("chinamz"), _T("cnd"), _T("dfdz"), _T("falu"), _T("nmis"), _T("svdc"), _T("tibetalk"), _T("triangleboy"), _T("unixbox"), _T("wstaiji"), _T("十六大"), _T("推翻"), _T("4-Jun"), _T("法轮"), _T("发论功"), _T("发论"), _T("发伦"), _T("江主席"), _T("朱镕基"), _T("曾庆红"), _T("傻逼"), _T("日死你"), _T("干死你"), _T("操逼"), _T("大逼"), _T("烂比"), _T("大花逼"), _T("操你妈"), _T("二逼"), _T("绿色环保手机"), _T("cdma"), _T("赤匪"), _T("独立台湾会"), _T("发抡功"), _T("江贼民"), _T("蒙古独立"), _T("神通加持法"), _T("太子党"), _T("一中一台"), _T("他母亲"), _T("你妈"), _T("你娘"), _T("你爸"), _T("群奸"), _T("包皮"), _T("奶子"), _T("打炮"), _T("陈炳基"), _T("陈蒙"), _T("达赖"), _T("大参考"), _T("电视流氓"), _T("鸡毛信文汇"), _T("劳改"), _T("林保华"), _T("马大维"), _T("马良骏"), _T("民意"), _T("民主墙"), _T("童屹"), _T("王希哲"), _T("王冶坪"), _T("熊炎"), _T("徐才厚"), _T("学自联"), _T("严家其"), _T("张健"), _T("张万年"), _T("中国之春"), _T("21世纪中国基金会"), _T("bignews"), _T("lihongzhi"), _T("renminbao"), _T("voachinese"), _T("去你妈的"), _T("奸淫"), _T("淫荡"), _T("贱货"), _T("成人书库"), _T("狗卵子"), _T("轮奸"), _T("招妓"), _T("阴道"), _T("阴水"), _T("狂操"), _T("淫水"), _T("性欲"), _T("阝月"), _T("发抡"), _T("江猪"), _T("台湾独"), _T("新疆独"), _T("氵去"), _T("车仑"), _T("泄密"), _T("失密"), _T("出卖"), _T("被盗"), _T("肉洞"), _T("博讯"), _T("曹长青"), _T("曹刚川"), _T("陈希同"), _T("陈小同"), _T("陈总统"), _T("程铁军"), _T("程真"), _T("持不同政见"), _T("赤化"), _T("春夏自由论坛"), _T("地下刊物"), _T("丁关根"), _T("丁子霖"), _T("独夫"), _T("白皮书"), _T("北京之春"), _T("俄国"), _T("巴赫"), _T("大法"), _T("东西南北论坛"), _T("动乱"), _T("江绵恒"), _T("两会"), _T("刘宾雁"), _T("刘青"), _T("刘士贤"), _T("学习班"), _T("真象"), _T("在十月"), _T("钟山风雨论坛"), _T("自焚"), _T("1989"), _T("dafa"), _T("falundafa"), _T("fa轮"), _T("freedom"), _T("fuck"), _T("GCD"), _T("huanet"), _T("making"), _T("peacehall"), _T("renmingbao"), _T("sex"), _T("simple"), _T("taip"), _T("yuming"), _T("江ze民"), _T("收容所"), _T("数据中国"), _T("hongzhi"), _T("freechina"), _T("法*功"), _T("李大师"), _T("真善忍"), _T("炼功"), _T("李鹏"), _T("小穴"), _T("江戏子"), _T("民进党"), _T("水扁"), _T("朱容基"), _T("贱逼"), _T("干你娘"), _T("卖逼"), _T("卖比"), _T("肉棍"), _T("中国移动通信"), _T("法愣"), _T("江八点"), _T("肉棒"), _T("酱猪媳"), _T("蒙独"), _T("天安门一代"), _T("新华内情"), _T("shit"), _T("我日"), _T("鸡巴"), _T("舔奶"), _T("小鸡鸡"), _T("婊子"), _T("射精"), _T("狗娘"), _T("操比"), _T("哈批"), _T("精子"), _T("屁眼"), _T("狗操"), _T("发骚"), _T("妈批"), _T("插你"), _T("逼样"), _T("肛交"), _T("淫图"), _T("法功"), _T("四川独"), _T("工力"), _T("交媾"), _T(""), _T("(+)"), _T("<"), _T(">"), _T("1 0 1 5 9"), _T("10159"), _T("12593"), _T("13725516608"), _T("13875448369"), _T("168168168"), _T("16大"), _T("6-4tianwang"), _T("av"), _T("bitch"), _T("B样"), _T("chinaliberal"), _T("chinesenewsnet"), _T("creaders"), _T("dajiyuan"), _T("dpp"), _T("dpp大法"), _T("E周刊"), _T("fa lun"), _T("falun"), _T("flg"), _T("freenet"), _T("hrichina"), _T("hypermart.net"), _T("incest"), _T("IP17908"), _T("jiangdongriji"), _T("minghui"), _T("nacb"), _T("naive"), _T("paper64"), _T("playboy"), _T("rfa"), _T("safeweb"), _T("Soccer01.com"), _T("triangle"), _T("UltraSurf"), _T("UP8新势力"), _T("ustibet"), _T("voa"), _T("wangce"), _T("xinsheng"), _T("zhengjian"), _T("zhengjianwang"), _T("zhenshanren"), _T("zhuanfalun"), _T("安装卫星电视"), _T("罢工"), _T("罢课"), _T("白立朴"), _T("办证"), _T("绑架"), _T("包赢"), _T("保密室"), _T("鲍戈"), _T("暴乱"), _T("暴政"), _T("爆炸"), _T("北大三角地论坛"), _T("北韩"), _T("北美论坛"), _T("北美自由论坛"), _T("屄"), _T("不解来电"), _T("彩民"), _T("操你"), _T("操他"), _T("柴玲"), _T("常劲"), _T("陈军"), _T("陈破空"), _T("陈宣良"), _T("成人电影"), _T("成人频道"), _T("成人生活片"), _T("程凯"), _T("迟浩田"), _T("传:单"), _T("传单"), _T("春夏论坛"), _T("打倒"), _T("大2众卡"), _T("大比"), _T("大纪元"), _T("大纪园"), _T("大史记"), _T("大中华论坛"), _T("大众真人真事"), _T("代办"), _T("代办文凭"), _T("代开"), _T("代开票"), _T("代人报仇"), _T("弹劾"), _T("弹药"), _T("党中央"), _T("邓小平"), _T("迪里夏提"), _T("第四代"), _T("钓鱼岛"), _T("丁元"), _T("东方红时空"), _T("东方时空"), _T("东突"), _T("东突厥斯坦"), _T("东突厥斯坦伊斯兰"), _T("动5感地带"), _T("独裁"), _T("独立"), _T("赌具"), _T("短信商务广告"), _T("屙民"), _T("二B"), _T("二手车"), _T("发财诗"), _T("发愣"), _T("发囵"), _T("发沦"), _T("发纶"), _T("发轮"), _T("发论公"), _T("发票"), _T("法 轮 功"), _T("法.轮.功"), _T("法仑"), _T("法囵"), _T("法沦"), _T("法纶"), _T("法轮大法"), _T("法论"), _T("法谪"), _T("法谪功"), _T("反封锁"), _T("反封锁技术"), _T("反革命"), _T("反共"), _T("反人类"), _T("反日"), _T("反社会"), _T("方舟子"), _T("飞扬论坛"), _T("非典"), _T("斐得勒"), _T("费良勇"), _T("分家在"), _T("粉饰太平"), _T("风雨神州"), _T("封从德"), _T("封杀"), _T("封杀酱猪媳"), _T("冯东海"), _T("冯素英"), _T("\"?S"), _T("\""), _T("佛展千手法"), _T("付申奇"), _T("傅申奇"), _T("傅志寰"), _T("肛门"), _T("港料"), _T("高官"), _T("高利贷"), _T("高文谦"), _T("高薪养廉"), _T("高瞻"), _T("睾丸"), _T("鸽派"), _T("蛤蟆"), _T("个人崇拜"), _T("公投"), _T("公证"), _T("功友"), _T("共产党"), _T("共匪"), _T("共军"), _T("狗逼"), _T("狗屎"), _T("古怪歌"), _T("贯通两极法"), _T("广闻"), _T("龟公"), _T("龟头"), _T("鬼子"), _T("郭平"), _T("郭岩华"), _T("国家机密"), _T("国民党"), _T("国研新闻邮件"), _T("国贼"), _T("韩东方"), _T("汉奸"), _T("何德普"), _T("何勇"), _T("河殇"), _T("核污染"), _T("黑车"), _T("黑庄"), _T("红灯区"), _T("红色恐怖"), _T("宏法"), _T("宏志"), _T("洪传"), _T("洪吟"), _T("洪哲胜"), _T("后果自负"), _T("胡紧掏"), _T("胡锦涛"), _T("胡锦滔"), _T("胡锦淘"), _T("胡景涛"), _T("胡平"), _T("胡总书记"), _T("护法"), _T("花花公子"), _T("华建敏"), _T("华通时事论坛"), _T("华夏文摘"), _T("华岳时事论坛"), _T("黄祸"), _T("回民暴"), _T("悔过书"), _T("鸡8"), _T("鸡八"), _T("鸡扒"), _T("鸡吧"), _T("鸡鸡"), _T("姬胜德"), _T("积克馆"), _T("基督"), _T("集会"), _T("妓女"), _T("贾廷安"), _T("贾育台"), _T("假钞"), _T("简鸿章"), _T("建国党"), _T("贱比"), _T("贱人"), _T("江独裁"), _T("江罗"), _T("江青"), _T("江则民"), _T("江贼"), _T("江折民"), _T("江猪媳"), _T("姜春云"), _T("僵贼"), _T("僵贼民"), _T("讲法"), _T("教徒"), _T("教养院"), _T("接班"), _T("揭批书"), _T("结账"), _T("金尧如"), _T("锦涛"), _T("经文"), _T("靖国神社"), _T("静坐"), _T("九成新"), _T("开放杂志"), _T("砍掉"), _T("抗日"), _T("抗议"), _T("靠你妈"), _T("邝锦文"), _T("拉丹"), _T("拉登"), _T("烂逼"), _T("烂货"), _T("劳动教养所"), _T("老江"), _T("老人政治"), _T("李长春"), _T("李登辉"), _T("李洪志"), _T("李兰菊"), _T("李老师"), _T("李禄"), _T("李瑞环"), _T("李淑娴"), _T("李文斌"), _T("李小鹏"), _T("李志绥"), _T("李总统"), _T("联4通"), _T("联总"), _T("联总之声"), _T("廉政大论坛"), _T("梁光烈"), _T("梁擎墩"), _T("两岸关系"), _T("两个中国"), _T("两会报道"), _T("廖锡龙"), _T("林保华射精"), _T("灵动卡"), _T("领事馆"), _T("刘宾深"), _T("刘刚"), _T("刘华清"), _T("刘俊国"), _T("刘千石"), _T("刘山青"), _T("刘士贤司马晋"), _T("刘文胜"), _T("刘晓竹"), _T("刘永川"), _T("六 合"), _T("六合"), _T("六合彩"), _T("六码"), _T("六四"), _T("六四民主运动"), _T("龙虎豹"), _T("龙虎豹宋书元"), _T("龙卷风"), _T("陆委会"), _T("吕京花"), _T("抡功"), _T("伦功"), _T("轮功"), _T("罗干"), _T("罗礼诗"), _T("麻将"), _T("麻将机"), _T("马会"), _T("马三家"), _T("马时敏"), _T("卖国唐捷"), _T("毛厕洞"), _T("毛片"), _T("毛贼东"), _T("美国参考"), _T("猛料"), _T("蒙古独"), _T("梦网洪志"), _T("迷药"), _T("密穴"), _T("绵恒异议人士"), _T("民国"), _T("民联"), _T("民运"), _T("民阵"), _T("民主"), _T("民族矛盾"), _T("明慧"), _T("莫伟强"), _T("内幕"), _T("男女公关"), _T("男性"), _T("南大论坛"), _T("倪育贤"), _T("你妈的"), _T("你说我说论坛"), _T("牛逼"), _T("牛比"), _T("潘国平"), _T("泡沫经济"), _T("嫖娼"), _T("平米A"), _T("迫害"), _T("破鞋"), _T("祁建"), _T("齐墨"), _T("钱达"), _T("钱国梁"), _T("钱其琛"), _T("枪支"), _T("抢粮记"), _T("乔石"), _T("窃听器"), _T("窃听王"), _T("亲日"), _T("钦本立"), _T("秦晋"), _T("青天白日旗"), _T("情妇"), _T("庆红"), _T("求:购"), _T("全1球通"), _T("全国两会"), _T("权柄"), _T("热比娅"), _T("人民报"), _T("人民报讯"), _T("人民大众"), _T("人民大众时事参考"), _T("人民内情真相"), _T("人民真实报道"), _T("人民之声论坛"), _T("人权"), _T("人质"), _T("日货"), _T("日你"), _T("日他"), _T("如6意通"), _T("乳房"), _T("三陪"), _T("骚货"), _T("杀笔"), _T("傻B"), _T("煞笔"), _T("善恶有报"), _T("上访"), _T("上海孤儿院"), _T("邵家健"), _T("涉日"), _T("神7州行"), _T("沈彤"), _T("盛华仁"), _T("盛雪辛灏年"), _T("十八摸"), _T("石戈"), _T("时代论坛"), _T("时事参考"), _T("时事论坛"), _T("使馆"), _T("世界经济导报"), _T("示威"), _T("事实独立"), _T("刷卡"), _T("双十节"), _T("氵去车仑工力"), _T("税力"), _T("司马晋"), _T("司马璐"), _T("司徒华"), _T("私彩"), _T("斯诺"), _T("四联航空"), _T("宋xx"), _T("宋平"), _T("宋书元"), _T("宋祖英"), _T("苏绍智"), _T("苏晓康"), _T("他妈"), _T("他妈的"), _T("台*湾"), _T("台独"), _T("台盟"), _T("台湾"), _T("台湾狗"), _T("台湾联盟"), _T("台湾青年独立联盟"), _T("台湾政论区"), _T("台湾自由联盟"), _T("唐捷"), _T("套牌"), _T("套牌车"), _T("特码"), _T("滕文生"), _T("提供特码"), _T("天安门录影带"), _T("天安门事件"), _T("天安门屠杀"), _T("天怒"), _T("天葬"), _T("统独"), _T("投毒"), _T("透码"), _T("突厥斯坦"), _T("屠杀"), _T("外交论坛"), _T("外围"), _T("晚年周恩来"), _T("万润南"), _T("万晓东"), _T("王宝森"), _T("王炳章"), _T("王策"), _T("王超华"), _T("王辅臣"), _T("王涵万"), _T("王沪"), _T("王军涛"), _T("王瑞林"), _T("王若望"), _T("王秀丽"), _T("网特"), _T("尉健行"), _T("魏京生"), _T("温家宝"), _T("温元凯"), _T("文革"), _T("我操"), _T("无抵押贷款"), _T("无界浏览器"), _T("无能"), _T("吴百益"), _T("吴弘达"), _T("吴仁华"), _T("吴学璨"), _T("吾尔开希"), _T("五不争鸣论坛"), _T("伍凡"), _T("藏独"), _T("香港总部"), _T("项小吉"), _T("小6灵通"), _T("小参考"), _T("小肛"), _T("小泉"), _T("小泉纯一郎"), _T("肖强"), _T("邪恶"), _T("谢长廷"), _T("谢选骏"), _T("谢中之"), _T("新华举报"), _T("新华通论坛"), _T("新生网"), _T("新闻封锁"), _T("信用危机"), _T("性服务"), _T("性交"), _T("熊焱"), _T("徐邦秦"), _T("徐匡迪"), _T("徐水良"), _T("许家屯"), _T("玄`机"), _T("玄机"), _T("学潮"), _T("学潮晚年周恩来"), _T("学联"), _T("学运"), _T("雪山狮子"), _T("压迫"), _T("颜射"), _T("杨怀安"), _T("杨建利"), _T("杨巍"), _T("杨周"), _T("姚月谦"), _T("摇奖"), _T("夜话紫禁城"), _T("一码"), _T("一切证件"), _T("一肖"), _T("伊斯兰运动"), _T("移3动"), _T("义解"), _T("异议人士"), _T("易丹轩"), _T("阴唇"), _T("阴蒂"), _T("阴茎"), _T("阴胫"), _T("淫秽"), _T("淫穴"), _T("印尼伊斯兰祈祷团"), _T("印章"), _T("游行"), _T("幼齿"), _T("幼女"), _T("于浩成"), _T("舆论"), _T("舆论反制"), _T("远志明"), _T("杂种"), _T("造反"), _T("则民"), _T("泽民"), _T("曾培炎"), _T("炸药"), _T("张伯笠"), _T("张宏堡"), _T("张林"), _T("张伟国"), _T("张昭富"), _T("张志清"), _T("招生"), _T("赵海青"), _T("赵南"), _T("赵晓微"), _T("赵紫阳"), _T("哲民"), _T("真相"), _T("镇压"), _T("争鸣论坛"), _T("正法"), _T("正义党论坛"), _T("郑源"), _T("政变"), _T("政府"), _T("政权"), _T("政治反对派"), _T("政治风波"), _T("支那"), _T("中俄边界新约"), _T("中功"), _T("中共"), _T("中国复兴论坛"), _T("中国孤儿院"), _T("中国论坛"), _T("中国社会论坛"), _T("中国问题论坛"), _T("中国真实内容"), _T("中国猪"), _T("中华大众"), _T("中华民国"), _T("中华人民正邪"), _T("中华时事"), _T("中华养生益智功"), _T("周锋锁"), _T("周旋"), _T("朱琳"), _T("朱毛"), _T("朱溶剂"), _T("猪操"), _T("猪毛"), _T("主席"), _T("主义"), _T("专制"), _T("庄家"), _T("追讨债务"), _T("追债"), _T("子弹"), _T("紫阳"), _T("自民党"), _T("自由"), _T("自由运动"), _T("作爱"), _T("做爱"), _T("儍B"), _T("儍 B"), _T("珺"), _T("彧"), _T("︰"), _T("现房"), _T("公寓"), _T("小户"), _T("房产"), _T("写字楼"), _T("房型"), _T("旺铺"), _T("购房"), _T("精装"), _T("别墅"), _T("洋房"), _T("城堡"), _T("生态区"), _T("名宅"), _T("劵"), _T("房折"), _T("公馆"), _T("首付"), _T("复式"), _T("全户型"), _T("装修"), _T("卖房"), _T("买房"), _T("豪宅"), _T("租房"), _T("样板间"), _T("地产"), _T("楼盘"), _T("商业楼"), _T("景观住宅"), _T("两限房"), _T("风水宝地"), _T("抢购"), _T("号码百事通"), _T("街铺"), _T("一梯两户"), _T("看房"), _T("特惠房"), _T("小旺铺"), _T("准现房"), _T("房展"), _T("户型"), _T("銶"), _T("㎡"), _T("湳"), _T("― ") //----------------- #if JEFF_DELETE_ON _T("【call5.me】"), _T("您可拨020"), _T("88btt.com热线400611"), _T("400678165"), _T("海王星"), _T("博天堂"), _T("十八大"), _T("钓鱼岛"), _T("无限次数提款"), _T("广东地和"), _T("利来"), _T("抢劫"), _T("fa lun"), _T("强奸"), _T("dafa"), _T("falun"), _T("SIM卡抽奖"), _T("罢工"), _T("罢课"), _T("暴乱"), _T("婊子"), _T("操你"), _T("操你娘"), _T("蠢猪"), _T("达赖"), _T("打倒"), _T("大法"), _T("大纪元"), _T("弹药"), _T("钓鱼岛"), _T("东突"), _T("东突厥斯坦伊斯兰运动"), _T("发抡"), _T("发仑"), _T("发伦"), _T("发囵"), _T("发沦"), _T("发纶"), _T("发轮"), _T("发论"), _T("法 轮 功"), _T("法.轮.功"), _T("法抡"), _T("法仑"), _T("法伦"), _T("法囵"), _T("法沦"), _T("法纶"), _T("法轮"), _T("法论"), _T("反革命"), _T("反日"), _T("分裂"), _T("干你娘"), _T("功友"), _T("古怪歌"), _T("国研新闻邮件"), _T("黑庄"), _T("宏志"), _T("洪志"), _T("胡锦涛"), _T("鸡巴"), _T("鸡毛信文汇"), _T("妓女"), _T("简鸿章"), _T("江八点"), _T("江独裁"), _T("江泽民"), _T("疆独"), _T("教徒"), _T("锦涛"), _T("靖国神社"), _T("九、评"), _T("九.评"), _T("九码"), _T("九-评"), _T("拉丹"), _T("拉登"), _T("李鹏"), _T("联总之声传单"), _T("灵动卡"), _T("六合彩"), _T("六码"), _T("吕秀莲"), _T("绿色环保手机"), _T("美国之音"), _T("猛料"), _T("迷药"), _T("民运"), _T("民猪"), _T("嫖娼"), _T("迫害"), _T("枪支"), _T("强奸"), _T("窃听器"), _T("人民报"), _T("人民报讯"), _T("人民大众时事参考"), _T("人民内情真相"), _T("人民真实报道"), _T("人权"), _T("日你妈"), _T("日他"), _T("三码"), _T("三陪"), _T("色情"), _T("傻B"), _T("涉日"), _T("十六大"), _T("示威"), _T("他妈的"), _T("台*湾"), _T("特等奖"), _T("天葬"), _T("突厥斯坦"), _T("推翻"), _T("王八蛋"), _T("温家宝"), _T("无能"), _T("香港总部"), _T("小鸡鸡"), _T("新华举报"), _T("新华内情"), _T("新闻封锁"), _T("畜生"), _T("玄`机"), _T("压迫"), _T("淫秽"), _T("银行联合管理局"), _T("印尼伊斯兰祈祷团"), _T("游行"), _T("舆论"), _T("造反"), _T("真善忍"), _T("镇压"), _T("正法"), _T("政变"), _T("政治风波"), _T("中俄边界新约"), _T("中国银联"), _T("中华民国"), _T("中奖"), _T("朱容基"), _T("自焚"), _T("自由运动"), _T("达赖"), _T("套牌"), _T("情妇"), _T("监听"), _T("巴南电信"), _T("合川分公司"), _T("合川电信"), _T("死光"), _T("116114"), _T("北京宝诚"), _T("华盛投资"), _T("名门国际"), _T("利博"), _T("赤橙黄绿"), _T("免佣BJL首发"), _T("洗*码优惠"), _T("【俱乐部】"), _T("18266381922"), _T("回拨卡"), _T("号码百事通推出短信订机票!实时") #endif }; for (int i = 0; i < 1065; i++)//165 { g_temp = badwords[i]; if (str.Find(g_temp) != -1) { // AfxMessageBox("信息服务商禁止的非法字符:("+g_temp+")希望您谅解!"); TRACE(_T("信息服务商禁止的非法字符,希望您谅解\n")); return 1; } } return 0; } ///目录是否存在的检查: 支持网络文件夹 bool CheckFolderFileExist(CString &strPath) { CString path = strPath; CFile fp; if (fp.Open(path, CFile::modeRead)) { fp.Close(); return 1; } if (strPath.Right(1) != "\\") path += "\\"; path += "zaqw1234.dat"; ::DeleteFile(path); if (fp.Open(path, CFile::modeCreate) == 0) return 0; fp.Close(); ::DeleteFile(path); return 1; } int FindArray(CStringArray *pArray, const CString &Str) { for (int i = 0; i < pArray->GetSize(); i++) { if (pArray->ElementAt(i) == Str) return i; } return -1; } void FillLength(CString &str, int length) { while (str.GetLength() < length) str += " "; } int GetYearPos(int year) { for (int i = 0; i < g_hisyeararray.GetSize(); i++) { if (year == _ttoi(g_hisyeararray.ElementAt(i).ElementAt(0))) return i; } return -1; } BOOL GIsHalfHZ(const CString &str) { int len = str.GetLength(); BOOL IsHalf = FALSE; for (int i = 0; i < len; i++) { if (str.GetAt(i) < 0) IsHalf = !IsHalf; } return IsHalf; } void WriteTitle(CString str) { g_title = str; CStdioFile fp; fp.Open(g_mainpath + "\\title.txt", CFile::modeWrite | CFile::modeCreate); fp.WriteString(str); fp.Close(); } CString GetIP(CString branch) { for (int i = 0; i < g_brancharray.GetSize(); i++) { if (g_domain == g_brancharray.ElementAt(i).ElementAt(2)) { //if(g_serverbak.Find (".ly.com")!=-1) return g_server; CString ip = g_serverbak; //MyGetIPByName(ip); return ip; } if (branch == g_brancharray.ElementAt(i).ElementAt(0)) { return g_brancharray.ElementAt(i).ElementAt(1); } } return _T(""); } BOOL IsHanZi(CString str) { TBYTE ucHigh, ucLow; for (int i = 0; i < str.GetLength(); i++) { if ((TBYTE)str[i] < 0x80) { continue; } ucHigh = (TBYTE)str[i]; ucLow = (TBYTE)str[i + 1]; if (ucHigh < 0xa1 || ucLow < 0xa1) { continue; } return 1; } return 0; } int GetType(CString str) { if (IsHanZi(str))return 0; BOOL bDigit = 1; BOOL bAlpha = 1; for (int i = 0; i < str.GetLength(); i++) { if (!::isdigit(str.GetAt(i))) //if(! ((str.GetAt (i)<='0' && str.GetAt (i)>='9' ) )) bDigit = 0; if (!((str.GetAt(i) <= 'z' && str.GetAt(i) >= 'a') || (str.GetAt(i) <= 'Z' && str.GetAt(i) >= 'A'))) //else if(!::isalpha ( ((unsigned char)str.GetAt (i)))) bAlpha = 0; if (bDigit == 0 && bAlpha == 0)return 0; } if (bDigit) { /*#ifdef SUNRAIN_VERSION return 0; #else*/ return 0; //#endif } else if (bAlpha) { return 2; } else return 0; } CString FilterBZ(CString &bz) { bz.Replace(_T("'"), _T("")); /* int i=bz.GetLength ()-1; char c; for(;i>=0;i--) { c=bz.GetAt (i); if(c<32)// && c!=10 && c!=13) bz.Delete (i); }*/ if (bz.GetLength() > 1023) { AfxMessageBox(_T("文字太长, 字符串将被截取!"), MB_ICONSTOP); bz = bz.Left(1023); } return bz; } // GetWidth()的长度与CRect的长度是不一样的单位值,需要转换适合的比例;(一个是图片的像素尺寸,一个DC的大小尺寸) // 将图片尺寸与设备尺寸进行转换适合的比例; void RectFitDes(int width, int height, CRect &rc) { try { if (width == 0 || height == 0)return; // 图片长宽比例; float fscale = (float)width / (float)height; // 设备长宽比例; float rcscale = ((float)rc.Width()) / ((float)rc.Height()); int rcwid = rc.Width(); int rchei = rc.Height(); int dt = 0; // Jeff.如果设备长宽比例 < 图片长宽比例;(即相同长度下,高越大比例值越小,所以此时图片尺寸 与 显示设备的尺寸相比,要显得更长) if (rcscale < fscale) { // Jeff.remarks // 调整显示设备的大小,以使之能容纳图片尺寸;(即长宽比例上,要大于或等于图片的长宽比例) // 所以有两种方法使得 rcscale >= fscale 表达式成立: // ----------------------------------------------- // 方法1:显示设备宽加x值,计算出下面表达式x的值即可 // (rc.Width()+x) / rc.Height() >= width/height; // 方法2:显示设备高减x值,计算出下面表达式x的值即可 // (rc.Width()) / (rc.Height()-x) >= width/height; //------------------------------------------------ // 两种方法的最后表达式为: // x >= rc.Height() - rcWidth()*(height/width); // 即 x >= rc.Height() - rcWidth()/fscale; //------------------------------------------------ dt = (rchei - rcwid / fscale) / 2; rc.top += dt; rc.bottom -= dt; } else { dt = (rcwid - rchei*fscale) / 2; rc.left += dt; rc.right -= dt; } } catch (...) { } } BOOL IsHasRights(int pos) { return 1; if (g_user.rights.GetLength() > pos) { BOOL ret = _ttoi(g_user.rights.Mid(pos, 1)); if (ret == 0)AfxMessageBox(_T("没有相关权限!"), MB_ICONINFORMATION); return ret; } AfxMessageBox(_T("没有相关权限!"), MB_ICONINFORMATION); return 0; } BOOL IsHasRights2(int pos) { return 1; if (g_user.rights.GetLength() > pos) { BOOL ret = _ttoi(g_user.rights.Mid(pos, 1)); return ret; } return 0; } BOOL IsHasRightsnew(int pos) { if (g_user.rights.GetLength() > pos) { BOOL ret = _ttoi(g_user.rights.Mid(pos, 1)); if (ret == 0)AfxMessageBox(_T("没有相关权限! 请与系统管理员联系!"), MB_ICONINFORMATION); return ret; } AfxMessageBox(_T("没有相关权限! 请与系统管理员联系!"), MB_ICONINFORMATION); return 0; } BOOL IsHasRights2new(int pos) { if (g_user.rights.GetLength() > pos) { BOOL ret = _ttoi(g_user.rights.Mid(pos, 1)); return ret; } return 0; } /******************************************************************************************** /* Syntax /* void FirstLetter(int nCode, CString& strLetter) /* Remarks: /* Get the first letter of pinyin according to specified Chinese character code. /* Parameters: /* nCode - the code of the chinese character. /* strLetter - a CString object that is to receive the string of the first letter. /* Return Values: /* None. /* Author: /* lixiaosan /* Create Date: /* 05-26-2006 /********************************************************************************************/ void FirstLetter(int nCode, CString& strLetter) { if (nCode >= 1601 && nCode < 1637) strLetter = _T("A"); if (nCode >= 1637 && nCode < 1833) strLetter = _T("B"); if (nCode >= 1833 && nCode < 2078) strLetter = _T("C"); if (nCode >= 2078 && nCode < 2274) strLetter = _T("D"); if (nCode >= 2274 && nCode < 2302) strLetter = _T("E"); if (nCode >= 2302 && nCode < 2433) strLetter = _T("F"); if (nCode >= 2433 && nCode < 2594) strLetter = _T("G"); if (nCode >= 2594 && nCode < 2787) strLetter = _T("H"); if (nCode >= 2787 && nCode < 3106) strLetter = _T("J"); if (nCode >= 3106 && nCode < 3212) strLetter = _T("K"); if (nCode >= 3212 && nCode < 3472) strLetter = _T("L"); if (nCode >= 3472 && nCode < 3635) strLetter = _T("M"); if (nCode >= 3635 && nCode < 3722) strLetter = _T("N"); if (nCode >= 3722 && nCode < 3730) strLetter = _T("O"); if (nCode >= 3730 && nCode < 3858) strLetter = _T("P"); if (nCode >= 3858 && nCode < 4027) strLetter = _T("Q"); if (nCode >= 4027 && nCode < 4086) strLetter = _T("R"); if (nCode >= 4086 && nCode < 4390) strLetter = _T("S"); if (nCode >= 4390 && nCode < 4558) strLetter = _T("T"); if (nCode >= 4558 && nCode < 4684) strLetter = _T("W"); if (nCode >= 4684 && nCode < 4925) strLetter = _T("X"); if (nCode >= 4925 && nCode < 5249) strLetter = _T("Y"); if (nCode >= 5249 && nCode < 5590) strLetter = _T("Z"); } /******************************************************************************************** /* Syntax /* GetFirstLetter(CString strName, CString& strFirstLetter) /* Remarks: /* Get the first letter of pinyin according to specified Chinese character. /* Parameters: /* strName - a CString object that is to be parsed. /* strFirstLetter - a CString object that is to receive the string of the first letter. /* Return Values: /* None. /* Author: /* lixiaosan /* Create Date: /* 05-26-2006 /********************************************************************************************/ void GetFirstLetter(CString strName, CString& strFirstLetter) { TBYTE ucHigh, ucLow; int nCode; CString strRet; strFirstLetter.Empty(); for (int i = 0; i < strName.GetLength(); i++) { if ((TBYTE)strName[i] < 0x80) { strRet = strName.Mid(i, 1); strRet.MakeUpper(); strFirstLetter += strRet; continue; } ucHigh = (TBYTE)strName[i]; ucLow = (TBYTE)strName[i + 1]; if (ucHigh < 0xa1 || ucLow < 0xa1) continue; else // Treat code by section-position as an int type parameter, // so make following change to nCode. nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0; FirstLetter(nCode, strRet); strFirstLetter += strRet; i++; } } CString newGUID() { CString str; GUID guid; CoInitialize(NULL); if (S_OK == ::CoCreateGuid(&guid)) { str.Format( _T("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"), guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); } CoUninitialize(); return str.Left(28); } CString GetNameFromDomain(CString domain) { for (int i = 0; i < g_brancharray.GetSize(); i++) { if (domain == g_brancharray.ElementAt(i).ElementAt(2)) { return g_brancharray.ElementAt(i).ElementAt(0); } } return _T(""); } void ConvertToPrice(CString &str) { if (str.Find('.') == -1)return; str.TrimRight('0'); str.TrimRight('.'); } BOOL myisdigit(CString str) { for (int i = 0; i < str.GetLength(); i++) { if (!::isdigit(str.GetAt(i))) return 0; } return 1; } BOOL IsHasRightsnew2(int pos, CString rights) { if (rights.GetLength() > pos) { BOOL ret = _ttoi(rights.Mid(pos, 1)); if (ret == 0)AfxMessageBox(_T("没有相关权限! 请与系统管理员联系!"), MB_ICONINFORMATION); return ret; } AfxMessageBox(_T("没有相关权限! 请与系统管理员联系!"), MB_ICONINFORMATION); return 0; } DWORD FindAppProcessID(CString path) { try { HANDLE handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); PROCESSENTRY32 Info; Info.dwSize = sizeof(PROCESSENTRY32); path.MakeLower(); if (::Process32First(handle, &Info)) { do { CString ss = Info.szExeFile; ss.MakeLower(); if (ss.Find(path) != -1 || (!ss.CompareNoCase(path))) { ::CloseHandle(handle); return Info.th32ProcessID; } } while (::Process32Next(handle, &Info)); ::CloseHandle(handle); } return -1; } catch (...) { } return 0; } BOOL isInnerIP(DWORD a_ip) // Jeff.判断是否是内网? { BOOL bValid = 0; if ((a_ip >> 24 == 0xa) || (a_ip >> 16 == 0xc0a8) || (a_ip >> 22 == 0x2b0)) { bValid = 1; } return bValid; } //// Jeff.UNICODE版本未完成; //void MyGetIPByName2(CString &name) //{ //#if JEFF_TEST_ON // CString strIP = name; //#ifdef UNICODE // int nLen = WideCharToMultiByte(CP_ACP, 0, strIP, -1, NULL, 0, NULL, NULL); // if (nLen <= 0) // return; // // char *hostname = new char[nLen]; // if (hostname == NULL) // return; // // WideCharToMultiByte(CP_ACP, 0, strIP, -1, hostname, nLen, NULL, NULL); // hostname[nLen - 1] = 0; //#else // char *hostname = strIP.GetBuffer(); // strIP.ReleaseBuffer(); //#endif // addrinfo *ailist, *aip; // addrinfo hint; // sockaddr_in *sinp; // //char *hostname = "luoyedeshan"; /* 这是我的用户名 */ // char buf[INET_ADDRSTRLEN]; // //char *server = "3294"; /* 这是服务端口号 */ // const char *pIPAddr; // int ilRc; // hint.ai_family = AF_INET; /* hint 的限定设置 */ // hint.ai_socktype = 0; /* 这里可是设置 socket type . 比如 SOCK——DGRAM */ // hint.ai_flags = AI_PASSIVE; /* flags 的标志很多 。常用的有AI_CANONNAME; */ // hint.ai_protocol = 0; /* 设置协议 一般为0,默认 */ // hint.ai_addrlen = 0; /* 下面不可以设置,为0,或者为NULL */ // hint.ai_canonname = NULL; // hint.ai_addr = NULL; // hint.ai_next = NULL; // ilRc = getaddrinfo(hostname, NULL/*server*/, &hint, &ailist); // // delete hostname; // // if (ilRc < 0) // { // //char str_error[100]; // //strcpy_s(str_error, gai_strerrorA(errno)); // //printf("str_error = %s", str_error); // return; // } // // for (aip = ailist; aip != NULL; aip = aip->ai_next) /* 显示获取的信息 */ // { // sinp = (sockaddr_in *)aip->ai_addr; /* 为什么是for 循环 ,先向下看 */ // pIPAddr = inet_ntop(AF_INET, &sinp->sin_addr, buf, INET_ADDRSTRLEN); // printf(" addr = %s", pIPAddr ? pIPAddr : "unknow "); // printf("port = %d ", ntohs(sinp->sin_port)); // printf(" \n"); // } //#else // CString strIP = name; // int nLen = WideCharToMultiByte(CP_ACP, 0, strIP, -1, NULL, 0, NULL, NULL); // if ( nLen <= 0 ) // { // return; // } // // char *pszIP = new char[nLen]; // if ( pszIP == NULL) // { // return; // } // // WideCharToMultiByte(CP_ACP, 0, strIP, -1, pszIP, nLen, NULL, NULL); // pszIP[nLen - 1] = 0; // // name.Empty(); // DWORD dwServerIP = 0; // HOSTENT *host = gethostbyname(pszIP); // delete pszIP; // struct in_addr addr; // if (host != NULL) // { // for (int i = 0; host->h_addr_list[i] != NULL; i++) // { // memset(&addr, 0, sizeof(addr)); // memcpy(&addr.S_un.S_addr, host->h_addr_list[i], host->h_length); // dwServerIP = ntohl(addr.S_un.S_addr); // BYTE* pIP = (BYTE*)&dwServerIP; // name.Format(_T("%d.%d.%d.%d"), pIP[3], pIP[2], pIP[1], pIP[0]); // } // } //#endif //} // //// Jeff.UNICODE版本未完成; //void MyGetIPByName(CString &name) // Jeff.根据计算机名称获取IP地址; //{ //#if JEFF_TEST_ON // g_serverarray.RemoveAll(); // CString strIP = name; // name.Empty(); // //#ifdef UNICODE // int nLen = WideCharToMultiByte(CP_ACP, 0, strIP, -1, NULL, 0, NULL, NULL); // if (nLen <= 0) // return; // // char *hostname = new char[nLen]; // if (hostname == NULL) // return; // // WideCharToMultiByte(CP_ACP, 0, strIP, -1, hostname, nLen, NULL, NULL); // hostname[nLen - 1] = 0; //#else // char *hostname = strIP.GetBuffer(); // strIP.ReleaseBuffer(); //#endif // addrinfo *ailist, *aip; // addrinfo hint; // sockaddr_in *sinp; // //char *hostname = "luoyedeshan"; /* 这是我的用户名 */ // char buf[INET_ADDRSTRLEN]; // //char *server = "3294"; /* 这是服务端口号 */ // const char *pIPAddr; // int ilRc; // hint.ai_family = AF_INET; /* hint 的限定设置 */ // hint.ai_socktype = 0; /* 这里可是设置 socket type . 比如 SOCK——DGRAM */ // hint.ai_flags = AI_PASSIVE; /* flags 的标志很多 。常用的有AI_CANONNAME; */ // hint.ai_protocol = 0; /* 设置协议 一般为0,默认 */ // hint.ai_addrlen = 0; /* 下面不可以设置,为0,或者为NULL */ // hint.ai_canonname = NULL; // hint.ai_addr = NULL; // hint.ai_next = NULL; // ilRc = getaddrinfo(hostname, NULL/*server*/, &hint, &ailist); // // delete hostname; // // if (ilRc < 0) // { // //char str_error[100]; // //strcpy_s(str_error, gai_strerrorA(errno)); // //printf("str_error = %s", str_error); // return; // } // // for (aip = ailist; aip != NULL; aip = aip->ai_next) /* 显示获取的信息 */ // { // sinp = (sockaddr_in *)aip->ai_addr; /* 为什么是for 循环 ,先向下看 */ // pIPAddr = inet_ntop(AF_INET, &sinp->sin_addr, buf, INET_ADDRSTRLEN); // printf(" addr = %s", pIPAddr ? pIPAddr : "unknow "); // printf("port = %d ", ntohs(sinp->sin_port)); // printf(" \n"); // } //#else // g_serverarray.RemoveAll(); // CString strIP = name; // name.Empty(); // DWORD dwServerIP = 0; // HOSTENT *host = gethostbyname(strIP); // Jeff.所有本机的网络适配器; // struct in_addr addr; // if (host != NULL) // { // // Jeff.遍历本机所有适配器的IP地址; // for (int i = 0; host->h_addr_list[i] != NULL; i++) // { // memset(&addr, 0, sizeof(addr)); // memcpy(&addr.S_un.S_addr, host->h_addr_list[i], host->h_length); // dwServerIP = ntohl(addr.S_un.S_addr); // BYTE* pIP = (BYTE*)&dwServerIP; // name.Format(_T("%d.%d.%d.%d"), pIP[3], pIP[2], pIP[1], pIP[0]); // g_serverarray.Add(name); // } // } // while (g_serverarray.GetSize() > 1) // { // CString name; // BOOL bFind = 0; // for (int i = 0; i < g_serverarray.GetSize(); i++) // { // DWORD dwServerIP = inet_addr(g_serverarray.ElementAt(i)); // dwServerIP = htonl(dwServerIP);//加了才正确 // if (isInnerIP(dwServerIP) == 0) // { // // AfxMessageBox("外部IP"); // g_serverarray.RemoveAt(i); // bFind = 1; // break; // } // // else // // AfxMessageBox("内部IP"); // } // if (bFind == 0) // { // break; // } // } //#endif //} CString GetW(CString str) { int x = _ttoi(str); if (x > 9999) { str.Format(_T("%d"), x); str = str.Right(5); str = str.Left(1); return str; } return _T(""); } CString GetK(CString str) { int x = _ttoi(str); if (x > 999) { str.Format(_T("%d"), x); str = str.Right(4); str = str.Left(1); return str; } return _T(""); } CString GetB(CString str) { int x = _ttoi(str); if (x > 99) { str.Format(_T("%d"), x); str = str.Right(3); str = str.Left(1); return str; } return _T(""); } CString GetS(CString str) { int x = _ttoi(str); if (x > 9) { str.Format(_T("%d"), x); str = str.Right(2); str = str.Left(1); return str; } return _T(""); } CString GetG(CString str) { int x = _ttoi(str); if (x > 0) { str.Format(_T("%d"), x); str = str.Right(1); return str; } return _T(""); } CString GetHMoney(CString str) { if (str.IsEmpty()) return _T(""); if (str == _T("0")) return _T("零"); if (_ttoi(str) < 1 || _ttoi(str) > 9) return _T(""); CString ret[] = { _T("壹"), _T("贰"), _T("叁"), _T("肆"), _T("伍"), _T("陆"), _T("柒"), _T("捌"), _T("玖") }; return ret[_ttoi(str) - 1]; } BOOL CheckDateOK2(CString str) { if (str.IsEmpty())return 0; CString tip; int i; CString demo = CTime::GetCurrentTime().Format(_T("%Y-%m-%d")); if (str.GetLength() != demo.GetLength()) goto ll; //2009-01-01 if (str.GetAt(4) != '-') goto ll; if (str.GetAt(7) != '-') goto ll; for (i = 0; i < str.GetLength(); i++) { if (i == 4 || i == 7)continue; if (str.GetAt(i) < '0' || str.GetAt(i) > '9') goto ll; } return 1; ll: return 0; } CString GetDomainFromBranch(CString branch) { if (branch.IsEmpty())return _T(""); for (int i = 0; i < g_brancharray.GetSize(); i++) { if (branch == g_brancharray.ElementAt(i).ElementAt(0)) { return g_brancharray.ElementAt(i).ElementAt(2); } } return _T(""); } CString GetBranchPhotoPath(CString branch) { if (branch.IsEmpty())return _T(""); for (int i = 0; i < g_brancharray.GetSize() - 1; i++) { if (branch == g_brancharray.ElementAt(i).ElementAt(0)) { return _T("\\") + g_brancharray.ElementAt(i).ElementAt(2); } } return _T(""); } CTime GetTmFromStr(CString date) { try { CTime tm(_ttoi(date.Mid(0, 4)), _ttoi(date.Mid(5, 2)), _ttoi(date.Mid(8, 2)), 0, 0, 0); CString ss; ss.Format(_T("%d-%d-%d"), tm.GetYear(), tm.GetMonth(), tm.GetDay()); return tm; } catch (...) { date = _T("1980-01-01"); CTime tm(_ttoi(date.Mid(0, 4)), _ttoi(date.Mid(5, 2)), _ttoi(date.Mid(8, 2)), 0, 0, 0); return tm; } } #endif #if JEFF_CODE // const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) // { // if ( dst != NULL) // { // dst[0] = 0; // if (af == AF_INET) // { // sockaddr_in in; // memset(&in, 0, sizeof(in)); // in.sin_family = AF_INET; // memcpy(&in.sin_addr, src, sizeof(in_addr)); // getnameinfo((sockaddr *)&in, sizeof(sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST); // return dst; // } // else if (af == AF_INET6) // { // sockaddr_in6 in; // memset(&in, 0, sizeof(in)); // in.sin6_family = AF_INET6; // memcpy(&in.sin6_addr, src, sizeof(in6_addr)); // getnameinfo((sockaddr *)&in, sizeof(sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST); // return dst; // } // } // WSASetLastError(WSA_INVALID_PARAMETER); // return dst; // } //************************************// // 数据库地址; // 数据库端口; // 数据库管理员账号; // 数据库管理员密码; // 数据库名称; // // [函数]:GetIniInfo // [描述]:获取指定ini信息; // [参数]: // szPath:ini所在目录; // szIniName:ini名; // [返回]:void //************************************// int GetSysIniInfo(const char *szPath, const char *szIniName) { TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szFna[_MAX_DIR] = { 0 }; TCHAR szExt[_MAX_DIR] = { 0 }; ::GetModuleFileName(NULL, g_szModuleFileName, sizeof(g_szModuleFileName) / sizeof(TCHAR)); _stprintf_s(g_szModulePath, _T("%s"), g_szModuleFileName); _tsplitpath_s(g_szModulePath, szDrive, szDir, szFna, szExt); _tcscpy_s(g_szModulePath, szDrive); _tcscat_s(g_szModulePath, szDir); // -----------------------------------------------------// TCHAR szFile[MAX_PATH + 1] = _T(""); if (szPath != NULL && szIniName != NULL) _stprintf_s(szFile, _T("%s\\%s"), szPath, szIniName); else _stprintf_s(szFile, _T("%s\\ServiceInfo.ini"), g_szModulePath); TRACE("szFile =%s\n", szFile); HANDLE hFile = CreateFile(szFile, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL); if (ERROR_FILE_NOT_FOUND == GetLastError()) { // 如果没找到,使用默认连接; _tcscpy_s(g_szHostComputerIP, _T(".")); g_dwTCPChatPort = 5678; return -1; } // 获取数据库信息; GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, szFile); g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, szFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbAccount"), _T(""), g_szDBAccount, MAX_PATH, szFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, szFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, szFile); if (g_dwDBServerPort != 0) _stprintf_s(g_szConnectString, _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s"), g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord); else _stprintf_s(g_szConnectString, _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s"), g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord); // 获取服务器信息; GetPrivateProfileString(_T("NetWorkInfo"), _T("ServerName"), _T(""), g_szHostComputerIP, MAX_PATH, szFile); g_dwTCPChatPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 0, szFile); g_dwTCPFilePort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPFilePort"), 0, szFile); // 获取利亚方舟服务器信息; GetPrivateProfileString(_T("NetWorkInfo"), _T("SMSServerName"), _T(""), g_szSMSServer, MAX_PATH, szFile); g_dwTCPSMSPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPSMSPort"), 0, szFile); return 0; } //int MyFindPort_2(int start, BYTE *InByte, int InLen, char *OutPath) int MyFindPort_2(int start, CONST int &nIndex, int InLen, char *OutPath) { int n; int ret; int nValues[8]; double lfValues[8]; CHAR s0[50] = "", s1[50] = "", s2[50] = "", s3[50] = "", s4[50] = "", s5[50] = "", s6[50] = "", s7[50] = ""; CHAR KeyPath[MAX_PATH] = ""; //查找系统上所有的锁; for (n = 0; n < 256; n++) { ZeroMemory(KeyPath, sizeof(KeyPath)); ret = FindPort(n, KeyPath); if (ret != 0 && n == 0)return -1053;//表示系统上没有任何智能锁; if (ret != 0)return ret; //使用该设备路径锁进行运算; ret = CalEx((BYTE*)&g_byShotVersion[nIndex], InLen, &nValues[0], &nValues[1], &nValues[2], &nValues[3], &nValues[4], &nValues[5], &nValues[6], &nValues[7], &lfValues[0], &lfValues[1], &lfValues[2], &lfValues[3], &lfValues[4], &lfValues[5], &lfValues[6], &lfValues[7], s0, s1, s2, s3, s4, s5, s6, s7, KeyPath, 2000); //如果正确,则返回该设备路径供以后使用; if (ret == -63) return ret; if ((ret == 0) && (nValues[0] == 123)) { // 找到加密狗,判断是否注册了医院跟踪功能; g_nVersion = nIndex; memset(nValues,0,8*sizeof(int)); memset(lfValues, 0, 8 * sizeof(double)); memset(s0, 0, 50 * sizeof(CHAR)); memset(s1, 0, 50 * sizeof(CHAR)); memset(s2, 0, 50 * sizeof(CHAR)); memset(s3, 0, 50 * sizeof(CHAR)); memset(s4, 0, 50 * sizeof(CHAR)); memset(s5, 0, 50 * sizeof(CHAR)); memset(s6, 0, 50 * sizeof(CHAR)); memset(s7, 0, 50 * sizeof(CHAR)); ret = CalEx((BYTE*)&g_byCalExVersion[nIndex], 114, &nValues[0], &nValues[1], &nValues[2], &nValues[3], &nValues[4], &nValues[5], &nValues[6], &nValues[7], &lfValues[0], &lfValues[1], &lfValues[2], &lfValues[3], &lfValues[4], &lfValues[5], &lfValues[6], &lfValues[7], s0, s1, s2, s3, s4, s5, s6, s7, KeyPath, 2000); if (ret == 0 || ret == -43) { g_bSoftWareReg = atoi(s2); if (g_bSoftWareReg) { } } return 0; } } return -53; } int GetSoftWareVersion() { int nRet = 0; CHAR szUSBKeyPath[MAX_PATH] = ""; for (int i(0); i < 6; i++) { //nRet = MyFindPort_2(0, g_byShotVersion[i], 10, szUSBKeyPath); nRet = MyFindPort_2(0, i, 10, szUSBKeyPath); if (nRet == 0) { //g_nVersion = i; break; } } return g_nVersion; } //---------------------------------------------------------- // 函数:IsFileExist // 描述:判断某文件是否存在; // 参数: // pFileFullName: 指定的文件名; // 返回:TRUE表示文件存在; //---------------------------------------------------------- BOOL IsFileExist(const TCHAR *pFileFullName) { int err = 0; // Check for existence. if ((err = _taccess(pFileFullName, 0)) == 0) { //printf_s( "File crt_access_s.c exists.\n" ); // Check for write permission. if ((err = _taccess(pFileFullName, 2)) == 0) { //printf_s( "File crt_access_s.c does have ""write permission.\n" ); } else { //printf_s( "File crt_access_s.c does not have ""write permission.\n" ); } } else { //printf_s( "File crt_access_s.c does not exist.\n" ); return FALSE; } return TRUE; } inline int MultiByteLengthConvertToWideCharLength(/*LPCSTR*/LPCCH lpString) { return MultiByteToWideChar(CP_ACP, 0, lpString, -1, NULL, 0); } // Jeff.注册控件函数;2014.09.11 //---------------------------------------------------------- // 函数:RegisterOcx // 描述:注册指定的组件文件; // 参数:ocxfile指定要注册的组件文件名; // 返回:TRUE表示注册成功; //---------------------------------------------------------- BOOL RegisterOcx(LPCTSTR ocxfile) { HKEY hKey; bool bRet; USES_CONVERSION; ITypeLib* pTypeLib; CString CLSIDStr; CLSID clsid; LPOLESTR wRes = NULL; #ifdef UNICODE if (LoadTypeLib(ocxfile, &pTypeLib) == S_OK) #else if (LoadTypeLib(T2OLE(ocxfile), &pTypeLib) == S_OK) #endif { TLIBATTR tlibAttr, *ptlibAttr; ptlibAttr = &tlibAttr; pTypeLib->GetLibAttr(&ptlibAttr); clsid = ptlibAttr->guid; pTypeLib->Release(); } ::StringFromCLSID(clsid, &wRes); CLSIDStr = OLE2CT(wRes); if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID\\") + CLSIDStr, 0, KEY_READ, &hKey) == ERROR_SUCCESS) || (RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("Wow6432Node\\TypeLib\\") + CLSIDStr, 0, KEY_READ, &hKey) == ERROR_SUCCESS)) { return true; } else { HINSTANCE hLib = LoadLibrary(ocxfile); if (hLib < (HINSTANCE)HINSTANCE_ERROR) { MessageBox(0, _T("权限不足,不能载入OCX文件!无法注册控件!"), _T("结果"), MB_OK); bRet = false; } else { FARPROC lpDllEntryPoint; lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer"); if (lpDllEntryPoint != NULL) { if (FAILED((*lpDllEntryPoint)())) { MessageBox(0, _T("调用注册函数(DllRegisterServer)失败!无法注册控件!"), _T("结果"), MB_OK); bRet = false; } else bRet = true; } else { MessageBox(0, _T("调用注册函数(DllRegisterServer)失败!无法注册控件!"), _T("结果"), MB_OK); bRet = false; } } FreeLibrary(hLib); return bRet; } } // Jeff.Hacker. WINDOWS NT 以上的内核需要提权,才能对系统进行高级管理; //---------------------------------------------------------- // 函数:GetDebugPriv // 描述:对程序提权; // 参数: // 返回:TRUE表示程序提权成功; //---------------------------------------------------------- BOOL GetDebugPriv() { // 返回的访问令牌指针; HANDLE hToken; // 接收所返回的制定特权名称的信息; LUID sedebugnameValue; // 新特权信息的指针(结构体); TOKEN_PRIVILEGES tkp; DWORD dwCurProcId = GetCurrentProcessId(); // 要修改访问权限的进程句柄; HANDLE hCurProc; hCurProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwCurProcId); if (!::OpenProcessToken(hCurProc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { ShowSystemErrorInfo(CString("提权OpenProcessToken失败。"), GetLastError()); return FALSE; } if (!::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) { ShowSystemErrorInfo(CString("提权LookupPrivilegeValue失败。"), GetLastError()); CloseHandle(hToken); return FALSE; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!::AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL)) { ShowSystemErrorInfo(CString("提权AdjustTokenPrivileges失败。"), GetLastError()); CloseHandle(hToken); return FALSE; } CloseHandle(hCurProc); CloseHandle(hToken); return TRUE; } //---------------------------------------------------------- // 函数:GetFileVersion // 描述:获取指定模块的文件版本信息 // 参数: // hModule: 指定的模块(如果为NULL,表示获取自身文件版本信息); // pBuffer: 返回的文件版本信息; // // 返回:TRUE表示获取模块文件版本信息成功; //---------------------------------------------------------- bool GetFileVersion(HMODULE hModule, WORD *pBuffer) { TCHAR fname[MAX_PATH]; VS_FIXEDFILEINFO *pVi; DWORD dwHandle; std::string str; if (::GetModuleFileName(hModule, fname, MAX_PATH)) { int size = GetFileVersionInfoSize(fname, &dwHandle); if (size > 0) { BYTE *buffer = new BYTE[size]; memset(buffer, 0, size); if (GetFileVersionInfo(fname, dwHandle, size, buffer)) { if (VerQueryValue(buffer, _T("\\"), (LPVOID *)&pVi, (PUINT)&size)) { pBuffer[0] = HIWORD(pVi->dwFileVersionMS); pBuffer[1] = LOWORD(pVi->dwFileVersionMS); pBuffer[2] = HIWORD(pVi->dwFileVersionLS); pBuffer[3] = LOWORD(pVi->dwFileVersionLS); delete buffer; return true; } } delete buffer; } } return false; } //---------------------------------------------------------- // 函数:CheckInternalIP // 描述:判断IP(网络字节序)地址是否为外网地址; // 参数:ip_addr:主机IP(必须为网络字节序); // // 返回:TRUE表示主机IP为外网IP; FALSE表示内网IP; //---------------------------------------------------------- BOOL CheckInternalIPV4(const unsigned int &ip_addr) { // 三段保留IP段,做为私有地址,不在在公网上使用,只作内网IP; // A类:10.0.0.0 ~ 10.255.255.255 = 0A.00.00.00 ~ 0A.FF.FF.FF // B类:172.16.0.0 ~ 172.31.255.255 = AC.10.00.00 ~ AC.1F.FF.FF // C类:192.168.0.0 ~ 192.168.255.255 = C0.A8.00.00 ~ C0.A8.FF.FF // D类:127.0.0.0 ~ 127.255.255.255 = 7F.00.00.00 ! 7F.FF.FF.FF (环回地址) #if 0 //检查3类地址是否属于公网; if ((ip_addr >= 0x0A000000 && ip_addr <= 0x0AFFFFFF) || (ip_addr >= 0xAC100000 && ip_addr <= 0xAC1FFFFF) || (ip_addr >= 0xC0A80000 && ip_addr <= 0xC0A8FFFF) ) { return FALSE; } return TRUE; #endif #if 0 //检查3类地址是否属于内网; // 0xa -- "10.0.0.0">>24; // 0xc0a8--"192.168.0.0.">>16; // 0x2b0--"127.17.0.1">>22 if ((ip_addr >> 24 == 0xa) || (ip_addr >> 16 == 0xc0a8) || (ip_addr >> 22 == 0x2b0)) return FALSE; else return TRUE; #endif #if 1 // 回环地址也算进去! if ((ip_addr >> 24 == 0x0A) || (ip_addr >> 20 == 0xAC1) || (ip_addr >> 16 == 0xC0A8) || (ip_addr >> 26 == 0x7)) return FALSE; else return TRUE; #endif } //---------------------------------------------------------- // 函数:IsValidIPV4 // 描述:判断字符串是否是有效的IPV4; // 参数:szIP:主机IP; // // 返回:TRUE表示字符串为有效的IPV4; //---------------------------------------------------------- BOOL IsValidIPV4(const TCHAR *szIP) { int nIndex = 0; int nPointCount = 0; // "."IPV4有3个; int nLen = _tcslen(szIP); for (int i = 0; i < nLen; i++) { if (szIP[i] == '.') { if (i == 0 || i == nLen - 1) { return FALSE; } else { if (++nIndex != i) { nIndex = i; nPointCount++; } else return FALSE; } continue; } if (isdigit(szIP[i]) == 0) return FALSE; } if (nPointCount != 3) return FALSE; return TRUE; } //---------------------------------------------------------- // 函数:GetHostAllOfIP // 描述:返回指定主机名称的所有IPV4地址; // 参数: // pHostName: 主机名; // vtHostIPV4:指定主机名的所有IPV4地址; // // 返回:TRUE表示字符串为有效的IPV4; //---------------------------------------------------------- int GetHostAllOfIP(const TCHAR *pHostName, std::vector &vtHostIPV4) { #if 0 WSADATA wsa = { 0 }; WSAStartup(MAKEWORD(2, 2), &wsa); #endif #if 0 // YLGL项目使用不了,因为包含了旧的系统头文件; addrinfo hint, *answer, *curr; memset(&hint, 0, sizeof(addrinfo)); hint.ai_family = AF_INET; hint.ai_socktype = SOCK_STREAM; int nRet = GetAddrInfo(pHostName, NULL, &hint, &answer); //int nRet = GetAddrInfo(pHostName, "5678", &hint, &answer); if (nRet != 0) { DWORD dwError = GetLastError(); return; } TCHAR szIP[MAX_PATH]; for (curr = answer; curr != NULL; curr = curr->ai_next) { //std::string ipstr; memset(szIP, 0, MAX_PATH); inet_ntop(AF_INET, &(((sockaddr_in*)(curr->ai_addr))->sin_addr), szIP, MAX_PATH); vtHostIPV4.push_back(szIP); } freeaddrinfo(answer); #endif return 0; } WCHAR* GetIPbyHostName(LPCCH lpHostname) { #if 0 addrinfo *ailist, *aip; addrinfo hint; sockaddr_in *sinp; //char *hostname = "luoyedeshan"; /* 这是我的用户名 */ CHAR buf[INET_ADDRSTRLEN]; //char *server = "3294"; /* 这是服务端口号 */ CONST CHAR *pIPAddr = NULL; int ilRc; hint.ai_family = AF_INET; /* hint 的限定设置 */ hint.ai_socktype = 0; /* 这里可是设置 socket type . 比如 SOCK——DGRAM */ hint.ai_flags = AI_PASSIVE; /* flags 的标志很多 。常用的有AI_CANONNAME; */ hint.ai_protocol = 0; /* 设置协议 一般为0,默认 */ hint.ai_addrlen = 0; /* 下面不可以设置,为0,或者为NULL */ hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; ilRc = getaddrinfo(lpHostname, NULL/*server*/, &hint, &ailist); if (ilRc != 0) { CHAR str_error[100]; strcpy_s(str_error, gai_strerrorA(errno)); printf("str_error = %s", str_error); return NULL; } for (aip = ailist; aip != NULL; aip = aip->ai_next) /* 显示获取的信息 */ { sinp = (sockaddr_in *)aip->ai_addr; /* 为什么是for 循环 ,先向下看 */ pIPAddr = inet_ntop(AF_INET, &sinp->sin_addr, buf, INET_ADDRSTRLEN); // printf(" addr = %s", pIPAddr ? pIPAddr : "unknow "); // printf("port = %d ", ntohs(sinp->sin_port)); // printf(" \n"); } int nwlen = MultiByteToWideChar(CP_ACP, 0, pIPAddr, -1, NULL, 0); WCHAR *ptIP = new WCHAR[nwlen]; MultiByteToWideChar(CP_ACP, 0, pIPAddr, -1, ptIP, nwlen); return ptIP; #endif return _T(""); } int IsExistFolder(CONST TCHAR *szPath)//可判断文件夹和文件的存在; { if ((_taccess(szPath, 0)) != -1) { //printf("Jeff:File %s \t exists \n",szPath ); /* Check for write permission */ if ((_taccess(szPath, 2)) != -1) { //printf("Jeff:File %s \t has write permission \n",szPath ); CString str; str.Format(_T("共享文件夹<%s>: 存在!\n"), szPath); WriteClientLog(str); return 1; } // else // 只能判断文件权限,不能判断目录; // { // CString str; // str.Format("共享文件夹<%s>:\t存在,不可写!■■■■■■■\n",szPath); // WriteClientLog(str); // // return 0; // } } else { //printf("Jeff:\t File %s no exists \n",szPath ); CString str; str.Format(_T("◆共享文件夹<%s>: 不存在,请设置共享或访问权限!◆\n"), szPath); WriteClientLog(str); return -1; } return 0; } //--------------------------------------------------------------------- // add by Jeff 2014.10.24 // 函数:全局函数lyfzCopyFileEx // 描述:文件复制。 // 参数: // lpExistingFileName:你要拷贝的源文件名; // lpNewFileName: 你要拷贝的目标文件名; // bFailIfExists: 如果目标已经存在,不拷贝(True)并重命名,覆盖目标(false) // 返回:与CopyFile返回一致; //--------------------------------------------------------------------- BOOL lyfzCopyFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, const BOOL &bFailIfExists) { // 1.如果是覆盖选项; if (!bFailIfExists) return CopyFile(lpExistingFileName, lpNewFileName, bFailIfExists); // 2.如果不是覆盖选项; TCHAR szNewFileName[_MAX_PATH] = { 0 }; TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szFna[_MAX_FNAME] = { 0 }; TCHAR szExt[_MAX_EXT] = { 0 }; _stprintf_s(szNewFileName, _T("%s"), lpNewFileName); _tsplitpath_s(szNewFileName, szDrive, szDir, szFna, szExt); int nIndex = 1; while (PathFileExists(szNewFileName)) { _stprintf_s(szNewFileName, _T("%s%s%s (%d)%s"), szDrive, szDir, szFna, nIndex++, szExt); } return CopyFile(lpExistingFileName, szNewFileName, bFailIfExists); } //--------------------------------------------------------------------- // add by Jeff 2014.10.24 // 函数:全局函数lyfzImportImage,多字节版本,非UNICODE // 描述:导入图片。 // 参数: // lpDestDirectory: 文件导入的目标目录; // strArrayOfImage: 要导入的图片文件数组; // bFailIfExists: 如果目标已经存在,不拷贝(True)并重命名,覆盖目标(false) // 返回: // // 说明:在调用lyfzImportImage前,需要对传递的参数进行有效性验证 // 1.验证形参lpDestDirectory对应的实参是否是有效的目录(有无创建目录的非法字符存在) // 2.验证形参strArrayOfImage对应的实参数组是否大于0; // 如果校验没有通过,应该拒绝调lyfzImportImage,以防止错误产生。 //--------------------------------------------------------------------- void lyfzImportImage(LPCTSTR lpDestDirectory, CStringArray &strArrayOfImage, const BOOL &bFailIfExists) { // 传递给lyfzCreateDirectory的参数规范化; int nlen = _tcslen(lpDestDirectory); TCHAR szNewFileName[_MAX_PATH] = { 0 }; TCHAR szTempDirectory[_MAX_PATH] = { 0 }; if (lpDestDirectory[nlen - 1] != '\\') _stprintf_s(szTempDirectory, _T("%s\\"), lpDestDirectory); else _stprintf_s(szTempDirectory, _T("%s"), lpDestDirectory); // 若目录或子目录不存在创建; lyfzCreateDirectory(szTempDirectory); // 遍历复制; CString strImage; INT_PTR nSize = strArrayOfImage.GetSize(); for (INT_PTR i = 0; i < nSize; i++) { strImage = strArrayOfImage.ElementAt(i); strImage = strImage.Mid(strImage.ReverseFind('\\') + 1); //strImage = strImage.Left(strImage.ReverseFind('.')); _stprintf_s(szNewFileName, _T("%s%s"), szTempDirectory, strImage); lyfzCopyFileEx(szNewFileName, strArrayOfImage.ElementAt(i), bFailIfExists); } } //--------------------------------------------------------------------- // add by Jeff 2014.10.25 // 函数:全局函数lyfzCreateDirectory,多字节版本,非UNICODE // 描述:创建目录及子目录文件夹; // 参数: // lpDestDirectory:目录,必须是"E:\lyfzdb\数据\"格式,目录最后必须有"\",否则最后一个子目录无法创建! // 建议使用系统_tsplitpath来分隔目录,这样会保存最后一个"\"斜杠; // 返回:成功创建返回TRUE; //--------------------------------------------------------------------- BOOL lyfzCreateDirectory(LPCTSTR lpDestDirectory) { BOOL bExists = FALSE; TCHAR szNewFileName[_MAX_PATH] = { 0 }; TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szFna[_MAX_FNAME] = { 0 }; TCHAR szExt[_MAX_EXT] = { 0 }; int nIndex = 0; do { bExists = PathFileExists(lpDestDirectory); if (!bExists) { memset(szDrive, 0, _MAX_DRIVE); memset(szDir, 0, _MAX_DIR); memset(szFna, 0, _MAX_FNAME); memset(szExt, 0, _MAX_EXT); lyfzSplitpath(lpDestDirectory, szDrive, szDir, ++nIndex); _stprintf_s(szNewFileName, _T("%s%s"), szDrive, szDir); CreateDirectory(szNewFileName, NULL); //if (FALSE == CreateDirectory(szNewFileName, NULL)) //{ //ShowSystemErrorInfo(CString("创建目录出错。"), GetLastError()); //return FALSE; // continue; //} } } while (!bExists); return TRUE; } //--------------------------------------------------------------------- // add by Jeff 2014.10.24 // 函数:全局函数tSplitpath,多字节版本,非UNICODE // 描述:类系统Windows C++运行库函数_tsplitpath。 // 参数: // // 返回: //--------------------------------------------------------------------- void lyfzSplitpath(const TCHAR *path, TCHAR *drive, TCHAR *dir, const int &nTimes) { int nlen = _tcslen(path); int i = 0; int npoint = 0; // '.' int nsprit = 0; // '\\' int ncolon = 0; // ':' int ntimes = -1; while (nlen > i++) { if (path[i] == ':') ncolon = i; else if (path[i] == '\\') { if (nTimes == ntimes++) break; nsprit = i; } } memcpy(drive, path, ncolon + 1); memcpy(dir, &path[ncolon + 1], nsprit - ncolon); } //--------------------------------------------------------------------- // Jeff add 2014.06.23; // 函数:ShowErrorInfo // 描述: // 参数: // lpszFunction:函数名; // dwError:错误码; // 返回: //--------------------------------------------------------------------- void ShowSystemErrorInfo(CString &strDescription, const DWORD &dwError) { LPVOID lpMsgBuf; BOOL fOk = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); if (!fOk) { // Is it a network-related error? HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES); if (hDll != NULL) { FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, hDll, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPTSTR)&lpMsgBuf, 0, NULL); FreeLibrary(hDll); } } if (lpMsgBuf != NULL) { CString strDisplay; strDisplay.Format(_T("%s.错误码=%d,Windows描述:%s"), strDescription, dwError, (PCTSTR)LocalLock(lpMsgBuf)); //WriteLogin(strDisplay); AfxMessageBox(strDisplay); LocalFree(lpMsgBuf); } else { //WriteLogin(strDescription); AfxMessageBox(_T("未知道错误")); } } CString GetLastErrorInfo(CONST DWORD &dwError) { LPVOID lpMsgBuf; BOOL fOk = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); if (!fOk) { // Is it a network-related error? HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES); if (hDll != NULL) { FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, hDll, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPTSTR)&lpMsgBuf, 0, NULL); FreeLibrary(hDll); } } CString strErrorInfo = _T(""); if (lpMsgBuf != NULL) { strErrorInfo.Format(_T("错误码=%d,Windows描述:%s"), dwError, (PCTSTR)LocalLock(lpMsgBuf)); LocalFree(lpMsgBuf); } else { strErrorInfo = _T("未知道错误"); } return strErrorInfo; } //--------------------------------------------------------------------- // Jeff add 2014.06.23; // 函数:WriteClientLog // 描述:写客户端程序日志。 // 参数: // str:日志内容; // 返回: // 非线程安全!而且写速度超慢,会造成死等现象!在线程运行速度极快的情况下,死等! //--------------------------------------------------------------------- void WriteClientLog(const CString &strLogContent) { try { CStdioFile fp; //CString path = g_mainpath + _T("\\新短信日志.txt"); CString path; path.Format(_T("%sSMS短信日志.txt"),g_szModulePath); if (PathFileExists(path)) { if (fp.Open(path, CFile::modeWrite) == FALSE) { return; } ULONGLONG length = fp.GetLength(); if (length > 1 * 1024 * 1024) { fp.Close(); ::DeleteFile(path); return; } fp.SeekToEnd(); } else fp.Open(path, CFile::modeCreate | CFile::modeWrite); char* old_locale = _strdup(setlocale(LC_CTYPE, NULL)); setlocale(LC_CTYPE, "chs");//设定 // WriteString在UNICODE下无法写中文,需要setlocale语言区域; fp.WriteString((CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")) + _T(" ") + strLogContent + _T("\n"))); setlocale(LC_CTYPE, old_locale); free(old_locale);//还原区域设定 fp.Close(); } catch (CException *e) { e->ReportError(); e->Delete(); } } //--------------------------------------------------------------------- // add by Jeff 2014.10.27 // 函数:全局函数IsDirectoryLegitimate,多字节版本,非UNICODE // 描述:判断一个目录路径字符串,是否属于合法的、可创建的目录路径。 // 参数:strDirectory 被验证的路径字符串; // // 返回:合法路径返回TRUE; //--------------------------------------------------------------------- BOOL IsDirectoryLegitimate(const CString &strDirectory) { if (strDirectory.Find('/') != -1 || strDirectory.Find('\\') != -1 || strDirectory.Find(':') != -1 || strDirectory.Find('*') != -1 || strDirectory.Find('?') != -1 || strDirectory.Find('\"') != -1 || strDirectory.Find('>') != -1 || strDirectory.Find('<') != -1 || strDirectory.Find('|') != -1 ) return FALSE; return TRUE; } //---------------------------------------------------------------------- // remark by Jeff 2014.11.08 // 函数:ExportCutImageToFile // 描述:导出裁剪图片到指定目录; // 参数: // lpOrderCutImageInfo:订单号的裁剪相片信息; // lpSrcDirectory:原图片路径; // lpOrderCutImageInfo格式:相片名|裁剪方案|原片宽|原片高|裁剪left|裁剪top|裁剪bottom|裁剪rigth // 225:5X7,1440,900,88,0,1352,900;228:5X7,1440,900,88,0,1352,900;224:5X7,1440,900,88,0,1352,900;227:10寸,1440,900,56,0,1384,900;229:10寸水晶,1440,900,570,232,870,671; // lpSaveDirectory:导出相片的保存路径; // 返回:无 //---------------------------------------------------------------------- void ExportCutImageToFile(LPCTSTR lpOrderCutImageInfo, LPCTSTR lpSrcDirectory, LPCTSTR lpSaveDirectory) { if (FALSE == lyfzCreateDirectory(lpSaveDirectory)) return; CStringArray saSrcPhoto; GetCountOfOrderFolderPhotoFile(lpSrcDirectory, saSrcPhoto); CString strImageName; // 相片名; CString strCutScheme; // 裁剪方案; CRect rtCut; // 要裁剪的区域; CString strTemp; CString strImageInfo(lpOrderCutImageInfo); int nIndex = -1; do { // 225:5X7,1440,900,88,0,1352,900; nIndex = strImageInfo.Find(';'); strTemp = strImageInfo.Left(nIndex); strImageInfo = strImageInfo.Mid(nIndex + 1); int SrcImageWid; int SrcImageHei; int ntempIndex = -1; if (nIndex != -1) { if (FALSE == AnalysisImagInfo(saSrcPhoto, lpSrcDirectory, lpSaveDirectory, strTemp, strImageName, strCutScheme, rtCut)) continue; } else { if (strImageInfo.IsEmpty()) break; AnalysisImagInfo(saSrcPhoto, lpSrcDirectory, lpSaveDirectory, strImageInfo, strImageName, strCutScheme, rtCut); break; } } while (nIndex != -1); } //---------------------------------------------------------------------- // remark by Jeff 2014.11.08 // 函数:AnalysisImagInfo // 描述:导出裁剪图片到指定目录; // 参数: // lpOrderCutImageInfo:订单号的裁剪相片信息; // lpSrcDirectory:原图片路径; // lpOrderCutImageInfo格式:相片名|裁剪方案|原片宽|原片高|裁剪left|裁剪top|裁剪bottom|裁剪rigth // 225:5X7,1440,900,88,0,1352,900; // lpSaveDirectory:导出相片的保存路径; // 返回:无 // // 说明:未对图片进行缩小,直接在原片上裁剪而得。 //---------------------------------------------------------------------- BOOL AnalysisImagInfo(CStringArray &saSrcPhoto, LPCTSTR lpSrcDirectory, LPCTSTR lpSaveDirectory, CString &strImageInfo, CString &strImageName, CString &strCutScheme, CRect &rtCut) { int ntempIndex = -1; strImageName = strImageInfo.Left(3); // 裁剪相片名; strImageInfo.Delete(0, 4); CString strSrcImagePath; BOOL bExist = FALSE; for (int i = 0; i < saSrcPhoto.GetSize(); i++) { CString strTemp = saSrcPhoto.ElementAt(i); strSrcImagePath = strTemp; TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szFna[_MAX_DIR] = { 0 }; TCHAR szExt[_MAX_DIR] = { 0 }; //_tsplitpath_s((LPTSTR)saSrcPhoto.ElementAt(i), szDrive, szDir, (LPTSTR)strTemp, szExt); //strTemp.ReleaseBuffer(); _tsplitpath_s(szDrive, szDrive, szDir, szFna, szExt); if (strTemp == strImageName) { bExist = TRUE; //saSrcPhoto.RemoveAt(i); break; } } if (FALSE == bExist) return FALSE; ntempIndex = strImageInfo.Find(','); strCutScheme = strImageInfo.Left(ntempIndex); // 裁剪方案; strImageInfo.Delete(0, ntempIndex + 1); // 裁剪原图宽; ntempIndex = strImageInfo.Find(','); LONG SrcImageWid = _ttol(strImageInfo.Left(ntempIndex)); strImageInfo.Delete(0, ntempIndex + 1); // 裁剪原图高; ntempIndex = strImageInfo.Find(','); LONG SrcImageHei = _ttol(strImageInfo.Left(ntempIndex)); strImageInfo.Delete(0, ntempIndex + 1); // left坐标值; ntempIndex = strImageInfo.Find(','); rtCut.left = _ttol(strImageInfo.Left(ntempIndex)); strImageInfo.Delete(0, ntempIndex + 1); // top坐标; ntempIndex = strImageInfo.Find(','); rtCut.top = _ttol(strImageInfo.Left(ntempIndex)); strImageInfo.Delete(0, ntempIndex + 1); // right坐标; ntempIndex = strImageInfo.Find(','); rtCut.right = _ttol(strImageInfo.Left(ntempIndex)); strImageInfo.Delete(0, ntempIndex + 1); // bottom坐标; rtCut.bottom = _ttol(strImageInfo.Left(ntempIndex)); // 导出裁剪相片到指定目录; // 1.加载原图; Image *SrcImage = NULL; //if (FALSE == PathFileExists(CString(lpSrcDirectory + strImageName + _T(".jpg")))) if (FALSE == PathFileExists(strSrcImagePath)) { AfxMessageBox(_T("相片源文件不存在")); return FALSE; } //LoadImageFromBuf(&SrcImage, CString(lpSrcDirectory + strImageName + _T(".jpg"))); LoadImageFromBuf(&SrcImage, strSrcImagePath); if (SrcImage == NULL) { AfxMessageBox(_T("加载源图片失败")); return FALSE; } int orientation = GetOrientation(SrcImage); if (orientation == 8) SrcImage->RotateFlip(Rotate270FlipNone); else if (orientation == 6) SrcImage->RotateFlip(Rotate90FlipNone); if (SrcImage->GetWidth() == 0) return FALSE; float scale = 1.0; scale *= (float)SrcImage->GetWidth() / (float)SrcImageWid; rtCut.left *= scale; rtCut.right *= scale; rtCut.top *= scale; rtCut.bottom *= scale; #if 0 // 保存在原图上画裁剪区域; Graphics graph(SrcImage); Pen blackPen(Color(255, 255, 0, 0), 1); graph.DrawRectangle(&blackPen, rtCut.left, rtCut.top, rtCut.Width(), rtCut.Height()); SaveImageToFile(SrcImage, CString(lpSaveDirectory + strImageName + _T(".jpg"))); delete SrcImage; #else // 直接保存裁剪后的图片; Bitmap bp(rtCut.Width(), rtCut.Height()); Graphics *graphic = Graphics::FromImage(&bp); graphic->Clear(Color(255, 255, 255, 255)); graphic->SetInterpolationMode(InterpolationModeHighQualityBicubic); graphic->SetSmoothingMode(SmoothingModeHighQuality);//SmoothingModeHighSpeed graphic->SetPixelOffsetMode(PixelOffsetModeHighQuality); graphic->SetCompositingMode(CompositingModeSourceOver); graphic->SetCompositingQuality(CompositingQualityHighQuality); graphic->SetTextRenderingHint(TextRenderingHintAntiAliasGridFit); graphic->DrawImage(SrcImage, RectF(0, 0, rtCut.Width(), rtCut.Height()), rtCut.left, rtCut.top, rtCut.Width(), rtCut.Height(), UnitPixel); delete SrcImage; //delete graphic; //CString strSave; //strSave.Format("%s%s:%s.jpg", lpSaveDirectory,strImageName,strCutScheme); //SaveImageToFile(&bp, strSave); SaveImageToFile(&bp, CString(lpSaveDirectory + strImageName + _T(":") + strCutScheme + _T(".jpg"))); #endif return TRUE; } // 相片后缀:jpg、raw、cr2、NEF 四种常用后缀 //-------------------------------------------------------------------------------- // Remark by Jeff 2014.11.10 // 函数:GetCountOfOrderFolderPhotoFile // 描述:获取订单文件夹下所有相片文件,不含"m"和"s"开头的小图; // 参数:pOrderFolder:订单文件路径; // 返回: // //-------------------------------------------------------------------------------- int GetCountOfOrderFolderPhotoFile(__in const TCHAR *pOrderFolder, __out CStringArray &StrPhotoArray) { CStringArray StrSubFoloderArray; using namespace helper_coffs; ffsco o; o.dirs(1); // Jeff.1:查找子目录; o.find(LPCTSTR(pOrderFolder), LPCTSTR(_T("*.*"))); // 可能存在m和s开头的缩略图,需要过滤掉; if (o.count() == 0) return 0; // 获取子目录数; ffsco::typeT coo; ffsco::typeT::iterator it; coo = o.co_dir(); for (it = coo.begin(); it != coo.end(); it++) { if (FindArray(&StrSubFoloderArray, (*it).c_str()) == -1) StrSubFoloderArray.Add((*it).c_str()); } int nIndex = -1; CString strOrderNumberImage; // 获取子目录下的文件数; //CStringArray StrPhotoArray; for (int n = 0; n < StrSubFoloderArray.GetSize(); n++) { ffsco op; op.dirs(0); op.find(LPCTSTR(StrSubFoloderArray.ElementAt(n)), LPCTSTR(_T("*.jpg"))); ffsco::typeT coo; ffsco::typeT::iterator itp; coo = op.co_file(); for (itp = coo.begin(); itp != coo.end(); itp++) { strOrderNumberImage = (*itp).c_str(); nIndex = strOrderNumberImage.ReverseFind('\\'); strOrderNumberImage = strOrderNumberImage.Right(strOrderNumberImage.GetLength() - nIndex - 1); if (strOrderNumberImage.Left(1) != _T("m") && strOrderNumberImage.Left(1) != _T("s")) { StrPhotoArray.Add((*itp).c_str()); } } } return 0; } //------------------------------------------------------------------------ // Remark by Jeff;2014-09-21 // 函数:GetCount // 描述:获取指定短信内容的字符数(不是字节数); // 参数:content 短信内容; // 返回:短信内容字符数; // //------------------------------------------------------------------------ #define MSG_LENGTH 64 int GetTextMsgCount(CONST CString &strContent) { int nNumberOfTextMsg = 0; #ifdef UNICODE int nWCharLen = strContent.GetLength(); #else int nWCharLen = MultiByteToWideChar(CP_ACP, 0, strContent, -1, NULL, 0); // Jeff.无论constent是否空,MultiByteToWideChar返回结果都>=1; #endif // 魔数MSG_LENGTH = 67: // 当短信字符数超过70时,短信服务商会分为两部分; // 1.将前67个字符为一条短信; // 2.将67后的为另一部分,若仍大于70,再次执行1; // 3.若短信小于等于70,则为一条短信; nNumberOfTextMsg = nWCharLen / MSG_LENGTH; if (nNumberOfTextMsg == 0) return 1; if (nWCharLen % MSG_LENGTH > 2) ++nNumberOfTextMsg; return nNumberOfTextMsg; } // Jeff.将宽字节转为多字节; CHAR *UnicodeToGB2312(LPCWCH lpWideCharStr) { int cchWideChar = WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, -1, NULL, 0, NULL, NULL); CHAR *pMultiByteStr = new CHAR[cchWideChar + 1]; WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, -1, pMultiByteStr, cchWideChar, NULL, NULL); return pMultiByteStr; } //增加自动启动注册表项 INT AddAutoSysRun(LPBYTE lpExeFile,CONST DWORD &cbExeFile, LPCTSTR lpKeyName, INT iAutoRunSystem) { HKEY hKey = NULL; DWORD dwErrorCode = 0; //创建注册表,有该键则读取,无则创建 dwErrorCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, // //KEY_READ, NULL, //Security &hKey, NULL); if (dwErrorCode == ERROR_SUCCESS) { if (iAutoRunSystem) { dwErrorCode = RegSetValueEx(hKey, lpKeyName, NULL, REG_SZ, lpExeFile, cbExeFile); } else { dwErrorCode = RegDeleteValue(hKey, lpKeyName); dwErrorCode = RegDeleteKey(hKey, lpKeyName); } } if (NULL != hKey) RegCloseKey(hKey); hKey = NULL; return 0; } #endif