diff --git a/Windows API/IsProcessRunning.cpp b/Windows API/IsProcessRunning.cpp new file mode 100644 index 0000000..4850c82 --- /dev/null +++ b/Windows API/IsProcessRunning.cpp @@ -0,0 +1,101 @@ +BOOL IsProcessRunningA(PCHAR ProcessNameWithExtension, BOOL IsCaseSensitive) +{ + HANDLE hProcess = NULL; + + DWORD ProcessIdArray[1024] = { 0 }; + DWORD ProcessIdArraySize = 0; + DWORD NumberOfBytesReturned = 0; + + if (!EnumProcesses(ProcessIdArray, sizeof(ProcessIdArray), &NumberOfBytesReturned)) + return FALSE; + + ProcessIdArraySize = NumberOfBytesReturned / sizeof(DWORD); + + for (DWORD dwIndex = 0; dwIndex < ProcessIdArraySize; dwIndex++) + { + HMODULE Module = NULL; + CHAR ProcessStringName[MAX_PATH] = { 0 }; + + if (ProcessIdArray[dwIndex] == 0) + continue; + + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessIdArray[dwIndex]); + if (hProcess == NULL) + continue; + + if (!EnumProcessModules(hProcess, &Module, sizeof(Module), &NumberOfBytesReturned)) + continue; + + if (GetModuleBaseNameA(hProcess, Module, ProcessStringName, sizeof(ProcessStringName) / sizeof(WCHAR)) == 0) + continue; + + if (hProcess) + CloseHandle(hProcess); + + if (!IsCaseSensitive) + { + PCHAR String1 = CaplockStringA(ProcessNameWithExtension); + PCHAR String2 = CaplockStringA(ProcessStringName); + + if (StringCompareA(String1, String2) == 0) + return TRUE; + } + else { + if (StringCompareA(ProcessStringName, ProcessNameWithExtension) == 0) + return TRUE; + } + } + + return FALSE; +} + +BOOL IsProcessRunningW(PWCHAR ProcessNameWithExtension, BOOL IsCaseSensitive) +{ + HANDLE hProcess = NULL; + + DWORD ProcessIdArray[1024] = { 0 }; + DWORD ProcessIdArraySize = 0; + DWORD NumberOfBytesReturned = 0; + + if (!EnumProcesses(ProcessIdArray, sizeof(ProcessIdArray), &NumberOfBytesReturned)) + return FALSE; + + ProcessIdArraySize = NumberOfBytesReturned / sizeof(DWORD); + + for (DWORD dwIndex = 0; dwIndex < ProcessIdArraySize; dwIndex++) + { + HMODULE Module = NULL; + WCHAR ProcessStringName[MAX_PATH] = { 0 }; + + if (ProcessIdArray[dwIndex] == 0) + continue; + + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessIdArray[dwIndex]); + if (hProcess == NULL) + continue; + + if (!EnumProcessModules(hProcess, &Module, sizeof(Module), &NumberOfBytesReturned)) + continue; + + if (GetModuleBaseNameW(hProcess, Module, ProcessStringName, sizeof(ProcessStringName) / sizeof(WCHAR)) == 0) + continue; + + if (hProcess) + CloseHandle(hProcess); + + if (!IsCaseSensitive) + { + PWCHAR String1 = CaplockStringW(ProcessNameWithExtension); + PWCHAR String2 = CaplockStringW(ProcessStringName); + + if (StringCompareW(String1, String2) == 0) + return TRUE; + } + else { + if (StringCompareW(ProcessStringName, ProcessNameWithExtension) == 0) + return TRUE; + } + } + + return FALSE; +}