不调用<windows.h>下,获取进程句柄
时间: 2023-06-26 08:03:52 浏览: 49
可以使用Windows API函数`CreateToolhelp32Snapshot`和`Process32First`、`Process32Next`来遍历系统中的进程,并获取进程句柄。
以下是一个获取进程句柄的示例代码:
```c++
#include <iostream>
#include <tlhelp32.h>
DWORD GetProcessIdByName(const std::wstring& processName)
{
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(snapshot, &entry) == TRUE)
{
while (Process32Next(snapshot, &entry) == TRUE)
{
if (_wcsicmp(entry.szExeFile, processName.c_str()) == 0)
{
CloseHandle(snapshot);
return entry.th32ProcessID;
}
}
}
CloseHandle(snapshot);
return 0;
}
int main()
{
std::wstring processName = L"notepad.exe";
DWORD processId = GetProcessIdByName(processName);
if (processId != 0)
{
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
if (processHandle != NULL)
{
std::cout << "Successfully opened process " << processName << std::endl;
// TODO: use the process handle
CloseHandle(processHandle);
}
else
{
std::cout << "Failed to open process " << processName << std::endl;
}
}
else
{
std::cout << "Failed to find process " << processName << std::endl;
}
return 0;
}
```
需要注意的是,使用`OpenProcess`函数获取进程句柄时,需要具有足够的权限。在以上示例代码中,使用`PROCESS_ALL_ACCESS`来请求所有可能的访问权限。在实际使用中,应该根据需要来选择适当的权限。