2017-01-20 31 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),通过设计。唯一可以挂起的方式是,如果窗口属于你自己的进程并且窗口的消息队列没有被处理。这将是你自己的代码中的一个错误。 –