2017-01-20 33 views
1

我可以使用FindWindow,但每次打開窗口時都會更改窗口的名稱。所以我的問題是,怎樣才能我要麼:如何找到包含X的窗口的PID

A)查找包含「X」

B)找到PID與exe文件的名稱窗口的窗口的PID?

對不起,如果問題是明顯的,新的C++。提前致謝!

回答

3
  1. 嘗試使用EnumWindows來獲取所有窗口句柄
  2. 檢查Windows的狀態下IsWindowVisible處理。 Because some invisible windows can hang the call to GetWindowText
  3. 通過GetWindowText獲取每個窗口的標題。然後檢查標題包含'X'您想要的字符或字符串。通過GetWindowThreadProcessId

關於B /它

  • 獲取PID,您可以通過GetWindowModuleFileName獲得可執行文件名通過其窗口辦理。

  • +0

    第2步('IsWindow()')在枚舉回調中不是必需的。也許你正在考慮'IsWindowVisible()'而不是? –

    +2

    您的更新[引用別人的評論](http://stackoverflow.com/questions/797967/how-to-stop-enumwindows-running-infinitely-win32/798003#comment14193164_798003)沒有任何基礎。窗口的可見性不會影響'GetWindowText()'。事實上,如果一個窗口屬於另一個進程,['GetWindowText()'** cant ** hang](https://blogs.msdn.microsoft.com/oldnewthing/20030821-00/?p=42833),通過設計。唯一可以掛起的方式是,如果窗口屬於你自己的進程並且窗口的消息隊列沒有被處理。這將是你自己的代碼中的一個錯誤。 –