【问题标题】:Determining order of windows opened确定打开窗口的顺序
【发布时间】:2011-05-19 22:15:08
【问题描述】:

通过 windows API,我可以获得当前打开的所有窗口的列表,但似乎 IntPtr 没有按任何特定顺序返回。我想知道是否有办法让窗户按打开的顺序排列。例如,如果我打开 2 个 IE 窗口,然后打开一个记事本窗口,当我检索窗口列表时,我希望 2 个 IE 窗口位于记事本窗口之前。我在 C# 中这样做。

【问题讨论】:

  • 您使用什么 API 调用来返回 Windows 列表?
  • 如果您的应用程序在窗口打开时正在运行,那么您可以安装一个挂钩,在打开窗口时调用它并自己跟踪。
  • 好奇你为什么想知道?
  • 好吧,我正在编写一些测试软件,我们需要能够断言前台窗口,但有人要求我们检查,因为如果多个窗口以相同的名称打开,他们想要断言第二个窗口打开的是当前焦点窗口。

标签: c# c++ windows visual-studio windows-xp


【解决方案1】:

句柄值是混淆的指针,你根本不能依赖它们的值。他们得到回收。

远距离拍摄是GetWindowThreadProcessId()获取拥有该窗口的线程ID。 OpenThread() 来获取它的句柄。 GetThreadTimes() 找出该线程的创建时间。 CloseHandle() 进行清理。然而,结果只是一个猜测,请避免想问这样的问题。访问 pinvoke.net 以获取声明。

【讨论】:

  • 有趣的是,这适用于除 FireFox 之外的几乎所有应用程序,似乎所有的 firefox 窗口都是从同一个线程产生的(但我为此写了一个解决方法)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
相关资源
最近更新 更多