进程名称获取进程PID
#include <Windows.h>
#include <TlHelp32.h>
DWORD GetProcessId(WCHAR* szProcessName)
{
HANDLE hProcessSnapShot = NULL;
PROCESSENTRY32 pe32 = { 0 };
hProcessSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (hProcessSnapShot == (HANDLE)-1) return NULL;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnapShot, &pe32))
{
do {
if (!wcscmp(szProcessName, pe32.szExeFile)) return pe32.th32ProcessID;
} while (Process32Next(hProcessSnapShot, &pe32));
}
else
::CloseHandle(hProcessSnapShot);
return NULL;
}
获取指定进程模块句柄
#include <Windows.h>
#include <TlHelp32.h>
HMODULE GetProcessModuleHandle(DWORD ProcessId, const WCHAR* szModuleName)
{
MODULEENTRY32 moduleEntry;
HANDLE hSnapshot = NULL;
hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
if (!hSnapshot)
{
if (hSnapshot != NULL) ::CloseHandle(hSnapshot);
return NULL;
}
ZeroMemory(&moduleEntry, sizeof(MODULEENTRY32));
moduleEntry.dwSize = sizeof(MODULEENTRY32);
if (!Module32First(hSnapshot, &moduleEntry))
{
::CloseHandle(hSnapshot);
return NULL;
}
do {
if (wcscmp(moduleEntry.szModule, szModuleName) == NULL) return moduleEntry.hModule;
} while (Module32Next(hSnapshot, &moduleEntry));
::CloseHandle(hSnapshot);
return NULL;
}