【发布时间】:2018-11-17 20:34:09
【问题描述】:
我想使用标准 c++ 处理所有 winapi。如何通过地址传递输出?查看o_processName。 GetModuleFileNameExW 函数参数 3 需要 wchar_t 类型。我需要将其转换为 wstring 类型。当我搜索时,可能是将内存地址传递给 GetModuleFileNameExW 而不是类型。
void GetProcessNameById(DWORD i_processId, std::wstring *o_processName)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, i_processId);
if (hProcess != NULL)
{
if (GetModuleFileNameExW(hProcess, NULL, &o_processName, MAX_PATH))
{
CloseHandle(hProcess);
}
}
}
【问题讨论】:
-
"我想使用标准 c++ 处理所有 winapi" - 这是不可能的。 WinAPI 不是标准
C++ -
&o_processName是一个指向o_processName的指针,它已经是一个指针,因此将具有std::wstring**类型。并不是 [GetModuleFileNameExW](docs.microsoft.com/en-us/windows/desktop/api/psapi/…) 所期望的。永远不要忘记阅读您使用的函数的文档。 -
即使在此 api 的文档中也明确指出 - 如果您需要 exe 的路径 - 不要使用它。要检索远程进程的主要可执行模块的名称,请使用
GetProcessImageFileName或QueryFullProcessImageName函数。 -
我检查所有需要输入缓冲区 MAX_PATH 的 windows api。有没有办法在不输入缓冲区的情况下检查进程名称。
-
所有 windows api 都需要输入缓冲区 MAX_PATH - 当然不是。 有没有办法在不输入缓冲区的情况下检查进程名称 - 你希望 api 自己分配缓冲区并将其返回给你吗?一些 api 这样做,但不是用于查询 exe 名称。在什么问题分配缓冲区?又一次 -
GetModuleFileNameExW- 这里有错误的 api
标签: c++ windows visual-studio winapi