gpt4 book ai didi

c++ - C++ 中的获取进程名称

转载 作者:行者123 更新时间:2023-11-28 08:27:22 24 4
gpt4 key购买 nike

我有吹气细节的功能。

类型定义部分

   typedef DWORD (WINAPI *GETMODULEFILENAMEEX)(HANDLE hProcess, HMODULE hModule, LPTSTR   lpBaseName,DWORD nSize); 

typedef BOOL (WINAPI *PFNTERMINATEPROCESS)(HANDLE hProcess,UINT uExitCode);

///获取进程名称函数

void GetProcessName(DWORD PID, PTSTR szProcessName, size_t cchSize)
{

HMODULE lib=LoadLibrary(TEXT("Psapi.dll"));
GetModuleFileNameEx=(GETMODULEFILENAMEEX)GetProcAddress
(lib,"GetModuleFileNameExW");
_tcscpy_s(szProcessName, cchSize, TEXT("---"));


HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,PID);

if (hProcess == NULL) {
_tcscpy_s(szProcessName, cchSize, TEXT("???"));
return;
}

if (GetModuleFileNameEx(hProcess,(HMODULE)0, szProcessName, cchSize)
== 0) {
if (!GetProcessImageFileName(hProcess, szProcessName, cchSize)) {
_tcscpy_s(szProcessName, cchSize, TEXT("???"));
}
}
CloseHandle(hProcess);
}

我想在下面的函数中使用这个函数

BOOL WINAPI Hook_TerminateProcess(HANDLE hProcess,UINT uExitCode) {
BOOL nResult=false;
TCHAR szProcessName[MAX_PATH];


nResult = ((PFNTERMINATEPROCESS)(PROC) g_TerminateProcess)(hProcess,uExitCode);

GetProcessName(HandleToULong(hProcess),szProcessName,MAX_PATH); //my question here


MessageBox(0, szProcessName ,TEXT("My MessageBox Info"),MB_OK | MB_ICONERROR);

return(nResult);
}

当我调用函数 GetProcessName 时,它必须返回进程名称,但它 ???总是。我直接通过PID调用这个函数,比如GetProcessName(2018,szProcessName,MAX_PATH);。例如,2018 是一个 pid,它可以工作。我不知道为什么 HandleToULong(hProcess) 不起作用。我的 hProcess 必须是句柄现在确定输入我如何解决这个问题?

最佳答案

字符名称[MAX_PATH * 2] = "\0", *p;

GetModuleFileName(GetModuleHandle(NULL),name,MAX_PATH);

p = 名称 + strlen(名称) - 1;

while (isalnum(*p) || ('.' == *p) || ('_' == *p)) p--;

p++;

std::cout << p << std::endl;

关于c++ - C++ 中的获取进程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474689/

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