C++ 通过进程 ID 获取进程的名称
C++ Getting the Name of a Process via ProcessID
例如,从PID 10948中,我想获取Firefox的进程名称.exe
我尝试使用GetModuleFileNameEx
、GetModuleFileName
、GetProcessImageFileName
和GetModuleBaseName
,所有这些都会导致一个垃圾字符串,例如:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 7Σ
我的代码:
DWORD* thread = new DWORD;
TCHAR szName[_MAX_FNAME];
HANDLE processhandle = OpenProcess(PROCESS_QUERY_INFORMATION, false, GetWindowThreadProcessId(GetForegroundWindow(), thread));
GetProcessImageFileName(processhandle, szName, _MAX_FNAME);
strrchr(szName, '');
最初,我尝试使用 python 使用 win32gui 库使用进程句柄执行此操作,这有效,但它无法找到命令提示句柄。我不在乎我使用哪种语言来解决识别当前正在使用的程序的问题,只要我能够找到我可以使用的所有程序的名称。
如果失败OpenProcess()
则返回NULL
。致电GetLastError()
了解原因。与GetProcessImageFileName()
相同。
此外,请尝试改用PROCESS_QUERY_LIMITED_INFORMATION
,因为它需要的权限较少。
此外,您应该在填充之前将szName
缓冲液清零。
此外,您无需使用new
为GetWindowThreadProcessId()
分配DWORD
。
试试这个:
DWORD threadid;
DWORD processid = GetWindowThreadProcessId(GetForegroundWindow(), &threadid);
HANDLE processhandle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processid);
if (!processhandle) {
// handle error as needed...
}
else {
TCHAR szName[_MAX_FNAME] = {};
if (!GetProcessImageFileName(processhandle, szName, _MAX_FNAME)) {
// handle error as needed...
}
// ...
CloseHandle(processhandle);
}
- 每次使用带有LOCK_EX标志的LOCK_NB时,相同的程序/进程都会获取锁
- 如何获取进程以设置其亲和力?
- 从两个 4x64 位整数数组中获取取模
- 如何获取进程的整数PID?
- 获取特定进程的句柄数
- 如何使用 c++ libboost 运行进程并获取其输出?
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 如何从进程获取实时、非阻塞输出
- 从创建进程创建的进程获取输出
- 在Win 7中从远程进程获取PEB
- 从其他进程获取 CoGetClassObject
- 从x64进程获取另一个进程的32位PEB
- 从x64进程获取函数表
- 从非子进程获取退出代码
- 从Linux中的非子进程获取退出代码
- 从另一个进程获取 win32 线程的起始地址
- 从其他进程获取模块句柄
- 从32位进程获取64位进程内存的入口点
- 如何从子进程获取状态信息以度量资源利用率
- C++在没有OpenProcess()的情况下从进程获取句柄