繁体   English   中英

如何确定来自其他应用程序的窗口是否可见?

[英]How can I determine whether a window from another application is visible?

我最近获得了WinX DVD Ripper Platinum的许可证,我很恼火的是,当它翻录DVD时,它并没有告诉我。 没有弹出窗口,没有系统“嘟嘟” - 没什么。 进度对话框只是关闭。 主窗口甚至不会集中注意力......

为了加快我的DVD翻录过程,我正在制作一个简单的控制台应用程序(使用C#和VS2010):

  1. 查找名为“WinX_DVD_Ripper_Platinum”的进程句柄(WinX DVD Ripper Platinum软件的进程名称)
  2. 使用此示例中在pinvoke.net中定义的GetChildWindows方法查找该进程上的进度对话框的句柄
  3. 启动一个System.Timers.Timer实例,该实例检查(或应该检查)进度对话框是否每5秒关闭一次(使用GetWindowLong函数 ,以及
  4. 使用System.Console.Beep方法发出一些哔声,告诉用户rip已完成。 定时器自动重置,每5秒执行一次检查(或在对话框关闭时重复发出蜂鸣声),直到用户按下控制台窗口中的某个键。

第1步,第2步和第4步工作正常,但我遇到第3步的问题,我的问题是,我应该使用哪种窗口样式常量来检查窗口是否可见? (WS_VISIBLE没有工作......)

有关更多详细信息,这是我用来检查对话框可见性的函数:

private static bool IsWindowVisible(IntPtr hwnd)
{
    var style = GetWindowLong(hwnd, GWL.GWL_EXSTYLE);
    var visible = style & (WS flag goes here);
    return visible != 0;
}

您是否尝试过使用IsWindowVisible()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM