gpt4 book ai didi

c++ - GetModuleFileNameEx - 拆分输出

转载 作者:行者123 更新时间:2023-11-30 01:48:36 31 4
gpt4 key购买 nike

我试图从进程 ID 中获取进程名称,我使用了 GetModuleFileNameEx 并编写了这个函数。

char* ProcessName(ULONG_PTR ProcessId)
{
char szBuffer[MAX_PATH+1];
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, ProcessId);

if(GetModuleFileNameEx(hProcess, NULL, szBuffer, MAX_PATH) == 0)
sprintf(szBuffer, "null");

CloseHandle(hProcess);

return szBuffer;
}

输出是 Full-Path&Process-Name,我想拆分它,这样我就可以获得没有 Full-Path 的进程名称。

有什么办法可以做到这一点,或者我可以使用任何其他函数从进程 ID 中获取进程名称吗?

最佳答案

首先:您要返回一个指向本地内存的指针,这将以泪流满面

char* ProcessName(ULONG_PTR ProcessId) {
char szBuffer[MAX_PATH+1];
...
return szBuffer;
}

除此之外,您可以使用 _splitpath_s()或类似的从您的路径中获取文件名,或 PathFindFileName Windows 平台上具有 shell API 的函数

#include "windows.h"
#include "Psapi.h"
#include "Shlwapi.h"
#include <string>
#include <iostream>

#pragma comment(lib, "Shlwapi.lib")

std::string ProcessName(DWORD ProcessId)
{
std::string name;
HANDLE Handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessId);
if (Handle) {
TCHAR Buffer[MAX_PATH];
if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH)) {
name = std::string(PathFindFileName(Buffer));
}
else {
// Now would be a good time to call GetLastError()
}
CloseHandle(Handle);
}

return name;
}

int main() {

std::cout << ProcessName(GetCurrentProcessId());

return 0;
}

您可以在最新的 MSVC 编译器上测试此代码 here

关于c++ - GetModuleFileNameEx - 拆分输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254793/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com