【问题标题】:How to detect is a process has any VISIBLE windows (VB.NET)如何检测一个进程是否有任何可见的窗口(VB.NET)
【发布时间】:2013-12-27 12:38:13
【问题描述】:

我希望能够检测一个进程是否有任何用户可见的窗口,我真的不介意误报(说一个进程在实际可见时是不可见的)但相反是一个问题(说一个过程是不可见的,而实际上它不是)。因此,CInt(Process.MainWindowHandle) = 0Process.MainWindowTitle = "" 不能满足我的需求。

【问题讨论】:

  • 请在这里找到一些有用的信息:stackoverflow.com/questions/2635404/…
  • 这种方法和CInt(Process.MainWindowHandle) = 0有同样的问题,谢谢
  • Process.MainWindowHandle = 0 应该处理大多数情况。您也可以包含Process.StartInfo.CreateNoWindow 以确保完全确定。您能否发布您的确切条件(和代码)以帮助我们更好地了解可能是什么问题?另一方面,请记住,在某些情况下,不同的窗口与同一个进程相关联;在这些情况下,它可能会变得有点棘手。
  • 我想要的是某种获取进程对象的 .HasAnyVisibleWindows (psuedocode) 属性的方法。我没有任何确切的条件,因为我觉得由于您提到的特殊情况,这可能无法完美实现。因此,只有原始问题中的条件才真正适用。请记住,进程对象不是由我启动的,它是来自Process.GetProcesses 方法的一个进程。
  • 如前所述 Process.MainWindowHandle = 0 应该处理大多数情况(无论您是否启动了该过程);并与 Process.StartInfo.CreateNoWindow (这是所有正在运行的进程中存在的布尔标志,不一定由您启动)一起处理大多数情况。至少在流程方面;如果您想为每个进程考虑多个窗口,则必须依赖基于 API 的方法(正如您在答案中所建议的那样;从未尝试过,但可能值得尝试)。 PS:如果你不写@my-nick,我可能不会收到你的回复。

标签: vb.net process window


【解决方案1】:

我在谷歌上找到了这个函数:IsWindowVisible

你试过了吗?

【讨论】:

  • 这看起来可以与原始问题中的属性结合使用,以改进它。我将从进程对象中获取窗口句柄并测试窗口的可见性和存在性。谢谢
【解决方案2】:

加载进程需要时间,因此请尝试以这种方式使用它。

do
process.refresh()
Process.MainWindowTitle.tostring.length >0
loop

msgbox(process.mainwindowtitle.tostring)

这应该可以工作

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2010-12-11
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多