50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#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;
|
|
} |