c++ - 如何通过 Win32 API 获取人类可读的进程名称(如在任务管理器中)?
问题描述
我尝试检测当前活动窗口的进程名称。我有以下代码。
#include <iostream>
#include <functional>
#include <thread>
#include <windows.h>
#include <Psapi.h>
using namespace std;
int main()
{
while (true) {
wchar_t buffer[512];
HWND hwnd = GetForegroundWindow(); // get handle of currently active window
DWORD processId;
GetWindowThreadProcessId(hwnd, &processId);
auto processHandle = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, false, processId);
DWORD length = sizeof(buffer) / sizeof(buffer[0]);
auto success = QueryFullProcessImageNameW(processHandle, 0, buffer, &length);
if (success) {
wcout << endl << buffer << endl;
}
else {
wcout << endl << L"An error has occurred. Code: " << GetLastError() << endl;
}
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
它运行良好,但目前可执行文件的路径已打印到控制台中,例如
C:\Program Files (x86)\Opera\68.0.3618.63\opera.exe
但我想获得一个人类可读的进程名称,就像在 Windows 任务管理器中一样,即:
Opera Internet Browser
此外,当我选择任务管理器的窗口时,当前代码只会打印一个错误代码:
An error has occurred. Code: 6
因此,如何通过 WinAPI 在任务管理器中获取进程名称?
解决方案
推荐阅读
- python - 如何在设置意图方法中添加付款详细信息 - Stripe Python
- javascript - 密码管理器如何在表单中自动填写用户名、密码?
- linux - 查找文件计数为 1 或 0 的 Hadoop 文件夹
- javascript - 如何在我的 JavaScript HTML 中调用 div,以便在页面上显示的每个帖子上绘制地图?
- integer - 这段代码的复杂性是什么并详细解释
- azure - Entity Framework Core 5 尝试为计算列插入值
- 6502 - *等待*按键并获取其矩阵或PETSCII代码的简单方法?
- azure - azure 实时视频分析模块中信号门节点的消息格式
- php - 小组赛过长导致灾难性回溯
- javascript - Livewire Uncaught (in promise) TypeError: Cannot read property 'split' of null