diff options
Diffstat (limited to 'Source/Memory.cpp')
| -rw-r--r-- | Source/Memory.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
| diff --git a/Source/Memory.cpp b/Source/Memory.cpp index 7bc3b2f..1f1ae0a 100644 --- a/Source/Memory.cpp +++ b/Source/Memory.cpp | |||
| @@ -6,12 +6,16 @@ | |||
| 6 | #undef PROCESSENTRY32 | 6 | #undef PROCESSENTRY32 |
| 7 | #undef Process32Next | 7 | #undef Process32Next |
| 8 | 8 | ||
| 9 | Memory::Memory(const std::string& processName) { | 9 | Memory::Memory() { |
| 10 | } | ||
| 11 | |||
| 12 | [[nodiscard]] | ||
| 13 | bool Memory::Initialize(const std::wstring& processName) { | ||
| 10 | // First, get the handle of the process | 14 | // First, get the handle of the process |
| 11 | PROCESSENTRY32 entry; | 15 | PROCESSENTRY32W entry; |
| 12 | entry.dwSize = sizeof(entry); | 16 | entry.dwSize = sizeof(entry); |
| 13 | HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | 17 | HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); |
| 14 | while (Process32Next(snapshot, &entry)) { | 18 | while (Process32NextW(snapshot, &entry)) { |
| 15 | if (processName == entry.szExeFile) { | 19 | if (processName == entry.szExeFile) { |
| 16 | _handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); | 20 | _handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); |
| 17 | break; | 21 | break; |
| @@ -19,7 +23,7 @@ Memory::Memory(const std::string& processName) { | |||
| 19 | } | 23 | } |
| 20 | if (!_handle) { | 24 | if (!_handle) { |
| 21 | std::cerr << "Couldn't find " << processName.c_str() << ", is it open?" << std::endl; | 25 | std::cerr << "Couldn't find " << processName.c_str() << ", is it open?" << std::endl; |
| 22 | throw std::exception("Unable to find process!"); | 26 | return false; |
| 23 | } | 27 | } |
| 24 | 28 | ||
| 25 | // Next, get the process base address | 29 | // Next, get the process base address |
| @@ -27,9 +31,9 @@ Memory::Memory(const std::string& processName) { | |||
| 27 | std::vector<HMODULE> moduleList(1024); | 31 | std::vector<HMODULE> moduleList(1024); |
| 28 | EnumProcessModulesEx(_handle, &moduleList[0], static_cast<DWORD>(moduleList.size()), &numModules, 3); | 32 | EnumProcessModulesEx(_handle, &moduleList[0], static_cast<DWORD>(moduleList.size()), &numModules, 3); |
| 29 | 33 | ||
| 30 | std::string name(64, '\0'); | 34 | std::wstring name(64, '\0'); |
| 31 | for (DWORD i = 0; i < numModules / sizeof(HMODULE); i++) { | 35 | for (DWORD i = 0; i < numModules / sizeof(HMODULE); i++) { |
| 32 | int length = GetModuleBaseNameA(_handle, moduleList[i], &name[0], static_cast<DWORD>(name.size())); | 36 | int length = GetModuleBaseNameW(_handle, moduleList[i], &name[0], static_cast<DWORD>(name.size())); |
| 33 | name.resize(length); | 37 | name.resize(length); |
| 34 | if (processName == name) { | 38 | if (processName == name) { |
| 35 | _baseAddress = (uintptr_t)moduleList[i]; | 39 | _baseAddress = (uintptr_t)moduleList[i]; |
| @@ -37,12 +41,16 @@ Memory::Memory(const std::string& processName) { | |||
| 37 | } | 41 | } |
| 38 | } | 42 | } |
| 39 | if (_baseAddress == 0) { | 43 | if (_baseAddress == 0) { |
| 40 | throw std::exception("Couldn't find the base process address!"); | 44 | std::cerr << "Couldn't locate base address" << std::endl; |
| 45 | return false; | ||
| 41 | } | 46 | } |
| 47 | return true; | ||
| 42 | } | 48 | } |
| 43 | 49 | ||
| 44 | Memory::~Memory() { | 50 | Memory::~Memory() { |
| 45 | CloseHandle(_handle); | 51 | if (_handle != nullptr) { |
| 52 | CloseHandle(_handle); | ||
| 53 | } | ||
| 46 | } | 54 | } |
| 47 | 55 | ||
| 48 | int Memory::GetCurrentFrame() | 56 | int Memory::GetCurrentFrame() |
