#include "utils.h" #define MUTEX_NAME XOR_STRING_W(L"Local\\seriver_mutex_anit") auto utils::check_mutex() -> BOOL { HANDLE mutex = CreateMutex(nullptr, TRUE, MUTEX_NAME); if (!mutex || GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(mutex); return FALSE; } return TRUE; } // 不区分大小写宽字符串查找 bool utils::StrContainsI(LPCWSTR Source, LPCWSTR Sub) { if (!Source || !Sub) return FALSE; WCHAR srcBuf[1024] = { 0 }; WCHAR subBuf[1024] = { 0 }; lstrcpyW(srcBuf, Source); lstrcpyW(subBuf, Sub); _wcslwr(srcBuf); _wcslwr(subBuf); return wcsstr(srcBuf, subBuf) != nullptr; } // 读取注册表字符串值 BOOL utils::RegReadString(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, char* outBuf, DWORD bufSize) { HKEY hKey; LONG ret = RegOpenKeyExA(hRoot, szSubKey, 0, KEY_READ, &hKey); if (ret != ERROR_SUCCESS) return FALSE; DWORD dataType = REG_SZ; DWORD dataLen = bufSize; ret = RegQueryValueExA(hKey, szValueName, nullptr, &dataType, (LPBYTE)outBuf, &dataLen); RegCloseKey(hKey); if (ret != ERROR_SUCCESS) return FALSE; outBuf[dataLen] = '\0'; return TRUE; }