如何根據進程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