我有一个打击细节功能。typedef部分 typedef DWORD (WINAPI *GETMODULEFILENAMEEX)(HANDLE hProcess, HMODULE hModule, LPTSTR lpBaseName,DWORD nSize); typedef BOOL (WINAPI *PFNTERMINATEPROCESS)(HANDLE hProcess,UINT uExitCode);/// GetProcessName函数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时,它必须返回进程名称,但它会返回???总是str。我直接通过PID调用此函数,例如GetProcessName(2018,szProcessName,MAX_PATH);。例如,2018年是一个pid,它可以正常工作。我不知道为什么HandleToULong(hProcess)不起作用。我的hProcess必须是一个句柄现在键入肯定如何解决此问题? 最佳答案 char name [MAX_PATH * 2] =“ \ 0”,* p;GetModuleFileName(GetModuleHandle(NULL),name,MAX_PATH);p =名称+ strlen(名称)-1;while(isalnum(* p)||('。'== * p)||('_'== * p)) p--;p ++;std :: cout关于c++ - C++中的GetProcessName,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3474689/ 10-11 16:28