C++常用操作函数.doc_第1页
C++常用操作函数.doc_第2页
C++常用操作函数.doc_第3页
C++常用操作函数.doc_第4页
C++常用操作函数.doc_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+常用操作函数载入动态库bool LoadDll()HttpDownDll = LoadLibrary(HTTPDOWNDLL.dll);if(HttpDownDll = NULL)MessageBox(0, 载?入?动态?库a错洙?误!?, 错洙?误, MB_OK|MB_ICONWARNING);FreeLibrary(HttpDownDll);return false;SendCommand = (SendCommandFunc)GetProcAddress(HttpDownDll, SendCommand);if(SendCommand = NULL)MessageBox(0, GetProcAddress错洙?误!?, 错洙?误, MB_OK|MB_ICONWARNING);FreeLibrary(HttpDownDll);return false;return true;卸载动态库bool FreeDll()FreeLibrary(HttpDownDll);SendCommand = NULL;return true;字符串分割std:vector split(std:string str,std:string pattern) std:string:size_type pos; std:vector result; str+=pattern;/扩?展1字?符?串?以?方?便?操作痢? int size=str.size(); for(int i=0; isize; i+) pos=str.find(pattern,i); if(possize) std:string s=str.substr(i,pos-i);result.push_back(s); i=pos+pattern.size()-1; return result; UTF8转GBKvoid UTF8ToGBK(std:string &s)char szOut256; memset(szOut,0,256); strcpy(szOut,s.c_str();unsigned short* wszGbk = NULL;char* szGbk = NULL;/长度int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)szOut, -1, NULL, 0);wszGbk = new unsigned shortlen+1;memset(wszGbk, 0, len * 2 + 2);MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)szOut, -1, (LPWSTR)wszGbk, len);/长度len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGbk, -1, NULL, 0, NULL, NULL);szGbk = new charlen+1;memset(szGbk, 0, len + 1);WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGbk, -1, szGbk, len, NULL, NULL);/ szOut = szGbk; /这样得到的szOut不正确,因为此句意义是将szGbk的首地址赋给szOut,/ 当delete szGbk执行后szGbk的内存空间将被释放,此时将得不到szOut的内容memset(szOut, 0, strlen(szGbk) + 1); /改将szGbk的内容赋给szOut ,这样即使szGbk被释放也能得到正确的值memcpy(szOut, szGbk, strlen(szGbk);s=szOut;delete szGbk;delete wszGbk;删除文件int DeleteFileFunc(string v_SourceFile)int l_Result = 0;/* _access(char *,int) 判断文件是否存在存在 返回0;不存在 返回-1._access(const char *path,int mode)mode的值:00 是否存在02 写权限04 读权限06 读写权限*/char l_SourceFile256 = 0;strcpy(l_SourceFile, v_SourceFile.c_str();if(!_access(l_SourceFile,0)/如果文件存在:文件为只读无法删除/去掉文件只读属性SetFileAttributes(l_SourceFile,0);if(DeleteFile(l_SourceFile)/删除成功l_Result = 0;else/无法删除:文件只读或无权限执行删除/coutsource 无法删除:文件为只读属性或无删除权限.endl;l_Result = 1;return l_Result;重命名文件int RenameFileFunc(string v_SourceFile, string v_NewFileName)int l_Result = 0;char l_SourceFile256 = 0;char l_NewFileName256 = 0;strcpy(l_SourceFile, v_SourceFile.c_str();strcpy(l_NewFileName, v_NewFileName.c_str();if(!_access(l_SourceFile, 0)/如果文件存在:if(!rename(l_SourceFile, l_NewFileName)/删除成功l_Result = 0;else/无法重命名:文件打开或无权限执行重命名/cout文件无法重命名(可能原因如下):endl;/coutt1. newname 已存在endl/ t2. newname 正在使用,未关闭.endl/ t3. 你没有权限重命名此文件.= 6 & ovs.dwMinorVersion = 0);/vista or later elsereturn FALSE;int lang = 0;/char l_Language10 = 0;char *l_Language = ReadXmlFile(System, Language, );if(stricmp(l_Language, en) = 0)lang = 1;if(lang = 1)if(bXPLaterOS)SetThreadUILanguage(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US);elseSetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); else if(lang = 0)if(bXPLaterOS)SetThreadUILanguage(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED);elseSetThreadLocale(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_DEFAULT);elsereturn FALSE;return TRUE;读写xml文件char *ReadXmlFile(char *v_FatherNodeName, char *v_NodeName, char *v_Default)char l_ComName20 = 0;char l_TempStr20 = 0;char l_XmlPath256 = 0;char l_ExePath256 = 0;GetModuleFileName(NULL, l_ExePath, 256);int l_ExePathLen = strlen(l_ExePath);for(int i = l_ExePathLen - 1; i = 0; i-)if(l_ExePathi = )memcpy(l_XmlPath, l_ExePath, i);strcat(l_XmlPath, g_XmlFileName);CTinyXMLLib l_TinyXml;strcpy(l_TinyXml.m_XmlPath, l_XmlPath);int l_Result = l_TinyXml.LoadXml();if(l_Result = 0)l_TinyXml.ReadXmlNode(v_FatherNodeName, v_NodeName, v_Default, l_TempStr);elsestrcpy(l_TempStr, v_Default);return l_TempStr;char *ReadXmlFile(char *v_XmlFileName, char *v_FatherNodeName, char *v_NodeName, char *v_Default)char l_XmlPath256 = 0;char l_TempStr20 = 0;char l_ExePath256 = 0;GetModuleFileName(NULL, l_ExePath, 256);int l_ExePathLen = strlen(l_ExePath);for(int i = l_ExePathLen - 1; i = 0; i-)if(l_ExePathi = )memcpy(l_XmlPath, l_ExePath, i);strcat(l_XmlPath, );strcat(l_XmlPath, v_XmlFileName);CTinyXMLLib l_TinyXml;strcpy(l_TinyXml.m_XmlPath, l_XmlPath);int l_Result = l_TinyXml.LoadXml();if(l_Result = 0)l_TinyXml.ReadXmlNode(v_FatherNodeName, v_NodeName, v_Default, l_TempStr);elsestrcpy(l_TempStr, v_Default);return l_TempStr;int WriteXmlFile(char *v_XmlFileName, char *v_FatherNodeName, char *v_NodeName, char *v_Value)char l_ComName20 = 0;char l_XmlPath256 = 0;char l_ExePath256 = 0;GetModuleFileName(NULL, l_ExePath, 256);int l_ExePathLen = strlen(l_ExePath);for(int i = l_ExePathLen - 1; i = 0; i-)if(l_ExePathi = )memcpy(l_XmlPath, l_ExePath, i);strcat(l_XmlPath, );strcat(l_XmlPath, v_XmlFileName);CTinyXMLLib l_TinyXml;strcpy(l_TinyXml.m_XmlPath, l_XmlPath);l_TinyXml.LoadXml();l_TinyXml.WriteXmlNode(v_FatherNodeName, v_NodeName, v_Value);return 0;读ini文件int CCommServerDlg:ReadIniFile()char l_TempStr2048 = 0;char l_CurrentDir256 = 0;GetPrivateProfileString(Application, RemoteFileListURL, 70:9131/Download/FileList.txt, l_TempStr, 2048, g_config_name);GetPrivateProfileString(Application, RemoteDirURL, 70:9131/Download/, l_TempStr, 2048, g_config_name);GetCurrentDirectory(256, l_CurrentDir);strcat(l_CurrentDir, Download);CheckFolderExist(l_CurrentDir);GetPrivateProfileString(Application, LocalFileList, l_FileListPath, l_TempStr, 2048, g_config_name);GetPrivateProfileString(Application, LocalFileDir, l_LocalFileDir, l_TempStr, 2048, g_config_name);return 0;读文件void Read(char * v_Path, char *v_Buffer, const int v_BufferLen) HANDLE hFile = :CreateFile(v_Path, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL); if (hFile != INVALID_HANDLE_VALUE) /SetFilePointer(hFile, -1, NULL, FILE_END);SetFilePointer(hFile, 81920, NULL, FILE_BEGIN);char l_Buffer5 = 0; DWORD nNumberOfBytesRead; BOOL bRet = :ReadFile(hFile, l_Buffer, v_BufferLen, &nNumberOfBytesRead, NULL); memcpy(v_Buffer, l_Buffer, v_BufferLen); / TODO . CloseHandle(hFile); 写文件void Write(char * v_Path, char *v_Content, const int v_ContentSize) HANDLE hFile = :CreateFile(v_Path, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL); if (hFile != INVALID_HANDLE_VALUE) /SetFilePointer(hFile, -1, NULL, FILE_END);SetFilePointer(hFile, 81920, NULL, FILE_BEGIN); DWORD nNumberOfBytesWritten; :WriteFile(hFile, v_Content, v_ContentSize, &nNumberOfBytesWritten, NULL); / TODO . CloseHandle(hFile); 查找进程BOOL FindProcess()int i=0;PROCESSENTRY32 pe32;pe32.dwSize = sizeof(pe32); HANDLE hProcessSnap = :CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap = INVALID_HANDLE_VALUE)i+=0;BOOL bMore = :Process32First(hProcessSnap, &pe32);while(bMore)/printf( 进程名称:%s n, pe32.szExeFile);if(stricmp(RWPEPROC.exe,pe32.szExeFile)=0)/printf(进程运行中);i+=1;bMore = :Process32Next(hProcessSnap, &pe32);if(i1) /大于1,排除自身return true;elsereturn false;路径操作char l_ExePath256 = 0;char l_MainExePath256 = 0;/GetCurrentDirectory(256, l_ExePath);GetModuleFileName(NULL, l_ExePath, 256);int l_ExePathLen = strlen(l_ExePath);for(int i = l_ExePathLen - 1; i = 0; i-)if(l_ExePathi = )memcpy(l_MainExePath, l_ExePath, i);strcat(l_MainExePath, RWPEPROC.exe);BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )switch (ul_reason_for_call)case DLL_PROCESS_ATTACH:char *l_Buffer;l_Buffer = _getcwd(NULL, 0);_getcwd(DllPath, MAXPATH);HMODULE module = GetModuleHandle(0); char szBuffMAX_PATH = 0; GetModuleFileName(module, szBuff, sizeof(szBuff);int l_Pause = 0;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;return TRUE;查找指定进程/判断指定进程是否存在int IsProcExist(char FileName50,bool IsDelete) char NameBuffMAX_PATH; char *pFileName; / pFileName转化为大写后的字符串指针 char *pNameBuff; / NameBuff转化为大写后的字符串指针 BOOL bRes; / 返回结果 HINSTANCE hInstance; / 动态库句柄 HANDLE hHandle; / 进程句柄 int i, j; / 循环变量 int len; funEnumPorcess EnumProcesses; funGetModuleFileNameEx GetModuleFileNameEx; DWORD *buffer, maxNum, factNum; maxNum = MAXPROCESS; factNum = MAXPROCESS; buffer = (DWORD *)malloc(maxNum); hInstance = LoadLibrary(psapi.dll); / 装载psapi.dll if (hInstance) EnumProcesses = (funEnumPorcess)GetProcAddress(hInstance, EnumProcesses); if (EnumProcesses) bRes = EnumProcesses(buffer, maxNum, &factNum); / 枚举进程,得到进程名称和实际进程总大小 if (bRes) factNum /= sizeof(DWORD); / 计算实际进程个数 GetModuleFileNameEx = (funGetModuleFileNameEx)GetProcAddress(hInstance, GetModuleFileNameExA); if (GetModuleFileNameEx) for (i=0; i= l_ProcNums)HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); / 获取进程句柄TerminateProcess(hHandle,0);CloseHandle(hHandle);bMore = :Process32Next(hProcessSnap, &pe32);if(i=1) /大于1,排除自身return true;elsereturn false;写日志,删除日志/目录是否存在的检查,不存在建立:bool CheckFolderExist(char *v_StrPath) WIN32_FIND_DATA l_Wfd; bool l_Result = false; HANDLE hFind = FindFirstFile(v_StrPath, &l_Wfd); if (hFind != INVALID_HANDLE_VALUE) & (l_Wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) l_Result = true; elseif(CreateDirectory(v_StrPath, NULL)l_Result = false; FindClose(hFind); return l_Result;/遍历目录中所有的文件BOOL DirectoryList(char *v_Path)WIN32_FIND_DATA l_WFindData;HANDLE hFind;char l_FilePathName128=0;/ 构造路径char l_FullPathName128=0;bool l_SearchFinished=false;strcpy(l_FilePathName, v_Path);strcat(l_FilePathName, *.*);hFind = FindFirstFile(l_FilePathName, &l_WFindData);if (hFind = INVALID_HANDLE_VALUE)/printf(搜索失败!);return 0;while(:FindNextFile(hFind, &l_WFindData)sprintf(l_FullPathName, %s%s, v_Path, l_WFindData.cFileName);DeleteFile(l_FullPathName);FindClose(hFind);:RemoveDirectory(v_Path);return 0;int DeleteLogDir()int l_Result=0;time_t t=time(0);for(int i = 5; i = 13; i+)time_t l_DeleteDate = t - i*24*60*60;/三天前char l_DeleteDirName64 = 0;strftime(l_DeleteDirName, sizeof(l_DeleteDirName), %y%m%dServiceLogs, localtime(&l_DeleteDate);char l_DeleteDirPath256 = 0;strcpy(l_DeleteDirPath, logpath);strcat(l_DeleteDirPath, Logs);strcat(l_DeleteDirPath, l_DeleteDirName);DirectoryList(l_DeleteDirPath);return l_Result;bool LocalWriteLog(char * v_FileName , char * v_Module , const char * v_LogInfo)time_t t = time(0); char l_FileName64 = 0;char l_DirName256 = 0;strcpy(l_DirName, logpath);strcat(l_DirName, Logs);char l_Temp3;CheckFolderExist(l_DirName);char l_DirYMD32 = 0;strftime(l_DirYMD, sizeof(l_DirYMD), %y%m%dServiceLogs, localtime(&t);strcat(l_DirName, );strcat(l_DirName, l_DirYMD);CheckFolderExist(l_DirName);/strftime( l_FileName, sizeof(l_FileName), %Y-%m-%d-,localtime(&t);strcat(l_FileName , v_FileName);if(v_FileName != NULL | v_Module != NULL | v_LogInfo != NULL)fstream l_FileHandle;strcat(l_DirName, );strcat(l_DirName, l_FileName);l_FileHandle.open(l_DirName ,ios:app);if(!l_FileHandle)char l_Buffer50 = 0;memcpy(l_Buffer , l_FileName , strlen(l_FileName);memcpy(l_Buffer + strlen(l_FileName) , Open Log Error , 20);/MessageBox(NULL , l_Buffer , error , MB_OK);time_t t = time(0); char tmp64; strftime( tmp, sizeof(tmp), %d %X,localtime(&t);l_FileHandle TIME :tmpMODULE | v_Module v_LogInfoendl;l_FileHandle.close();return true;return false;启动程序(以system权限启动显示界面)/for win7DWORD _stdcall LaunchAppIntoDifferentSession( LPTSTR lpCommand ) DWORD dwRet = 0; PROCESS_INFORMATION pi ; STARTUPINFO si ; DWORD dwSessionId ; HANDLE hUserToken = NULL; HANDLE hUserTokenDup = NULL; HANDLE hPToken = NULL; HANDLE hProcess = NULL; DWORD dwCreationFlags ; HMODULE hInstKernel32 = NULL; typedef DWORD (WINAPI * WTSGetActiveConsoleSessionIdPROC)(); WTSGetActiveConsoleSessionIdPROC WTSGetActiveConsoleSessionId = NULL; hInstKernel32 = LoadLibrary (Kernel32.dll ); if (!hInstKernel32 ) return FALSE ; OutputDebugString(LaunchAppIntoDifferentSession 1n ); WTSGetActiveConsoleSessionId = (WTSGetActiveConsoleSessionIdPROC )GetProcAddress( hInstKernel32,WTSGetActiveConsoleSessionId ); / Log the client on to the local computer. dwSessionId = WTSGetActiveConsoleSessionId (); do WTSQueryUserToken( dwSessionId ,&hUserToken ); dwCreationFlags = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE; ZeroMemory( &si , sizeof( STARTUPINFO ) ); si.cb = sizeof( STARTUPINFO ); si.lpDesktop = winsta0default ; ZeroMemory( &pi , sizeof( pi) ); TOKEN_PRIVILEGES tp ; LUID luid ; if( !:OpenProcessToken ( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_ADJUST_SESSIONID | TOKEN_READ | TOKEN_WRITE , &hPToken ) ) dwRet = GetLastError (); break; else; if ( !LookupPrivilegeValue ( NULL, SE_DEBUG_NAME, &luid ) ) dwRet = GetLastError (); break; else; tp.PrivilegeCount =1; tp.Privileges 0.Luid = luid; tp.Privileges 0.Attributes = SE_PRIVILEGE_ENABLED;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论