如何根据进程id获取该进程的主窗口句柄


来源:https://blog.csdn.net/zero_226/article/details/50887014

最近刚好有个功能,需要这个逻辑,话不多说,上代码。

 

  1.   struct handle_data {
  2.   unsigned long process_id;
  3.  HWND best_handle;
  4.  };
  5.   
  6.   BOOL IsMainWindow(HWND handle)
  7.  {
  8.   return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
  9.  }
  10.   
  11.   
  12.   HWND FindMainWindow(unsigned long process_id)
  13.  {
  14.  handle_data data;
  15.  data.process_id = process_id;
  16.  data.best_handle = 0;
  17.  EnumWindows(EnumWindowsCallback, (LPARAM)&data);
  18.   return data.best_handle;
  19.  }
  20.   
  21.   BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam)
  22.  {
  23.  handle_data& data = *(handle_data*)lParam;
  24.   unsigned long process_id = 0;
  25.  GetWindowThreadProcessId(handle, &process_id);
  26.   if (data.process_id != process_id || !IsMainWindow(handle)) {
  27.   return TRUE;
  28.  }
  29.  data.best_handle = handle;
  30.   return FALSE;
  31.  }

然后main函数,这样调用即可,

 

HWND hwnd = FindMainWindow(uProcessID);

这个uProcessID就是任务管理器里PID一列的内容,你也可以写个函数用进程名来获取。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM