【问题标题】:how to use window title to get process id,and process name如何使用窗口标题获取进程ID和进程名称
【发布时间】:2010-12-02 18:53:02
【问题描述】:

我想通过使用窗口标题来获取进程 ID 和进程名称 我的开发环境是visual c++ 2008

怎么做。

谢谢

【问题讨论】:

    标签: visual-c++


    【解决方案1】:

    按标题搜索窗口不可靠。但是如果你想这样做,首先你需要找到指定标题的窗口句柄。您可以使用EnumWindows 函数轻松完成此操作。当你找到 HWND 时,你可以使用 GetWindowThreadProcessId 函数来获取进程 ID。

    UPD:要获取进程名称,您需要使用OpenProcess 获取进程句柄并使用GetProcessImageFileName。

    【讨论】:

      【解决方案2】:
      HWND hw = FindWindow(NULL, L"Window Title");
      
      if (hw)
      {
          DWORD dwProcessId = 0;
          DWORD dwThreadId = GetWindowThreadProcessId(hw, &dwProcessId);
      
          HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);
      
          if (hProcess)
          {
               wchar_t *szExeName[1024] = {0};
               if (QueryFullProcessImageName(hProcess, 0, szExeName, _countof(szExeName))
               {
                  // ...
               }
               CloseHandle(hProcess);
          }
      }
      

      如果你知道的话,你可能也应该使用 class 参数(在我的第一行中为 NULL 的那个),这样你就不太可能意外地发现其他程序的窗口恰好具有相同的标题。

      当然,类名在程序之间也不能保证唯一,但组合起来比单独使用标题更可靠。

      您可以使用 Spy++ 轻松获取窗口类。

      编辑:QueryFullProcessImageName 需要 Vista,但您可以根据 DReJ 的回答将该行换成使用 GetProcessImageFileName 的行。

      Edit2:如果您不是为 unicode 编译,请删除“窗口标题”之前的“L”并使用 char 缓冲区而不是 wchar_t。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多