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

时间:2011-01-04 00:30:58

标签: c# windows winapi pinvoke

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

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

  1. 查找名为“WinX_DVD_Ripper_Platinum”的进程句柄(WinX DVD Ripper Platinum软件的进程名称)
  2. 使用this sample at pinvoke.net
  3. 中定义的GetChildWindows方法查找该流程的进度对话框的句柄
  4. 启动System.Timers.Timer实例,检查(或应该检查)进度对话框是否每5秒关闭一次(使用the GetWindowLong function
  5. 使用System.Console.Beep方法发出几声嘟嘟声,告诉用户rip已完成。定时器自动复位,每隔5秒执行一次检查(如果对话框已关闭则重复发出蜂鸣声),直到用户按下控制台窗口中的某个键为止。
  6. 第1步,第2步和第4步工作正常,但我遇到第3步的问题,我的问题是,我应该使用哪个window style constants来检查窗口是否可见? (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;
    }
    

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用IsWindowVisible()