#ifndef __BRANCH_DEVICE_HLEPER_H #define __BRANCH_DEVICE_HLEPER_H #pragma once const int MAX_PATH_SIZE = 256; #include #include #ifdef __cplusplus extern "C" { #endif int GetCurrentRunPath(char *pPath) { char *pBuf = new char[MAX_PATH_SIZE]; if (pBuf == NULL) return -1; ZeroMemory(pBuf,MAX_PATH_SIZE); GetModuleFileName(NULL,pBuf,MAX_PATH_SIZE); int len = strnlen_s(pBuf,MAX_PATH_SIZE); if (len <= 0) { delete []pBuf; return -2; } char *pch; pch = strstr (pBuf,"bin"); if (pch == NULL) return -3; int lenDel = strnlen_s(pch,MAX_PATH_SIZE); if (len <= 0) { delete []pBuf; return -3; } strncpy_s(pPath,MAX_PATH_SIZE,pBuf,len-lenDel); delete []pBuf; return strnlen_s(pPath,MAX_PATH_SIZE); } // >0 means suc and set the path size // pPath store directory path like "C:\Users\{UserName}\AppData\LocalLow" // <0 means failed !! int GetWriteAvailableDirPath(char *pPath) { char *pBuf = new char[MAX_PATH_SIZE]; if (pBuf == NULL) return -1; ZeroMemory(pBuf,MAX_PATH_SIZE); PWSTR pszPath = NULL; if(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, NULL, &pszPath) != S_OK) { delete[] pBuf; return -2; } WideCharToMultiByte(CP_ACP, 0, pszPath, -1, pBuf, MAX_PATH_SIZE, NULL, NULL); CoTaskMemFree((LPVOID)pszPath); int len = strnlen_s(pBuf, MAX_PATH_SIZE); strncpy_s(pPath, MAX_PATH_SIZE, pBuf, len); delete []pBuf; return strnlen_s(pPath, MAX_PATH_SIZE); } #ifdef __cplusplus } #endif #endif //__BRANCH_DEVICE_HLEPER_H