如何使用 winapi 获取 windows 中当前活动的 window 的进程名称?

How can I get the process name of the current active window in windows with winapi?

我正在尝试使用 winapi 在 Windows 中获取当前 window 或活动 window 以及那个 window 的进程名称。

所以,我能够使用 GetForegroundWindow() 获得活动的 window 并且我正在使用 OpenProcess() 来获得进程,问题是 OpenProcess 需要进程 ID,所以我虽然可以使用 GetProcessId() 但这个接收到的是 HANDLE 类型的 window 而我当前的 window 是 HWND 类型。

我已经尝试了一些方法,但没能成功。那么谁能告诉我如何使用 HWND 中的 window 获取进程 ID?或获取当前 window 的句柄 ??

我将我的代码留在此处,以防有人看到可能对我有帮助的解决方案。我正在使用 Qt 和 C++

char wnd_title[256];
HWND hwnd=GetForegroundWindow(); // get handle of currently active window
GetWindowText(hwnd,wnd_title,sizeof(wnd_title));
HANDLE Handle = OpenProcess(
                  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                  FALSE,
                  GetProcessId(hwnd) // GetProcessId is returning 0
                );
if (Handle)
{
  TCHAR Buffer[MAX_PATH];
  if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH))
  {
    printf("Paht: %s", Buffer);
    // At this point, buffer contains the full path to the executable
  }
  CloseHandle(Handle);
}

您可以使用 GetWindowThreadProcessId(),它接收 HWND 并输出 window 所属进程的 ID。

例如:

#include <tchar.h>

TCHAR wnd_title[256];
HWND hwnd = GetForegroundWindow(); // get handle of currently active window
GetWindowTextA(hwnd, wnd_title, 256);

DWORD dwPID;
GetWindowThreadProcessId(hwnd, &dwPID);

HANDLE Handle = OpenProcess(
                  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                  FALSE,
                  dwPID
                );
if (Handle)
{
    TCHAR Buffer[MAX_PATH];
    if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH))
    {
        _tprintf(_T("Path: %s"), Buffer);
        // At this point, buffer contains the full path to the executable
    }
    CloseHandle(Handle);
}